Kubernetes(K8s)容器化部署 Kubernetes简称K8s是一个生产级别的开源容器编排平台由Google基于其在容器集群方面的经验设计而成。它能够帮助你确保容器化应用在你想要的时间和地点运行实现应用的自动化部署、弹性伸缩与高可用。本文将从零开始带你完成从环境搭建到应用部署的全流程。第一部分Kubernetes 核心概念在动手实践之前理解Kubernetes的几个核心概念至关重要。一、Pod —— 最小部署单元Pod是Kubernetes中最小的、可部署的计算单元。它可以包含一个或多个紧密关联的容器如业务容器 日志收集容器这些容器共享同一个网络命名空间IP地址、端口和存储卷始终被调度到同一节点上运行。Pod是Kubernetes资源分配的最小单位。二、Deployment —— 应用生命周期管理器Deployment负责创建和更新应用的实例。它通过ReplicaSet控制Pod的副本数量支持滚动更新、版本回滚等策略。创建Deployment后Kubernetes控制平面会将应用实例调度到集群中的各个节点上。如果托管实例的节点关闭或被删除Deployment控制器会自动将其替换到另一个节点上提供自我修复能力。三、Service —— 稳定的访问入口Service是Kubernetes中用于暴露Pod网络访问的抽象组件。由于Pod的IP是临时的Pod重建后IP会变更Service为这组Pod提供一个稳定的虚拟IP和DNS名称。当多个Pod关联到同一个Service时Service会自动进行负载均衡。Service的三种主要类型ClusterIP默认仅在集群内部暴露服务NodePort在每个节点上开放固定端口外部可通过节点IP:NodePort访问LoadBalancer结合云厂商的负载均衡器对外暴露服务四、Ingress —— 七层路由网关Ingress是Kubernetes的API对象用于定义外部访问集群服务的七层HTTP/HTTPS路由规则。它不同于Service仅提供四层负载均衡而是通过Ingress控制器如Nginx Ingress、Traefik实现基于域名或路径的路由、SSL卸载等功能。第二部分环境搭建一、前置准备部署Kubernetes需要以下环境项目要求操作系统Linux建议CentOS 7.6 / Ubuntu 18.04或 macOS硬件配置至少4核8G内存建议容器运行时Docker CE 19.03 或 containerdK8s工具链kubeadm、kubectl、kubelet版本1.24基础知识熟悉容器化概念、YAML语法、基础Linux命令二、开发环境使用 Minikube 搭建本地集群Minikube是学习Kubernetes最便捷的方式可在本地快速启动单节点集群。1. 安装 Minikube以Linux为例curl-LOhttps://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64sudoinstallminikube-linux-amd64 /usr/local/bin/minikube2. 启动集群minikube start--driverdocker--cpus4--memory81923. 安装 kubectlKubernetes命令行客户端# 以Linux为例curl-LOhttps://dl.k8s.io/release/$(curl-L-shttps://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectlsudoinstall-oroot-groot-m0755 kubectl /usr/local/bin/kubectl4. 验证集群状态kubectl get nodes-owide kubectl version# 查看客户端和服务器版本三、生产环境使用 kubeadm 搭建多节点集群生产环境推荐使用kubeadm搭建多节点集群。1. 集群初始化在控制平面节点执行sudokubeadm init --pod-network-cidr10.244.0.0/16 --kubernetes-versionv1.24.0# 配置kubectlmkdir-p$HOME/.kubesudocp-i/etc/kubernetes/admin.conf$HOME/.kube/configsudochown$(id-u):$(id-g)$HOME/.kube/config2. 添加工作节点在每个工作节点执行kubeadmjoin控制平面IP:端口--tokentoken--discovery-token-ca-cert-hash sha256:hash提示Token有效期为24小时超时需通过kubeadm token create重新生成。3. 部署CNI网络插件如Calicokubectl apply-fhttps://raw.githubusercontent.com/projectcalico/calico/v3.24.5/manifests/calico.yaml第三部分部署第一个应用一、通过命令行直接部署最简单的入门方式使用kubectl create deployment命令# 创建一个nginx deployment副本数为3kubectl create deployment nginx--imagenginx:latest--replicas3二、通过 YAML 文件部署推荐YAML文件是Kubernetes的标准配置方式便于版本控制和重复使用。1. 创建 Deployment 配置文件nginx-deployment.yamlapiVersion:apps/v1kind:Deploymentmetadata:name:nginx-demolabels:app:webspec:replicas:3# 副本数量selector:matchLabels:app:web# 必须与Pod模板中的标签匹配template:metadata:labels:app:webspec:containers:-name:nginximage:nginx:1.25ports:-containerPort:80resources:# 资源限制防止资源争抢requests:cpu:100mmemory:128Milimits:cpu:500mmemory:512Mi2. 部署应用kubectl apply-fnginx-deployment.yaml3. 验证部署状态kubectl get deployments# 查看Deployment状态kubectl get pods-lappweb# 查看Pod状态-l表示按标签筛选kubectl describe deployment nginx-demo# 查看详细信息第四部分暴露服务 —— 让应用可访问一、创建 Service配置文件nginx-service.yamlapiVersion:v1kind:Servicemetadata:name:nginx-servicespec:selector:app:web# 关联标签为 app:web 的Podports:-protocol:TCPport:80# Service的端口targetPort:80# 容器内部的端口type:LoadBalancer# 服务类型部署Servicekubectl apply-fnginx-service.yaml查看Service信息kubectl get svc在Minikube环境中可通过以下命令获取访问URLminikubeservicenginx-service二、使用 Ingress 实现七层路由进阶对于生产环境通常使用Ingress实现基于域名的路由。1. 安装 Nginx Ingress 控制器kubectl apply-fhttps://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.1/deploy/static/provider/cloud/deploy.yaml2. 创建 Ingress 配置ingress.yamlapiVersion:networking.k8s.io/v1kind:Ingressmetadata:name:http-ingressspec:rules:-host:example.comhttp:paths:-path:/apipathType:Prefixbackend:service:name:api-serviceport:number:80-path:/webpathType:Prefixbackend:service:name:web-serviceport:number:80tls:# HTTPS配置可选-hosts:-example.comsecretName:tls-secret3. 部署 Ingresskubectl apply-fingress.yaml第五部分持久化存储容器是无状态的当Pod被重建时容器内的数据会丢失。对于数据库等有状态应用需要持久化存储。Kubernetes通过PersistentVolumePV和PersistentVolumeClaimPVC实现存储管理PV集群中的存储资源由管理员事先制备或通过StorageClass动态制备PVC用户对存储的请求指定大小和访问模式创建 PVC 示例apiVersion:v1kind:PersistentVolumeClaimmetadata:name:my-pvcspec:accessModes:-ReadWriteOnce# 访问模式单节点读写storageClassName:mysc# 存储类用于动态制备resources:requests:storage:100Gi# 请求的存储大小创建PVCkubectl apply-fpvc.yaml kubectl get pvc# 查看PVC状态Bound表示已绑定在Pod中挂载PVCspec:containers:-name:appimage:myappvolumeMounts:-mountPath:/dataname:storagevolumes:-name:storagepersistentVolumeClaim:claimName:my-pvc第六部分配置管理 —— ConfigMap 与 Secret一、ConfigMap —— 非敏感配置apiVersion:v1kind:ConfigMapmetadata:name:app-configdata:app.properties:|database.urljdbc:mysql://localhost:3306/mydb log.levelINFO二、Secret —— 敏感信息密码、证书等apiVersion:v1kind:Secretmetadata:name:db-secrettype:Opaquedata:username:YWRtaW4# base64编码后的值password:cGFzc3dvcmQ第七部分更新与回滚一、滚动更新Kubernetes支持滚动更新实现零停机部署。方式一修改YAML文件后重新apply# 修改nginx-deployment.yaml中的镜像版本为 nginx:1.26kubectl apply-fnginx-deployment.yaml方式二直接使用命令kubectlsetimage deployment/nginx-demonginxnginx:1.26二、查看更新状态与回滚kubectl rollout status deployment/nginx-demo# 查看更新状态kubectl rollouthistorydeployment/nginx-demo# 查看历史版本kubectl rollout undo deployment/nginx-demo# 回滚到上一版本kubectl rollout undo deployment/nginx-demo --to-revision2# 回滚到指定版本第八部分扩缩容一、手动扩缩容kubectl scale deployment/nginx-demo--replicas5# 扩容到5个副本kubectl get pods-lappweb# 验证副本数二、自动扩缩容HPAHorizontalPodAutoscaler可根据CPU利用率自动调整副本数kubectl autoscale deployment/nginx-demo --cpu-percent50--min2--max10第九部分进阶工具 —— HelmHelm是Kubernetes的包管理工具类似于Linux的yum/apt。它将应用及其依赖打包为Chart实现了应用部署的标准化和自动化。安装与使用# 安装Helmcurlhttps://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3|bash# 添加仓库helm repoaddstable https://charts.helm.sh/stable helm repo update# 安装应用helminstallmy-nginx stable/nginx-ingress# 升级应用helm upgrade my-nginx stable/nginx-ingress--setcontroller.replicaCount3第十部分CI/CD 自动化部署将Kubernetes与CI/CD工具集成可实现从代码提交到生产环境部署的全自动化。常用CI/CD工具与Kubernetes的集成方式工具集成方式GitHub Actions在workflow中执行kubectl apply或helm upgradeGitLab CI/CD通过.gitlab-ci.yml配置执行kubectl/helm命令Jenkins部署Jenkins到K8s集群通过Pipeline执行部署Argo CDGitOps方式自动同步Git仓库中的配置到集群典型CI/CD流水线示例GitHub Actionsname:Deploy to Kuberneteson:push:branches:[main]jobs:deploy:runs-on:ubuntu-lateststeps:-uses:actions/checkoutv3-name:Build and push imagerun:|docker build -t myapp:${{ github.sha }} . docker push myapp:${{ github.sha }}-name:Deploy to K8srun:|kubectl set image deployment/myapp appmyapp:${{ github.sha }} kubectl rollout status deployment/myapp第十一部分常用命令速查命令说明kubectl get nodes查看集群节点kubectl get pods查看所有Podkubectl get pods -l appweb按标签筛选Podkubectl get deployments查看所有Deploymentkubectl get svc查看所有Servicekubectl get ingress查看所有Ingresskubectl describe pod 名称查看Pod详细信息kubectl logs Pod名称查看Pod日志kubectl exec -it Pod名称 -- /bin/bash进入Pod容器kubectl apply -f 文件创建/更新资源kubectl delete -f 文件删除资源kubectl scale deployment/名称 --replicasN扩缩容kubectl rollout status deployment/名称查看滚动更新状态第十二部分常见问题与排查1. Pod一直处于Pending状态原因集群资源不足或节点未就绪排查kubectl describe pod 名称查看事件信息2. Pod一直处于ImagePullBackOff原因镜像不存在、镜像仓库认证失败或网络问题排查检查镜像名称是否正确配置ImagePullSecrets3. Service无法访问原因标签选择器不匹配、端口配置错误排查kubectl describe svc 名称查看Endpoints是否包含Pod IP4. PVC处于Pending状态原因没有匹配的PV或StorageClass排查kubectl get pv查看可用PV检查StorageClass配置总结Kubernetes作为容器编排的事实标准为容器化应用提供了从部署、扩缩容到自愈的完整解决方案。本文从核心概念出发逐步讲解了环境搭建、应用部署、服务暴露、存储管理、配置管理、更新回滚以及CI/CD集成等全流程操作。在实际生产环境中建议开发测试使用Minikube或Kind快速验证生产环境使用云厂商托管K8s服务或kubeadm搭建高可用集群复杂应用使用Helm进行标准化部署管理自动化运维结合CI/CD工具实现GitOps流水线掌握Kubernetes容器化部署是迈向云原生架构的关键一步。

