当前位置: 首页 > article >正文

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

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

  • 一、环境准备
  • 二、安装与配置 Kubernetes
    • 安装 windows 版的 docker
    • 启动 kubernetes
    • 安装 windows 版的 kubectl 工具
    • 下载 k8s-for-docker-desktop
    • 启动 Kubernetes Dashboard
  • 二、在 Kubernetes 上部署项目
    • 创建一个 demo 项目
    • 用 Docker 运行项目
    • 将镜像 Push 到 远程
    • 编写 Kubernetes 部署配置文件
    • 应用部署项目到 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 versionClient Version: v1.29.2
Kustomize Version: v5.0.4-0.20230601165947-6ce0bf390ce3
Server Version: v1.29.2# 查看k8s节点状态
kubectl get nodesNAME             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-datalabels: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_APPvalue: "app.py"  # 设置 Flask 的主程序文件- name: FLASK_ENVvalue: "production"  # 设置 Flask 的运行环境- name: PYTHONDONTWRITEBYTECODEvalue: "1"  # 禁止生成 .pyc 文件- name: PYTHONUNBUFFEREDvalue: "1"  # 设置 Python 日志为非缓冲模式resources:  # 资源限制requests:memory: "128Mi"  # 请求的最小内存cpu: "250m"  # 请求的最小 CPUlimits:memory: "256Mi"  # 最大允许使用的内存cpu: "500m"  # 最大允许使用的 CPUlivenessProbe:  # 存活探针,用于检测服务是否存活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: TCPnodePort: 30008  # 可以省略,Kuberrnetes 会自动分配一个端口 范围 30000-32767port: 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 端口。

相关文章:

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

Windows 环境下 Docker Desktop Kubernetes 部署项目指南 一、环境准备二、安装与配置 Kubernetes安装 windows 版的 docker启动 kubernetes安装 windows 版的 kubectl 工具下载 k8s-for-docker-desktop启动 Kubernetes Dashboard 二、在 Kubernetes 上部署项目创建一个 demo …...

WebSocket 详解:全双工通信的实现与应用

目录 一、什么是 WebSocket&#xff1f;&#xff08;简介&#xff09; 二、为什么需要 WebSocket&#xff1f; 三、HTTP 与 WebSocket 的区别 WebSocket 的劣势 WebSocket 的常见应用场景 WebSocket 握手过程 WebSocket 事件处理和生命周期 一、什么是 WebSocket&#xf…...

神经网络|(二)sigmoid神经元函数

【1】引言 在前序学习进程中&#xff0c;我们已经了解了基本的二元分类器和神经元的构成&#xff0c;文章学习链接为&#xff1a; 神经网络|(一)加权平均法&#xff0c;感知机和神经元-CSDN博客 在此基础上&#xff0c;我们认识到神经元本身在做二元分类&#xff0c;是一种非…...

云原生:构建现代化应用的基石

一、什么是云原生&#xff1f; 云原生是一种构建和运行应用程序的方法&#xff0c;旨在充分利用云计算的分布式系统优势&#xff0c;例如弹性伸缩、微服务架构、容器化技术等。云原生应用程序从设计之初就考虑到了云环境的特点&#xff0c;能够更好地适应云平台的动态变化&…...

【浏览器 - Chrome调试模式,如何输出浏览器中的更多信息】

在开发过程中&#xff0c;如果不主动console.log&#xff0c;浏览器中的信息有些不会主动输出到 控制台console里面。这个如果是一些浏览器内部的接口调试&#xff0c;则会很麻烦。比如RTCPeerConnection过程 &#xff0c;RTCPeerConnection属于浏览器内部的方法&#xff0c;其…...

不同操作系统(Windows、Linux)上安装和配置Tomcat的详细教程

