Docker与Kubernetes从零实战:手把手搭建云原生学习环境 30款热门AI模型一站整合DeepSeek/GLM/Qwen 随心用限时 5 折。 点击领海量免费额度你是不是也遇到过这样的困惑想学 Docker 和 Kubernetes但面对海量教程不知道从哪开始网上资料要么是零散的“Hello World”要么是直接上生产级配置中间仿佛隔着一道鸿沟。更头疼的是很多教程环境不一致命令过时跟着操作总是报错信心备受打击。这篇文章要解决的就是这个问题。我们不讲空洞的理论也不堆砌复杂的命令而是带你从零开始用一条清晰的路径亲手搭建一个可用的 Docker K8S 学习环境并完成一个从代码到容器再到集群部署的完整实战。读完本文你将能清晰地回答Docker 和 K8S 到底解决了什么问题我该如何在自己的机器上跑起来它们在实际项目中是怎么协作的以及学习路上最常见的“坑”都在哪里。我们的目标很明确一期内容让你掌握 Linux 云计算运维的核心技术栈——Docker 与 Kubernetes 的入门到实战能力。无论你是刚接触运维的开发者还是希望向云原生转型的工程师这篇文章都将提供一份可落地、可复现的操作指南。1. 为什么 Docker 和 K8S 是今天必须掌握的技能在深入技术细节之前我们必须先搞清楚一个根本问题为什么是 Docker 和 K8S它们究竟带来了什么改变想象一下传统的应用部署场景开发者在自己的 Windows 电脑上用 Python 3.8 写好了代码依赖一堆特定的库。运维同学拿到代码后需要在 CentOS 7 的服务器上部署结果发现服务器上是 Python 3.6缺少某个库版本还不兼容。于是开始了漫长的“在我机器上是好的”的扯皮和调试。这就是经典的“环境不一致”问题。Docker 的出现本质上解决的是应用交付的环境一致性问题。它把应用及其所有依赖代码、运行时、系统工具、系统库打包成一个标准化的单元即容器镜像。这个镜像可以在任何安装了 Docker 引擎的环境中运行且行为完全一致。开发者的“构建一次处处运行”梦想在容器层面得以实现。那么当你有成百上千个这样的容器需要管理时新的问题又来了如何调度它们到不同的机器上如何保证它们的高可用如何实现滚动更新而不中断服务如何管理容器间的网络和存储Kubernetes 的出现就是为了解决容器化应用的编排、管理和运维问题。它就像一个容器集群的“操作系统”负责资源的调度、服务的发现与负载均衡、自动扩缩容、自我修复等。它让运维人员从手动管理单个容器的苦海中解脱出来通过声明式的配置文件YAML来管理整个应用的生命周期。所以Docker 和 K8S 的关系可以简单理解为Docker 负责“造砖”制作容器Kubernetes 负责“盖房子”编排容器集群。这套组合拳已经成为云原生时代的基石也是企业招聘运维、后端、甚至全栈工程师时的核心技能要求。学习它们不再是“加分项”而是“必备项”。2. 核心概念快速扫盲容器、镜像与集群在动手之前我们需要统一语言理解几个最核心的概念。很多初学者在这里容易混淆。2.1 Docker 核心三要素镜像一个只读的模板。类似于面向对象编程中的“类”。它包含了运行应用所需的文件系统结构和内容。例如一个nginx:latest镜像就包含了 Nginx 软件及其运行环境。容器镜像的一个运行实例。类似于由“类”创建出来的“对象”。容器是独立、可运行的进程拥有自己的隔离的命名空间如文件系统、网络、进程树。我们操作和交互的对象就是容器。仓库存放镜像的地方。最著名的是 Docker Hub类似于代码托管平台 GitHub。你可以从仓库拉取pull公共镜像也可以推送push自己构建的镜像到私有仓库。一个生动的类比镜像就像是软件的“安装光盘”ISO文件容器就像是使用这张光盘安装并运行起来的“操作系统”。你可以用同一张光盘镜像安装到无数台电脑宿主机上每个运行起来的系统容器都是独立的。2.2 Kubernetes 核心对象K8S 通过一系列“对象”来描述集群的期望状态。最重要的几个是PodK8S 中最小的可部署和管理单元。一个 Pod 可以包含一个或多个紧密关联的容器它们共享网络和存储空间。你可以把 Pod 想象成一个“逻辑主机”里面的容器就像这个主机上运行的进程。Deployment用于定义 Pod 的部署策略。它声明了要运行多少个 Pod 副本Replicas以及如何更新它们滚动更新。它是管理无状态应用如 Web 服务器的主要对象。Service为一组 Pod 提供一个稳定的网络访问端点。Pod 的生命周期是短暂的IP 地址会变。Service 通过标签选择器找到对应的 Pod并提供负载均衡让外部或其他内部服务能够稳定地访问到它们。Node集群中的工作机器可以是物理机或虚拟机。每个 Node 上运行着容器运行时如 Docker和 K8S 代理kubelet。核心思想在 K8S 中你不再直接命令“启动一个容器”而是通过编写 YAML 文件声明“我需要一个由 3 个副本组成的 Nginx 服务”。K8S 的控制器会持续工作确保现实状态与你的声明一致。这被称为“声明式 API”和“控制器模式”。3. 环境准备搭建你的第一个实验环境理论说再多不如动手一试。为了确保环境一致我们选择最通用、问题最少的方案。请注意以下操作均假设你有一台可以安装虚拟机的电脑Windows/macOS/Linux均可。3.1 方案选择为什么不用 Docker Desktop 直接学 K8S很多教程会推荐在 Windows/macOS 上直接安装 Docker Desktop 并开启其内置的 Kubernetes 单节点集群。这确实方便但不推荐初学者从这里开始原因有二隐藏了复杂性Docker Desktop 帮你做了太多事情你无法直观理解 K8S 集群的各个组件如 etcd, kube-apiserver是如何协作的。环境差异大与生产环境中基于 Linux 的 K8S 集群有较大差异学到的知识迁移成本高。我们的选择在虚拟机中安装一个纯净的 Linux 系统如 Ubuntu Server然后手动安装 Docker 和搭建一个最小化的 K8S 集群。这个过程能让你真正理解每个组件的作用。3.2 基础环境搭建安装虚拟机软件推荐使用VirtualBox免费开源或 VMware Workstation Player个人免费。本文以 VirtualBox 为例。准备 Linux 镜像前往 Ubuntu 官网下载Ubuntu Server 22.04 LTS的 ISO 镜像文件。LTS 代表长期支持版更稳定。创建虚拟机打开 VirtualBox点击“新建”。名称k8s-master(代表主节点)类型Linux版本Ubuntu (64-bit)内存至少分配2048 MB2GB建议 4GB 以上。硬盘创建虚拟硬盘大小至少20 GB选择动态分配。安装 Ubuntu Server启动虚拟机选择下载好的 ISO 镜像。安装过程语言选择英文避免后续终端乱码其他选项大多可以默认。关键配置主机名设置为k8s-master。用户名自己设定例如k8suser。安装 OpenSSH server务必勾选这样我们可以通过宿主机 SSH 连接操作更方便。等待安装完成重启。3.3 系统基础配置通过 VirtualBox 界面或 SSH 连接到你的k8s-master虚拟机。# 1. 更新系统软件包列表 sudo apt update # 2. 升级已安装的软件包 sudo apt upgrade -y # 3. 安装一些常用的工具 sudo apt install -y vim curl wget net-tools # 4. 关闭交换分区K8S 要求 sudo swapoff -a # 永久关闭编辑 /etc/fstab 文件注释掉包含 ‘swap’ 的行 sudo sed -i / swap / s/^\(.*\)$/#\1/g /etc/fstab # 5. 配置主机名解析让 master 能通过主机名找到自己 # 编辑 hosts 文件 sudo vim /etc/hosts # 在文件末尾添加一行请替换 192.168.x.x 为你的虚拟机实际IP可用 ip addr 命令查看 # 192.168.x.x k8s-master至此一个干净的 Linux 实验环境就准备好了。接下来我们安装主角Docker。4. Docker 安装与核心操作实战4.1 安装 Docker Engine我们将使用 Docker 官方提供的便捷脚本安装这也是目前最推荐的方式。# 1. 下载并运行 Docker 官方安装脚本 curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh # 2. 将当前用户加入 docker 用户组这样就不需要每次都加 sudo 来运行 docker 命令 sudo usermod -aG docker $USER # **重要**执行此命令后你需要退出当前 SSH 会话重新登录才能使组权限生效。 # 3. 重新登录后验证 Docker 安装是否成功 docker version # 如果看到 Client 和 Server 的版本信息说明安装成功。 # 4. 设置 Docker 开机自启 sudo systemctl enable docker sudo systemctl start docker4.2 Docker 核心命令速通安装完成后我们通过几个最常用的命令来感受 Docker。# 1. 运行你的第一个容器Hello World docker run hello-world # 这条命令会做以下几件事 # a) 从 Docker Hub 拉取 hello-world 镜像如果本地没有。 # b) 基于该镜像创建一个新的容器并运行。 # c) 容器执行一段简单的程序输出欢迎信息后退出。 # 2. 运行一个持续服务的容器Nginx docker run -d -p 8080:80 --name my-nginx nginx # 参数解释 # -d: 后台运行detached mode # -p 8080:80: 端口映射将宿主机的 8080 端口映射到容器的 80 端口 # --name my-nginx: 给容器起个名字方便管理 # nginx: 使用的镜像名 # 3. 查看容器状态 docker ps # 查看正在运行的容器 docker ps -a # 查看所有容器包括已停止的 # 4. 测试访问 # 在宿主机你的物理机浏览器中访问http://虚拟机IP:8080 # 你应该能看到 Nginx 的欢迎页面。 # 5. 查看容器日志 docker logs my-nginx # 6. 进入容器内部就像 SSH 到一台服务器 docker exec -it my-nginx /bin/bash # 进入后你可以 ls, cat /etc/nginx/nginx.conf 等操作。 # 输入 exit 退出容器。 # 7. 停止和删除容器 docker stop my-nginx docker rm my-nginx # 8. 管理镜像 docker images # 列出本地所有镜像 docker pull ubuntu:20.04 # 拉取指定版本的镜像 docker rmi hello-world # 删除本地镜像需先删除依赖它的容器通过以上命令你已经完成了 Docker 的“拉取镜像 - 运行容器 - 交互管理 - 清理”的完整生命周期操作。这就是 Docker 最核心的日常使用。5. 手动搭建一个单节点 Kubernetes 集群理解了 Docker我们开始挑战 K8S。生产环境通常是多节点集群但对于学习和开发一个单节点集群All-in-One完全足够。我们将使用kubeadm这个官方工具来搭建。5.1 安装 kubeadm, kubelet 和 kubectl在k8s-master节点上执行# 1. 添加 Kubernetes 官方 GPG 密钥和仓库 sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg echo deb [signed-by/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main | sudo tee /etc/apt/sources.list.d/kubernetes.list # 2. 更新并安装三件套 sudo apt update sudo apt install -y kubelet kubeadm kubectl # kubelet: 运行在集群每个节点上的代理负责管理 Pod 和容器。 # kubeadm: 用于快速初始化集群、加入节点的工具。 # kubectl: 命令行工具用于与集群交互。 # 3. 锁定版本避免自动升级导致不兼容 sudo apt-mark hold kubelet kubeadm kubectl5.2 初始化 Kubernetes 控制平面这是最关键的一步。由于国内网络问题直接拉取 Google 的镜像会失败。我们需要使用阿里云的镜像仓库。# 1. 预先拉取所需的镜像使用阿里云镜像源 sudo kubeadm config images pull --image-repositoryregistry.aliyuncs.com/google_containers # 2. 初始化 Master 节点 # 注意将 apiserver-advertise-address 替换为你的虚拟机 IP如 192.168.56.10 # pod-network-cidr 是 Pod 网络的网段不能与宿主机网络冲突。 sudo kubeadm init \ --apiserver-advertise-address192.168.56.10 \ --image-repositoryregistry.aliyuncs.com/google_containers \ --kubernetes-versionv1.28.0 \ --service-cidr10.96.0.0/12 \ --pod-network-cidr10.244.0.0/16初始化过程需要几分钟。如果成功你会在最后看到类似下面的输出其中包含kubeadm join命令用于添加工作节点和配置kubectl的指令Your Kubernetes control-plane has initialized successfully! To start using your cluster, you need to run the following as a regular user: mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config Alternatively, if you are the root user, you can run: export KUBECONFIG/etc/kubernetes/admin.conf You should now deploy a pod network to the cluster. Run kubectl apply -f [podnetwork].yaml with one of the options listed at: https://kubernetes.io/docs/concepts/cluster-administration/addons/ Then you can join any number of worker nodes by running the following on each as root: kubeadm join 192.168.56.10:6443 --token xxxxxx.xxxxxxxxxxxx \ --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx务必保存好这段kubeadm join命令虽然我们搭建单节点集群用不到但理解其格式很重要。5.3 配置 kubectl 并安装网络插件按照上面成功输出的提示执行以下命令# 1. 配置 kubectl使用普通用户 mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config # 2. 验证集群状态 kubectl get nodes # 你会看到 master 节点状态是 NotReady因为网络插件还没装。 # 3. 安装 Pod 网络插件CNI # 我们选择最常用的 Flannel kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml # 等待片刻查看 Pod 状态直到 kube-flannel 相关的 Pod 都变成 Running kubectl get pods -n kube-system -w # 按 CtrlC 停止监视。看到 STATUS 为 Running 即可。 # 4. 再次查看节点状态现在应该是 Ready kubectl get nodes至此一个单节点的 Kubernetes 集群已经搭建完成这个节点既是控制平面Master也是工作节点Worker。对于学习来说这足够了。6. 第一个 Kubernetes 应用部署 Nginx现在让我们用 K8S 的方式来部署之前用 Docker 直接运行的 Nginx。6.1 通过命令行快速体验# 1. 使用 kubectl run 快速创建一个 Deployment不推荐在生产环境使用但适合快速测试 kubectl create deployment nginx-deployment --imagenginx:latest --replicas2 # 这会创建一个名为 nginx-deployment 的 Deployment使用 nginx 镜像并运行 2 个 Pod 副本。 # 2. 查看 Deployment 和 Pod kubectl get deployments kubectl get pods # 你应该能看到名为 nginx-deployment-xxxxx 的两个 Pod状态为 Running。 # 3. 创建一个 Service 来暴露这个 Deployment kubectl expose deployment nginx-deployment --typeNodePort --port80 # 这会创建一个 Service类型为 NodePort将集群内 80 端口映射到宿主机的一个随机端口30000-32767。 # 4. 查看 Service kubectl get services # 找到 nginx-deployment 服务你会看到 80:3xxxx/TCP 这样的输出其中 3xxxx 就是宿主机端口。 # 5. 访问应用 # 在宿主机浏览器访问http://虚拟机IP:NodePort # 例如http://192.168.56.10:300806.2 通过 YAML 文件声明式部署推荐方式命令行方式虽然快但无法版本化管理也无法清晰表达复杂状态。生产环境几乎全部使用 YAML 文件。创建文件nginx-deployment.yaml# nginx-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 3 # 指定 Pod 副本数为 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.25 # 指定一个具体的稳定版本而非 latest ports: - containerPort: 80 resources: requests: memory: 64Mi cpu: 250m limits: memory: 128Mi cpu: 500m --- apiVersion: v1 kind: Service metadata: name: nginx-service spec: type: NodePort selector: app: nginx # 这个选择器必须和上面 Deployment 中 Pod 的标签匹配 ports: - protocol: TCP port: 80 # Service 自身的端口 targetPort: 80 # 容器内端口 nodePort: 30080 # 手动指定宿主机端口可选范围 30000-32767应用这个配置文件# 1. 应用 YAML 文件创建资源 kubectl apply -f nginx-deployment.yaml # 输出deployment.apps/nginx-deployment created # service/nginx-service created # 2. 查看创建的资源 kubectl get deployments,svc,pods # 你会看到 Deployment, Service 和 3 个 Pod 的状态。 # 3. 访问应用使用我们指定的 30080 端口 # 浏览器访问http://虚拟机IP:30080为什么推荐 YAML 文件版本控制YAML 文件可以放入 Git记录每次变更。清晰声明所有配置一目了然便于团队协作和审查。幂等性kubectl apply可以重复执行。如果文件没变集群状态也不会变如果文件变了K8S 会自动计算差异并滚动更新到新状态。7. 深入实战从代码到容器再到 K8S 的完整流水线让我们模拟一个真实的微服务场景将一个简单的 Python Web 应用容器化并部署到 K8S 集群。7.1 编写一个简单的 Python Web 应用在宿主机或虚拟机上创建一个项目目录mkdir my-python-app cd my-python-app创建应用文件app.py# app.py from flask import Flask import os import socket app Flask(__name__) app.route(/) def hello(): hostname socket.gethostname() return fHello from Kubernetes! Container Hostname: {hostname}\n app.route(/health) def health(): return OK, 200 if __name__ __main__: app.run(host0.0.0.0, port5000)创建依赖文件requirements.txtFlask2.3.37.2 编写 Dockerfile 构建镜像创建Dockerfile# Dockerfile # 使用官方 Python 轻量级镜像 FROM python:3.11-slim # 设置工作目录 WORKDIR /app # 复制依赖文件 COPY requirements.txt . # 安装依赖 RUN pip install --no-cache-dir -r requirements.txt # 复制应用代码 COPY . . # 声明容器运行时监听的端口 EXPOSE 5000 # 定义容器启动命令 CMD [python, app.py]构建 Docker 镜像并推送到镜像仓库这里以 Docker Hub 为例需先注册# 1. 构建镜像注意最后有个点 docker build -t your-dockerhub-username/my-python-app:v1 . # 2. 登录 Docker Hub首次需要 docker login # 3. 推送镜像到仓库 docker push your-dockerhub-username/my-python-app:v1注意如果你没有 Docker Hub 账号或不想推送可以跳过第2、3步后续 K8S YAML 中直接使用本地构建的镜像名但需要配置 K8S 能访问本地镜像较复杂。为了模拟真实流程建议完成推送。7.3 编写 K8S 部署文件创建k8s-deployment.yaml# k8s-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: python-app-deployment spec: replicas: 2 selector: matchLabels: app: python-app template: metadata: labels: app: python-app spec: containers: - name: python-app image: your-dockerhub-username/my-python-app:v1 # 替换为你的镜像名 ports: - containerPort: 5000 resources: requests: memory: 128Mi cpu: 100m limits: memory: 256Mi cpu: 200m livenessProbe: # 存活探针检查应用是否健康 httpGet: path: /health port: 5000 initialDelaySeconds: 30 periodSeconds: 10 readinessProbe: # 就绪探针检查应用是否准备好接收流量 httpGet: path: / port: 5000 initialDelaySeconds: 5 periodSeconds: 5 --- apiVersion: v1 kind: Service metadata: name: python-app-service spec: type: NodePort selector: app: python-app ports: - protocol: TCP port: 80 targetPort: 5000 nodePort: 300817.4 部署到 Kubernetes 集群# 1. 应用部署文件 kubectl apply -f k8s-deployment.yaml # 2. 查看部署状态 kubectl get deployments,pods,svc # 3. 查看 Pod 的详细信息和日志用于排错 kubectl describe pod pod-name kubectl logs pod-name # 4. 访问应用 # 浏览器访问http://虚拟机IP:30081 # 多次刷新由于 Service 的负载均衡你可能会看到来自不同 Pod不同 hostname的响应。至此你完成了一个从编写代码 - 编写 Dockerfile - 构建镜像 - 推送镜像 - 编写 K8S YAML - 部署到集群的完整 DevOps 流水线。这就是现代云原生应用的标准交付流程。8. 常见问题与排查思路避坑指南学习过程中90%的时间可能都在解决问题。这里列出高频问题及其排查思路。问题现象可能原因排查方式解决方案docker run报错Cannot connect to the Docker daemonDocker 服务未启动或当前用户无权限。systemctl status docker查看服务状态。groups查看当前用户组。启动服务sudo systemctl start docker。将用户加入 docker 组后重新登录。kubeadm init卡在pull image或报错ImagePullBackOff无法从国外镜像仓库拉取镜像。kubeadm config images list查看所需镜像。kubectl describe pod pod-name查看 Pod 事件。使用国内镜像源初始化如--image-repositoryregistry.aliyuncs.com/google_containers。对于已存在的 Pod可手动拉取镜像到本地。kubectl get nodes显示NotReady网络插件CNI未安装或安装失败。kubectl get pods -n kube-system查看kube-flannel等网络插件 Pod 状态。确保已安装 Flannel 等 CNI 插件。检查 Pod 日志kubectl logs -n kube-system flannel-pod-name。Pod 状态一直是Pending节点资源不足CPU/内存或没有满足调度条件的节点。kubectl describe pod pod-name查看Events部分。检查节点资源kubectl describe node。调整 Pod 的资源请求requests或增加节点资源。Pod 状态是CrashLoopBackOff容器内的应用启动失败。kubectl logs pod-name查看应用日志。kubectl describe pod pod-name查看详情。根据日志修复应用代码或 Dockerfile 中的启动命令。检查环境变量、配置文件、端口绑定等。Service 的 NodePort 无法访问防火墙未放行端口、NodePort 范围不对、或 Pod 选择器selector与 Pod 标签不匹配。kubectl get svc确认端口映射。kubectl get pods --show-labels确认 Pod 标签。在节点上curl localhost:nodePort测试。检查虚拟机/云主机防火墙规则。确保 Service 的selector与 Pod 的labels完全匹配。执行kubectl命令报错The connection to the server was refusedkubectl配置不正确或 API Server 未运行。cat $HOME/.kube/config检查配置。systemctl status kube-apiserver检查服务。确保已正确执行kubeadm init后的配置命令。检查 Master 节点组件状态kubectl get componentstatuses。通用排查命令链kubectl get 资源类型查看资源状态第一层。kubectl describe 资源类型 资源名查看详细信息和事件第二层。kubectl logs pod-name查看容器标准输出日志第三层。kubectl exec -it pod-name -- /bin/sh进入容器内部检查终极手段。9. 生产环境最佳实践与学习建议当你掌握了基础操作后要向生产环境迈进必须关注以下方面9.1 镜像与仓库不要使用latest标签始终使用明确的版本标签如v1.2.3确保部署的可追溯性和可回滚性。使用私有镜像仓库生产环境务必搭建或使用企业私有的镜像仓库如 Harbor, Nexus避免依赖公网并实现安全扫描和权限控制。优化 Dockerfile使用多阶段构建减小镜像体积合理安排指令顺序利用缓存加速构建以非 root 用户运行容器。9.2 Kubernetes 配置与管理资源请求与限制务必为每个容器设置resources.requests和resources.limitsCPU/内存这是集群调度和稳定的基石。健康检查配置livenessProbe和readinessProbe让 K8S 能自动处理不健康的 Pod。使用 ConfigMap 和 Secret将配置信息和敏感数据如密码、密钥从应用代码中分离通过 ConfigMap 和 Secret 管理并通过环境变量或卷挂载到 Pod。命名空间使用命名空间Namespace来隔离不同环境如 dev, staging, prod或不同团队的应用。Ingress 代替大量 NodePort对外暴露多个服务时使用 Ingress 控制器如 Nginx Ingress统一管理入口比创建一堆 NodePort Service 更优雅、安全。9.3 安全与运维最小权限原则为 ServiceAccount 分配最小必要的 RBAC 权限。网络策略使用 NetworkPolicy 控制 Pod 之间的网络流量实现微服务间的网络隔离。日志与监控集成 EFKElasticsearch, Fluentd, Kibana或 Loki 栈进行日志收集使用 Prometheus Grafana 进行集群和应用监控。备份与恢复定期备份 etcd 数据存储集群所有状态和重要的 Kubernetes 资源定义YAML 文件。9.4 后续学习方向深入 K8S 核心概念StatefulSet有状态应用、DaemonSet每个节点运行一个 Pod、Job/CronJob批处理任务、PersistentVolume持久化存储。学习 HelmK8S 的包管理工具用于简化复杂应用的部署和管理。了解 Operator 模式用于封装、部署和管理复杂有状态应用的高级模式。实践 CI/CD将本文的流程自动化结合 Jenkins、GitLab CI 或 GitHub Actions实现代码提交后自动构建镜像、扫描、部署到 K8S。学习云厂商的 K8S 服务如 AWS EKS、Azure AKS、Google GKE、阿里云 ACK了解托管服务如何降低运维复杂度。学习 Docker 和 Kubernetes 是一个螺旋上升的过程。从“能用”到“用好”需要大量的实践和踩坑。建议你在本地或云上搭建一个多节点的集群尝试部署一个稍微复杂的微服务应用例如包含前端、后端、数据库在实践中遇到问题、解决问题这才是最有效的学习路径。这篇文章为你铺好了从零到一的第一块砖。剩下的路需要你带着好奇心和动手能力去探索。建议你将本文中的命令和 YAML 文件保存下来作为你未来学习和工作的速查手册。 30款热门AI模型一站整合DeepSeek/GLM/Qwen 随心用限时 5 折。 点击领海量免费额度