首页 > 系统相关 >Windows 环境下 Docker Desktop + Kubernetes 部署项目指南

Windows 环境下 Docker Desktop + Kubernetes 部署项目指南

时间:2025-01-22 16:56:25浏览次数:3  
标签:kubectl Kubernetes Windows app Desktop test docker Docker

Windows 环境下 Docker Desktop + Kubernetes 部署项目指南

在这里插入图片描述

一、环境准备

  • Windows 操作系统(本文使用 Windows 11)
  • Docker Desktop 安装(Windows 版本)
  • kubectl 工具(Windows 版本):用于与 Kubernetes API 进行交互。

二、安装与配置 Kubernetes

安装 windows 版的 docker

安装 Docker Desktop: https://www.docker.com/get-started/

启动 kubernetes

打开 Docker-Desktop, 确保 Docker 正常运行,然后启动 Kubernetes,打开设置,然后找到 Kubernetes,点击 Enable Kubernetes ,然后点击 Apply & restart。

注:在启动 Kubernetes 过程中可能会比较慢,或者会下载失败,解决方法有两个,一个是设置中找到 Docker Engine,配置镜像加速器;另外一个方法是科学上网; 一下是我自己的配置文件,如果镜像加速器不起作用,可自行更换。

{
  "builder": {
    "gc": {
      "defaultKeepStorage": "20GB",
      "enabled": true
    }
  },
  "experimental": false,
  "registry-mirrors": [
    "https://docker.1panel.live"
  ]
}

安装 windows 版的 kubectl 工具

下载地址:https://kubernetes.io/releases/download/#binaries

找到最新的稳定版本下载 windows 版的 kubectl.exe 文件

安装完成之后在 cmd 中输入命令进行验证:

# 查看kubecdtl 的版本信息
kubectl version

Client Version: v1.29.2
Kustomize Version: v5.0.4-0.20230601165947-6ce0bf390ce3
Server Version: v1.29.2

# 查看k8s节点状态
kubectl get nodes

NAME             STATUS   ROLES           AGE   VERSION
docker-desktop   Ready    control-plane   34m   v1.27.2

下载 k8s-for-docker-desktop

  1. 下载

下载地址:https://github.com/AliyunContainerService/k8s-for-docker-desktop

选择跟自己的 kubernetes 对应的版本,然后选择对应的分支下载

比如我的 kubernetes 版本是 v1.29.2

则就选 v1.29.2 分支进行下载

  1. 安装

在 Windows 上,使用管理员身份运行 PowerShell,进入到下载的 k8s-for-docker-desktop 项目根目录下

执行命令

.\load_images.ps1

注意:

  • 如果因为安全策略无法执行,请执行 <font style="color:rgb(199, 37, 78);background-color:rgb(249, 242, 244);">Set-ExecutionPolicy RemoteSigned</font> 命令
  • 如果需要,可以修改 <font style="color:rgb(199, 37, 78);background-color:rgb(249, 242, 244);">images.properties</font> 文件自行加载自己需要的镜像

启动 Kubernetes Dashboard

k8s-for-docker-desktop 根目录下执行以下命令

  1. 创建 Kubernetes Dashboard
kubectl create -f kubernetes-dashboard.yaml
# 启动代理服务器,允许本地通过 http://localhost:8001 访问 Kubernetes API 和 Kubernetes Dashboard
kubectl proxy
  1. 配置 Kubernetes Dashboard 访问令牌
# 授权 kube-system 默认服务账号
kubectl apply -f kube-system-default.yaml
  1. 查看 Kubernetes Dashboard 访问令牌
$TOKEN=((kubectl -n kube-system describe secret default | Select-String "token:") -split " +")[1]
kubectl config set-credentials docker-desktop --token="${TOKEN}"
echo $TOKEN
  1. 访问 Kubernetes Dashboard

http://127.0.0.1:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/#/login

输入 token 登录即可

二、在 Kubernetes 上部署项目

创建一个 demo 项目

我这块项目名称叫 test-app

  1. 创建 app.py
from flask import Flask, render_template, request, jsonify

# Create Flask app instance
app = Flask(__name__)

# Basic route that returns plain text
@app.route('/')
def home():
    return 'Welcome to Flask Demo!'

# Route that returns HTML
@app.route('/hello/<name>')
def hello(name):
    return f'<h1>Hello, {name}!</h1>'

# Route that renders a template
@app.route('/greet')
def greet():
    return render_template('greet.html', message='Welcome to our website!')

# Route that handles POST requests
@app.route('/api/data', methods=['POST'])
def receive_data():
    data = request.get_json()
    return jsonify({
        'status': 'success',
        'received_data': data
    })

# Route with query parameters
@app.route('/search')
def search():
    query = request.args.get('q', '')
    return f'Search query: {query}'