相关新闻

最新新闻

中国股市:小资金炒股赚100万难吗?此文很短很深,值得反复阅读!

中国股市:小资金炒股赚100万难吗?此文很短很深,值得反复阅读!

一、七大实战技巧,层层识别真强势股 技巧一:看均线,多头发散定趋势基础均线是趋势最直观的体现,也是判断强弱的第一道门槛。真正的强势股,必须满足:5日、10日、20日均线全部朝上,多头有序发散&…

2026/8/30 23:24:18
GitHub Actions中actions/checkout完全指南:从CI基础到高效排错

GitHub Actions中actions/checkout完全指南:从CI基础到高效排错

在 GitHub Actions 的日常使用中,actions/checkout是出现频率最高的一个 action。几乎任何编译、测试、部署类工作流,第一步都是它。但很多人在刚开始接触时会分不清:它和本地执行的git checkout命令是什么关系?版本该怎么选&…

2026/8/30 23:24:18
HITL 人工介入的并发难题:两个人同时审批一张证书怎么办

HITL 人工介入的并发难题:两个人同时审批一张证书怎么办

HITL 人工介入的并发难题:两个人同时审批一张证书怎么办 这是 LangGraph 生产化系列的第二篇。上一篇讲了混合检索、Supervisor 熔断和缓存三防,这篇讲一个更隐蔽的领域:人工介入(HITL)的状态管理。 完整开源&#xff…