以下是在不同操作系统(Windows、Linux)上安装和配置Tomcat的详细教程: Windows系统下Tomcat的安装与配置 下载Tomcat 访问Apache Tomcat官方网站(https://tomcat.apache.org)。在“Download”页面,根据需求选择合适的Tomcat版本。例如,选择“Core”下的zip压缩包下载。…...

MapReduce,Yarn,Spark理解与执行流程

MapReduce的API理解 Mapper 如果是单词计数&#xff1a;hello&#xff1a;1&#xff0c; hello&#xff1a;1&#xff0c; world&#xff1a;1 public void map(Object key, // 首字符偏移量Text value, // 文件的一行内容Context context) // Mapper端的上下文&#xff0c;…...

unity导入图片素材注意点和AI寻路模块导入

当我们导入了图片资源&#xff0c;我们需要设置为Sprite类型 UI资源的位置通常是Rect Transform 要进行转化&#xff1a; (imgHP.transform as RectTransform).sizeDelta new Vector2((float)hp / maxHP * hpW,74); RectTransform 是Unity中用于UI元素的特殊变换组件&#…...

单片机-STM32 IIC通信(OLED屏幕)(十一)

一、屏幕的分类 1、LED屏幕&#xff1a; 由无数个发光的LED灯珠按照一定的顺序排列而成&#xff0c;当需要显示内容的时候&#xff0c;点亮相关的LED灯即可&#xff0c;市场占有率很高&#xff0c;主要是用于户外&#xff0c;广告屏幕&#xff0c;成本低。 LED屏是一种用发光…...

Windows Docker Desktop安装及使用 Docker 运行 MySQL

Docker Desktop是Docker的官方桌面版&#xff0c;专为Mac和Windows用户设计&#xff0c;提供了一个简单易用的界面来管理和运行Docker容器。它集成了Docker引擎&#xff0c;为开发人员提供了一个快速、可靠、可扩展的方式来构建、运行和管理应用。DockerDesktop的优势在于&…...

开源RAG框架Kotaemon及其混合检索系统的优势与局限

开源RAG框架Kotaemon及其混合检索系统的优势与局限 大模型&#xff08;LLMs&#xff09;的快速发展令人瞩目&#xff0c;但如何让这些模型更有效地利用外部知识&#xff0c;一直是业界关注的焦点。检索增强生成&#xff08;Retrieval-Augmented Generation&#xff0c;RAG&…...

Day21-【软考】短文,计算机网络开篇,OSI七层模型有哪些协议?

文章目录 OSI七层模型有哪些&#xff1f;有哪些协议簇&#xff1f;TCP/IP协议簇中的TCP协议三次握手是怎样的&#xff1f;基于UDP的DHCP协议是什么情况&#xff1f;基于UDP的DNS协议是什么情况&#xff1f; OSI七层模型有哪些&#xff1f; 题目会考广播域 有哪些协议簇&#x…...

Kmesh v1.0 正式发布!7 大特性提升网络流量管理效率和安全性

Kmesh v1.0 正式发布&#xff01;7 大特性提升网络流量管理效率和安全性 2025 年新年伊始&#xff0c;Kmesh 团队正式发布了 Kmesh v1.0234。以下是 Kmesh v1.0 提升网络流量管理效率和安全性的 7 大特性35&#xff1a; 加密通信&#xff1a;引入 IPsec 协议对节点间流量加密&a…...

巧妙获取ListBox控件的选中条目(按点击顺序)

实例需求&#xff1a;用户窗体中有两个控件 列表框&#xff1a;ListBox1&#xff0c;支持多选按钮&#xff1a;CommandButton1 现在需要记录用户在列表框中选择顺序&#xff08;不考虑选中后再次点击取消选中的操作&#xff09;&#xff0c;如下图所示。 Dim objDic As Objec…...

动手学图神经网络(3):利用图神经网络进行节点分类 从理论到实践

利用图神经网络进行节点分类&#xff1a;从理论到实践 前言 在之前的学习中&#xff0c;大家对图神经网络有了初步的了解。本次教程将深入探讨如何运用图神经网络&#xff08;GNNs&#xff09;来解决节点分类问题。在节点分类任务里&#xff0c;大家往往仅掌握少量节点的真实…...

Level DB --- TableBuilder

TableBuilder是Level DB里面重要的类和模块&#xff0c;它描述了数据如何序列化到文件中&#xff0c;以及数据里面的格式逻辑。它里面包含了之前介绍的多个模块和类。 data block、filter block和index block block格式&#xff0c;之前已经介绍过Level DB --- BlockBuilder-…...

Leecode刷题C语言之组合总和②

执行结果:通过 执行用时和内存消耗如下&#xff1a; int** ans; int* ansColumnSizes; int ansSize;int* sequence; int sequenceSize;int** freq; int freqSize;void dfs(int pos, int rest) {if (rest 0) {int* tmp malloc(sizeof(int) * sequenceSize);memcpy(tmp, seque…...

Hook 函数

什么是hook函数&#xff1f; 在计算机编程中&#xff0c;hook函数是指在特定的事件发生时被调用的函数&#xff0c;用于在事件发生前或后进行一些特定的操作。通常&#xff0c;hook函数作为回调函数被注册到事件处理器中&#xff0c;当事件发生时&#xff0c;事件处理器会自动…...

自然元素有哪些选择?

在设计浪漫风格的壁纸时&#xff0c;自然元素是营造温馨、梦幻氛围的关键。以下是一些常见的自然元素选择&#xff0c;以及它们在壁纸设计中的应用建议&#xff1a; 一、花朵 玫瑰&#xff1a; 特点&#xff1a;玫瑰是浪漫的象征&#xff0c;尤其是红色和粉色玫瑰&#xff0c;…...

【miniconda】:langraph的windows构建

langraph需要python3.11 langraph强烈建议使用py3.11 默认是3.12 官方 下载仓库 下载老版本的python (后续发现新版miniconda也能安装老版本的python) 在这里...

自动驾驶中的多传感器时间同步

目录 前言 1.多传感器时间特点 2.统一时钟源 2.1 时钟源 2.2 PPSGPRMC 2.3 PTP 2.4 全域架构时间同步方案 3.时间戳误差 3.1 硬件同步 3.2 软件同步 3.2.3 其他方式 ① ROS 中的 message_filters 包 ② 双端队列 std::deque 参考&#xff1a; 前言 对多传感器数据…...

15 分布式锁和分布式session

在java中一个进程里面使用synchronized在new出来对象头信息中加锁&#xff0c;如果是静态方法中在加载的类信息中加锁(我们在锁的原理中讲过)。如果使用lock加锁可以自己指定。这些都是在同一个进程空间中的操作。如果在分布式环境中由于程序不在一个进程空间&#xff0c;就没办…...

【蓝桥杯】43692.青蛙跳杯子

题目描述 X 星球的流行宠物是青蛙&#xff0c;一般有两种颜色&#xff1a;白色和黑色。 X 星球的居民喜欢把它们放在一排茶杯里&#xff0c;这样可以观察它们跳来跳去。 如下图&#xff0c;有一排杯子&#xff0c;左边的一个是空着的&#xff0c;右边的杯子&#xff0c;每个…...

[Dialog屏幕开发] 屏幕绘制(下拉菜单)

阅读该篇文章之前&#xff0c;可先阅读下述资料 [Dialog屏幕开发] Table Control 列数据操作https://blog.csdn.net/Hudas/article/details/145343731?spm1001.2014.3001.5501上篇文章我们的屏幕已实现了如下功能 我们已经设置了按钮对Table Control 列的数据进行了操作 接下…...

AIGC视频生成模型:慕尼黑大学、NVIDIA等的Video LDMs模型

大家好&#xff0c;这里是好评笔记&#xff0c;公主号&#xff1a;Goodnote&#xff0c;专栏文章私信限时Free。本文详细介绍慕尼黑大学携手 NVIDIA 等共同推出视频生成模型 Video LDMs。NVIDIA 在 AI 领域的卓越成就家喻户晓&#xff0c;而慕尼黑大学同样不容小觑&#xff0c;…...

JVM常见知识点

在《深入理解Java虚拟机》一书中&#xff0c;介绍了JVM的相关特性。 1、JVM的内存区域划分 在真实的操作系统中&#xff0c;对于地址空间进行了分区域的设计&#xff0c;由于JVM是仿照真实的机器进行设计的&#xff0c;那么也进行了分区域的设计。核心区域有四个&#xff0c;…...

工业数据分析:解锁工厂数字化的潜力

工业数据分析:解锁工厂数字化的潜力 引言 工业数据分析是工业4.0时代的核心技术之一。从生产设备的传感器数据,到供应链的物流信息,工业环境中每天都会产生海量数据。这些数据蕴藏着巨大的潜力,能够帮助企业优化生产流程、降低运营成本、提高产品质量。 然而,如何高效地…...

类和对象(4)——多态:方法重写与动态绑定、向上转型和向下转型、多态的实现条件

目录 1. 向上转型和向下转型 1.1 向上转型 1.2 向下转型 1.3 instanceof关键字 2. 重写&#xff08;overidde&#xff09; 2.1 方法重写的规则 2.1.1 基础规则 2.1.2 深层规则 2.2 三种不能重写的方法 final修饰 private修饰 static修饰 3. 动态绑定 3.1 动态绑…...

系统思考—问题分析

很多中小企业都在面对转型的难题&#xff1a;市场变化快&#xff0c;资源有限&#xff0c;团队协作不畅……这些问题似乎总是困扰着我们。就像最近和一位企业主交流时&#xff0c;他提到&#xff1a;“我们团队每天都很忙&#xff0c;但效率始终没见提升&#xff0c;感觉像是在…...

第24篇:Python开发进阶:掌握Python编程中的调试技巧

第24篇&#xff1a;调试技巧 内容简介 在软件开发过程中&#xff0c;调试是确保代码正确性和稳定性的关键步骤。有效的调试技巧不仅能帮助开发者快速定位和修复错误&#xff0c;还能提升代码的整体质量和可维护性。本篇文章将探讨如何使用Python内置的调试工具pdb进行调试&am…...