if __name__ == '__main__':
    app.run(debug=True)

  1. 创建 greet.html
<!DOCTYPE html>
<html lang="zh">
  <head>
    <title>Greeting Page</title>
  </head>
  <body>
    <h1>{{ message }}</h1>
  </body>
</html>
  1. 创建 Dockerfile

在项目根目录下创建一个 Dockerfile

# Use official Python image as base
FROM python:3.9-slim

# Set working directory
WORKDIR /app

# Set environment variables
ENV PYTHONDONTWRITEBYTECODE=1 \
    PYTHONUNBUFFERED=1 \
    FLASK_APP=app.py \
    FLASK_ENV=production

# Install system dependencies
RUN apt-get update \
    && apt-get install -y --no-install-recommends \
        gcc \
        python3-dev \
    && rm -rf /var/lib/apt/lists/*

# Install Python dependencies
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# Copy application code
COPY . .

# Expose port
EXPOSE 5000

# Run the application
CMD ["gunicorn", "--bind", "0.0.0.0:5000", "app:app"]


用 Docker 运行项目

此处使用 Docker 运营项目只是为了确保镜像没有问题,项目可以正常访问。

# 构建镜像
docker build -t test-app .

# 运行容器
docker run --rm -p 5000:5000 --name test-app test-app

访问测试

将镜像 Push 到 远程

将刚才打包好的镜像推送到远程仓库,我这块使用的是默认的远程仓库 Docker Hub

# 登录到 Docker Hub 或其他私有仓库,输入用户名密码即可,如果没有账号,则可前往 Docker Hub 官网注册即可
docker login

# 给镜像打标签
docker tag test-app:latest gitzoom/test-app:latest
# 或者 docker tag test-app:latest docker.io/gitzoom/test-app:latest
# 如果不加域名,默认就是docker.io ,  gitzoom 为自己的namespace

# 推送镜像到远程仓库
docker push gitzoom/test-app:latest

编写 Kubernetes 部署配置文件

在项目根目录下创建 Kubernetes 部署文件 k8s-deployment.yaml,以定义 Kubernetes 部署和服务。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test-app-deployment # 部署的名称
  namespace: baize-data
  labels:
    app: test-app  # 给资源打标签,便于筛选和管理
spec:
  replicas: 2  # 定义副本数量以确保高可用
  selector:
    matchLabels:
      app: test-app  # 匹配 Pod 的标签,确保服务与 Pod 绑定
  template:
    metadata:
      labels:
        app: test-app  # Pod 的标签,需与 selector 对应
    spec:
      containers:
        - name: test-app  # 容器名称
          image: gitzoom/test-app:latest  # 使用构建的镜像名称和标签,从远程仓库拉取镜像
          ports:
            - containerPort: 5000  # 容器内部监听的端口
          env:
            - name: FLASK_APP
              value: "app.py"  # 设置 Flask 的主程序文件
            - name: FLASK_ENV
              value: "production"  # 设置 Flask 的运行环境
            - name: PYTHONDONTWRITEBYTECODE
              value: "1"  # 禁止生成 .pyc 文件
            - name: PYTHONUNBUFFERED
              value: "1"  # 设置 Python 日志为非缓冲模式
          resources:  # 资源限制
            requests:
              memory: "128Mi"  # 请求的最小内存
              cpu: "250m"  # 请求的最小 CPU
            limits:
              memory: "256Mi"  # 最大允许使用的内存
              cpu: "500m"  # 最大允许使用的 CPU
          livenessProbe:  # 存活探针,用于检测服务是否存活
            httpGet:
              path: "/"  # 检测的路径
              port: 5000  # 检测的端口
            initialDelaySeconds: 5  # 初始延迟
            periodSeconds: 10  # 检测间隔
          readinessProbe:  # 就绪探针,用于检测服务是否准备好接收流量
            httpGet:
              path: "/"  # 检测的路径
              port: 5000  # 检测的端口
            initialDelaySeconds: 5  # 初始延迟
            periodSeconds: 10  # 检测间隔
      restartPolicy: Always  # 容器策略:始终重启
---
apiVersion: v1
kind: Service
metadata:
  name: test-app-service # 服务的名称
  labels:
    app: test-app  # 标签与 Deployment 一致
spec:
  selector:
    app: test-app  # 匹配 Deployment 的标签
  ports:
    - protocol: TCP
      nodePort: 30008  # 可以省略,Kuberrnetes 会自动分配一个端口 范围 30000-32767
      port: 3000  # 服务暴露的端口
      targetPort: 5000  # 转发到容器的端口
  type: NodePort    # 服务类型,NodePort 通过在每个 Node 上打开一个特定端口,将外部请求转发到集群内部的Service,进而达到后端的Pod

应用部署项目到 Kubernetes

  1. 将项目部署应用于 Kubernetes
# 在项目根目录下执行


deployment.apps/test-app-demployment created
service/test-app-deployment created
  1. 验证部署和服务
# 检查 Pod 的状态
kubectl get pods
kubectl get deployments 
kubectl get services

也可以通过访问 Kubernetes Dashboard 来查看 service 和 pod 的状态

访问验证项目

通过访问 [http://127.0.0.1:30009/greet](http://127.0.0.1:30009/greet)来验证项目是否部署成功,30009 是在 k8s-deployment.yaml 中配置的 NodePort 端口。

标签:kubectl,Kubernetes,Windows,app,Desktop,test,docker,Docker
From: https://blog.csdn.net/qq_45609369/article/details/145306685

相关文章

  • Windows下,powershell实现自动编译生成Visual Studio项目
    windows平台、VS2019、x64、C++/C在进行生成编译版本,并输出版本时,常常会遇到多个工程编译,同时提取出所需的动态库dll、执行文件exe,并进行打包。每次进行编译和打包均需要手动操作,过于繁琐,所以这里通过一个powershell文件去执行自动编译,后续可以通过批处理或者其他的powershell......
  • Windows和Linux系统安装东方通
    1.Windows系统安装东方通1.1安装jdk1.2下载安装文件及license文件官网:https://www.tongtech.com/sy.html下载windows系统文件1.3在D盘下面创建TongWeb文件夹,上传文件1.4解压文件,把license文件放到bin同级目录下1.5启动,进入bin目录下启动双击:startserver.bat停止......
  • Windows PowerShell 终端配置
    如何修改WindowsPowerShell的提示符WindowsPowerShell支持配置文件,可以创建配置文件,通过配置文件来修改配置文件路径打开一个WindowsPowershell执行如下命令,查看文件路径$PROFILE|Select-Object*根据结果输出,可以查看CurrentUserAllHosts的配置路径是什么,该变量......
  • wpf 全网最全!窗体(Windows)的常见事件及其详细解释
    文章目录WPF事件的参数定义1.`sender`参数定义用途示例注意2.`e`参数定义用途常用属性示例事件参数(EventArgs)常见的事件参数类WPF窗体(Window)常见事件1.**Activated**2.**Closed**3.**Closing**4.**ContentRendered**5.**Deactivated**6.**DragEnter**7.**D......
  • 在 Windows 中,通过修改注册表或者其他配置文件,跳过首次启动时的设置过程。这些设置通
    在Windows中,除了跳过InternetExplorer的第一次启动配置外,还有一些其他应用和服务,也可以通过修改注册表或者其他配置文件,跳过首次启动时的设置过程。这些设置通常用于让用户能够直接进入程序或系统界面,而不需要经历繁琐的初始配置步骤。以下是一些常见的跳过首次启动配置的示......
  • windows对文件夹(目录)添加备注信息
    //为目录添加备注信息1.每个目录下都有一个desktop.ini的隐藏文件,该文件内容能够配置该目录的图标,提示信息如果没有,那就对目录更改一下图标,就能自动生成刷新2.在[.ShellClassInfo]下添加"InfoTip=内容"该项即可添加备注信息保存退出,将文件夹的显示信息上勾选备注......
  • HPC[High Performance Computing ] Cluster: Linux(Slurm)vs. Windows HPC Server{renam
    -[slurmhpcclusterinstallation-Search](https://cn.bing.com/search?go=Search&q=slurm+hpc+cluster+installation&qs=n&form=QBRE&sp=-1&lq=0&pq=slurm+hpc+cluster+installation&sc=5-30&sk=&cvid=C4BA3EFE837244CB89D4D49D6DFA......
  • Windows Terminal/Powershell 设置自动补全, 智能提示 【类似于mac的iterm2功能】
    WindowsTerminal/Powershell设置自动补全,智能提示 安装:´PSReadLine´version2.1.0 #安装:´PSReadLine´version2.1.0Install-ModulePSReadLine-RequiredVersion2.1.0#初始化:Import-ModulePSReadLineSet-PSReadLineOption-PredictionSourceHistory ......
  • Windows 快速启动器
    在日常工作和学习中,我们经常需要快速访问某些功能或资源,例如打开常用网站、启动应用程序或执行特定命令。Linux用户可以通过 alias 快速实现这些操作,但在Windows上缺乏类似的原生支持。本文将介绍如何使用Python开发一个 隐藏式文本输入框程序,模拟Linux的 alias 功......
  • Windows当服务器,生成自签名证书
    Windows安装OpenSSL参考博客https://blog.csdn.net/loveryunz/article/details/136739887生成SSL证书和私钥打开命令提示符或PowerShell,并运行以下命令:生成私钥(.key文件):opensslgenrsa-outserver.key2048生成证书签名请求(.csr文件):opensslreq-new-keyserver......