2026/8/30 23:24:18
英伟达利润暴涨背后:AI算力基础设施化与开发者新机遇

英伟达利润暴涨背后:AI算力基础设施化与开发者新机遇

英伟达发布 2027 财年半年报:归母净利润 1180.1 亿美元,同比增长 161.1%。这个数字对普通人来说是一个财经新闻,但对我这个常年写代码、研究 AI 基础设施落地的人来说,它更像一个强烈的工程信号:GPU 算力正从“少数实验…

2026/8/30 23:24:18
AI辅助Three.js实战:从零搭建可交互的3D人体查看器

AI辅助Three.js实战:从零搭建可交互的3D人体查看器

看到“160万人围观”这种消息,很多人的第一反应是:这又是什么酷炫的科技新闻?但当我把这个项目拆开看,发现它其实特别适合当作一个“AI辅助3D开发”的完整入门案例。用AI生成或处理3D模型的素材,再用Three.js这类Web技…

2026/8/30 23:24:18
Python零基础入门:一条清晰的学习路径与实战避坑指南

Python零基础入门:一条清晰的学习路径与实战避坑指南

很多人在学 Python 时都会陷入同一个困境:网盘里存了几百集视频教程,B 站收藏夹里躺着十几个“全套教程”,但三个月后还是只会 print("Hello World")。这其实不是学习能力的问题,而是学习路径出了问题。Python 零基础入…

2026/8/30 23:19:16