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

开始第一个Pod与Deployment

假设你是一名指挥官,Pod 就像你的单兵战士,而 Deployment 则是管理整支军队的智能系统。
单个士兵(Pod)可以完成任务,但无法应对大规模战争——比如士兵受伤如何替补?如何快速扩充兵力?
通过本文,我们将学会如何用 Kubernetes 的 PodDeployment 管理容器化应用,实现自动化部署与自愈。


一、Pod:最小的作战单元

1.1 什么是Pod?

  • Pod 是 Kubernetes 的最小调度单位,pod 翻译是"豆荚",功能也像一个豆荚一样,封装 1个或多个容器
  • 同一个 Pod 中的容器共享网络和存储,适合紧密协作的场景。
    在这里插入图片描述

1.2 创建第一个Pod

步骤1:编写YAML文件

创建一个名为 nginx-pod.yaml 的文件:

apiVersion: v1
kind: Pod                   # 资源类型为Pod
metadata:
  name: my-nginx-pod        # Pod名称
  labels:
    app: nginx              # 标签(用于后续选择)
spec:
  containers:
  - name: nginx-container   # 容器名称
    image: nginx:latest      # 使用的镜像
    ports:
    - containerPort: 80      # 容器暴露的端口
步骤2:启动Pod
kubectl apply -f nginx-pod.yaml
步骤3:验证状态
kubectl get pods

输出示例:

NAME           READY   STATUS    RESTARTS   AGE
my-nginx-pod   1/1     Running   0          10s

1.3 与Pod互动

查看Pod日志
kubectl logs my-nginx-pod
进入Pod内部(调试用)
kubectl exec -it my-nginx-pod -- /bin/bash
# 在容器内执行命令(如:curl localhost)
删除Pod
kubectl delete pod my-nginx-pod

二、Deployment:管理Pod的智能军团

2.1 为什么需要Deployment?

直接管理Pod的问题:

  • 手动扩缩容:需要逐个创建/删除Pod。
  • 无法自愈:Pod崩溃后不会自动重启。
  • 更新麻烦:需手动替换旧版本Pod,易出错。

Deployment 的价值

  • 自动维护Pod副本数(如保持3个运行实例)。
  • 支持滚动更新与回滚。
  • 提供声明式配置(描述“期望状态”)。

2.2 创建第一个Deployment

步骤1:编写YAML文件

创建 nginx-deployment.yaml

apiVersion: apps/v1
kind: Deployment              # 资源类型为Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3                 # 维持3个Pod副本
  selector:
    matchLabels:
      app: nginx
  template:                   # Pod模板(类似1.2中的Pod配置)
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx-container
        image: nginx:1.25      # 指定镜像版本
        ports:
        - containerPort: 80
步骤2:启动Deployment
kubectl apply -f nginx-deployment.yaml
步骤3:查看Deployment与Pod状态
kubectl get deployments
kubectl get pods

输出示例:

NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   3/3     3            3           15s

NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-5d559c4788-2j6wk   1/1     Running   0          20s
nginx-deployment-5d559c4788-kx9qm   1/1     Running   0          20s
nginx-deployment-5d559c4788-wl7pv   1/1     Running   0          20s

2.3 实现滚动更新

更新镜像版本
kubectl set image deployment/nginx-deployment nginx=nginx:1.26

或修改YAML文件的 image 字段后重新应用:

kubectl apply -f nginx-deployment.yaml
观察更新过程
kubectl rollout status deployment/nginx-deployment

输出示例:

Waiting for rollout to finish: 1 out of 3 new replicas have been updated...
Waiting for rollout to finish: 2 out of 3 new replicas have been updated...
deployment "nginx-deployment" successfully rolled out

2.4 回滚到旧版本

如果新版本有问题,快速回滚:

kubectl rollout undo deployment/nginx-deployment
查看历史版本
kubectl rollout history deployment/nginx-deployment

三、常见问题与解决

  1. Pod一直处于Pending状态

    • 原因:资源不足(如CPU/内存不够)或节点调度失败。
    • 检查命令:
      kubectl describe pod <pod-name>
      
  2. Pod崩溃重启(CrashLoopBackOff)

    • 原因:容器启动失败(如应用崩溃、配置错误)。
    • 查看日志:
      kubectl logs <pod-name>
      
  3. Deployment无法更新

    • 检查镜像名称是否正确,或是否存在网络拉取问题。

四、动手实验

  1. 扩展副本数

    kubectl scale deployment nginx-deployment --replicas=5
    kubectl get pods
    
  2. 模拟Pod故障
    手动删除一个Pod,观察Deployment是否自动重建:

    kubectl delete pod <pod-name>
    kubectl get pods -w  # 实时观察状态变化
    

五、总结与下一步

通过本文,我们学会了:

  • 用Pod运行单个容器化应用。
  • 用Deployment管理多副本应用,实现滚动更新与自愈。

资源推荐

  • Kubernetes Pod官方文档
  • Deployment滚动更新策略

人只要有一种向上的精神,朝着自己的目标一步步努力,成功的机会就会越来越大。

相关文章:

  • Transformer多头注意力并行计算原理与工业级实现:从数学推导到PyTorch工程优化
  • C++上机_日期差值
  • C++17 中 std::size、std::empty 和 std::data 非成员函数介绍
  • VSCode 接入DeepSeek V3大模型,附使用说明
  • 【golang】channel带缓存和不带缓存的区别,应用场景解读
  • Spring MVC多语言支持揭秘:让你的应用走向世界
  • 轻量级分组加密算法RECTANGLE
  • 网络工程师 (41)IP协议、IP地址表示方法
  • 大语言模型中one-hot编码和embedding之间的区别?
  • 使用maven-archetype制作项目脚手架
  • 使用 Go 语言调用 DeepSeek API:完整指南
  • C# 控制台相关 API 与随机数API
  • PyQt学习记录03——批量设置水印
  • 递归的示例
  • 在conda环境下,安装Pytorch和CUDA
  • C++上机_日期问题
  • Python 自然语言处理(NLP)和文本挖掘的常规操作过程
  • 【SpringBoot3】面向切面 AspectJ AOP 使用详解
  • 企业如何搭建高效内容中台?
  • Java(api中常用类,包括Object类,Arrays类,String类,基本数据类型包装类)
  • 华东政法与复旦上医签署合作框架协议,医学与法学如何交叉融合?
  • 俄谈判代表团已抵达土耳其,谈判预计在莫斯科时间10时左右开始
  • 德国总理默茨发表首份政府声明:将提升国防能力,全力发展经济
  • 爱德华多·阿拉纳宣誓就任秘鲁新总理
  • 订婚不等于性同意!山西订婚强奸案入选最高法案例
  • 市场监管总局召开平台企业支持个体工商户发展座谈会