🎬 HoRain 云小助手个人主页

⛺️生活的理想,就是为了理想的生活!


⛳️ 推荐

前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。

目录

⛳️ 推荐

🔧 部署一个Pod的详细步骤

步骤 1: 编写 Pod 的 YAML 配置文件

步骤 2: 使用 kubectl 部署 Pod

步骤 3: 验证 Pod 状态

🔍 Pod 的创建流程揭秘

💡 实用建议与进阶提示


Kubernetes(简称K8s)是一个开源的​​容器编排平台​​,它源自Google在生产环境中运行大规模容器化应用的经验,现由云原生计算基金会(CNCF)维护。它的核心目标是自动化容器化应用的部署、扩展、管理和运维,让你能轻松管理成百上千的容器,就像为容器集群安装了一个高度智能的“操作系统”。

为了让你快速建立整体印象,下表汇总了Kubernetes的一些核心特性和价值:

​特性分类​

​核心价值​

​关键能力​

​自动化运维​

告别手动管理

自动部署、自我修复(自动重启失败容器)、水平扩缩容(根据负载自动调整容器数量)

​服务治理​

简化应用访问与稳定性

服务发现(自动找到服务)、负载均衡(将流量合理分发到多个容器实例)、滚动更新与回滚(无缝发布新版本,出错快速回退)

​资源与配置​

灵活调度与安全管理

存储编排(自动挂载存储系统)、密钥与配置管理(安全地管理敏感信息和应用配置)

🔧 部署一个Pod的详细步骤

Pod是Kubernetes中最小的可部署和管理单元,可以理解为一个或多个紧密相关的容器所组成的“逻辑主机”。以下是部署一个Pod的具体流程。

步骤 1: 编写 Pod 的 YAML 配置文件

首先,你需要创建一个YAML文件(例如 my-pod.yaml)来描述你想要的Pod状态。这是一种“声明式”的做法,你只需告诉K8s你期望的结果,它就会尽力去实现和维护这个状态。

apiVersion: v1  # 指定使用的Kubernetes API版本,Pod属于核心v1版本
kind: Pod       # 定义资源类型为Pod
metadata:
  name: my-nginx-pod  # 为Pod命名
  labels:        # 为Pod打上标签,便于后续识别和管理
    app: nginx
    environment: test
spec:  # 这是Pod规格的核心部分,描述了容器的具体定义
  containers:  # 定义Pod内运行的容器列表
  - name: nginx-container  # 容器名称
    image: nginx:latest    # 使用的容器镜像
    ports:
    - containerPort: 80    # 容器内应用监听的端口
    resources:
      requests:  # 容器运行所需的最小资源
        memory: "128Mi"
        cpu: "100m"
      limits:    # 容器所能使用的最大资源上限
        memory: "256Mi"
        cpu: "200m"
步骤 2: 使用 kubectl 部署 Pod

保存YAML文件后,通过 kubectl命令行工具将其提交给Kubernetes集群。

kubectl apply -f my-pod.yaml

这个命令会与API Server交互,API Server会验证请求的合法性,并将Pod的元数据信息存入etcd键值数据库。

步骤 3: 验证 Pod 状态

部署完成后,可以使用以下命令检查Pod的状态:

kubectl get pods

如果看到Pod状态显示为 Running,通常表示它已成功启动。你还可以使用 kubectl describe pod my-nginx-pod来查看更详细的事件信息,这在出现问题时非常有用。

🔍 Pod 的创建流程揭秘

当你执行 kubectl apply后,Kubernetes集群内部发生了一系列精妙的协作,其核心流程如下图所示:

flowchart TD
    A[用户执行<br>kubectl apply -f pod.yaml] --> B(kube-apiserver)
    B --> C[验证配置 & 存入etcd]
    C --> D(kube-scheduler)
    D --> E{监听etcd中新Pod}
    E --> F[筛选评分选择最佳Node]
    F --> G[更新Pod绑定信息至etcd]
    G --> H(kubelet on Target Node)
    H --> I[监听API Server]
    I --> J[调用容器运行时<br>如Docker/Containerd]
    J --> K[创建容器]
    K --> L[调用网络插件<br>如Calico/Flannel]
    L --> M[为Pod分配IP地址]
    M --> N[kubelet上报Pod状态<br>至API Server/etcd]
    N --> O[Pod状态变为Running]

这个流程体现了Kubernetes集群核心组件的分工协作:

  • ​kube-apiserver​​:作为集群的网关,是所有请求的唯一入口。

  • ​etcd​​:作为集群的“大脑”,持久化存储所有集群数据。

  • ​kube-scheduler​​:作为调度中心,负责为Pod选择合适的节点(Node)。

  • ​kubelet​​:作为节点代理,负责维护Pod的生命周期,确保容器按照预期运行。

  • ​容器运行时​​(如Docker、containerd):负责镜像管理和容器的真正运行。

  • ​CNI网络插件​​:负责为Pod提供网络连通性。

💡 实用建议与进阶提示

  1. ​直接使用Deployment​​:在实际生产中,我们很少直接创建独立的Pod。因为如果Pod所在的节点故障,这个Pod不会自动恢复。推荐使用 ​​Deployment​​ 这样的高阶控制器来管理Pod。Deployment能确保指定数量的Pod副本持续运行,并方便地进行滚动更新和回滚,是实现无中断应用发布的关键。

  2. ​标签的妙用​​:在配置文件中定义的 labels非常强大。你可以通过 kubectl get pods -l app=nginx这样的命令来筛选查看特定Pod。更重要的是,当需要将一组Pod作为一个服务对外暴露时,​​Service​​ 资源正是通过标签选择器(Selector)来找到它要管理的Pod的。

希望这份详细的解释能帮助你清晰地理解Kubernetes以及如何部署一个Pod。如果你对Deployment或Service的用法感兴趣,我很乐意继续为你讲解。

❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

更多推荐