RedCloud Help

1. K8s最小调度单元Pod

#1. K8s最小调度单元Pod

1.k8s 核心资源 Pod 介绍?

K8s 官方文档: https://kubernetes.io/ K8s 中文官方文档: https://kubernetes.io/zh/ K8s Github 地址: https://github.com/kubernetes/kubernetes

1.1 Pod 是什么?

官方文档: https://kubernetes.io/docs/concepts/workloads/pods/ Pod 是 Kubernetes 中的最小调度单元,k8s 是通过定义一个 Pod 的资源,然后在 Pod 里面运行容 器,容器需要指定一个镜像,这样就可以用来运行具体的服务。一个 Pod 封装一个容器(也可以封装多 个容器),Pod 里的容器共享存储、网络等。也就是说,应该把整个 pod 看作虚拟机,然后每个容器相当 于运行在虚拟机的进程。

image_17.png

Pod 是需要调度到 k8s 集群的工作节点来运行的,具体调度到哪个节点,是根据 scheduler 调度器实 现的。 白话解释: 可以把 pod 看成是一个“豌豆荚”,里面有很多“豆子”(容器)。一个豌豆荚里的豆子,它们吸收着共同的营养成分、肥料、水分等,Pod 和容器的关系也是一样,Pod 里面的容器共享 pod 的网络、存储等。

image_18.png

pod 相当于一个逻辑主机--比方说我们想要部署一个 tomcat 应用,如果不用容器,我们可能会部署 到物理机、虚拟机或者云主机上,那么出现 k8s 之后,我们就可以定义一个 pod 资源,在 pod 里定义一 个把 tomcat 容器,所以 pod 充当的是一个逻辑主机的角色。 1.2 Pod 工作方式 在 K8s 中,所有的资源都可以使用一个 yaml 文件来创建,创建 Pod 也可以使用 yaml 配置文件。或 者使用 kubectl run 在命令行创建 Pod(不常用)。 1.2.1 自主式 Pod 所谓的自主式 Pod,就是直接定义一个 Pod 资源,如下:

[ root@redcloud001 ~]# vim pod-tomcat.yaml
apiVersion: v1 kind: Pod metadata: name: tomcat-test namespace: default labels: app: tomcat spec: containers: - name: tomcat-java ports: - containerPort: 8080 image: tomcat:latest imagePullPolicy: IfNotPresent
#导入镜像 把 redcloud-tomcat.tar.gz 上传到 redcloud001 节点,手动解压: [root@redcloud001 ~]# docker load -i redcloud-tomcat.tar.gz #更新资源清单文件 [root@redcloud001 ~]# kubectl apply -f pod-tomcat.yaml #查看 pod 是否创建成功 [root@redcloud001 ~]# kubectl get pods -o wide -l app=tomcat NAME READY STATUS IP NODE tomcat-test 1/1 Running 10.244.121.45 redcloud001 但是自主式 Pod 是存在一个问题的,假如我们不小心删除了 pod: [root@redcloud001 ~]# kubectl delete pods tomcat-test #查看 pod 是否还在 [root@redcloud001 ~]# kubectl get pods -l app=tomcat #结果是空,说明 pod 已经被删除了

通过上面可以看到,如果直接定义一个 Pod 资源,那 Pod 被删除,就彻底被删除了,不会再创建一 个新的 Pod,这在生产环境还是具有非常大风险的,所以今后我们接触的 Pod,都是控制器管理的。

1.2.2 控制器管理的 Pod

常见的管理 Pod 的控制器:Replicaset、Deployment、Job、CronJob、Daemonset、Statefulset。 控制器管理的 Pod 可以确保 Pod 始终维持在指定的副本数运行。 如,通过 Deployment 管理 Pod #解压镜像: 把 redcloud-nginx.tar.gz 上传到 redcloud001 节点

[root@redcloud001 ~]# docker load -i redcloud-nginx.tar.gz #创建一个资源清单文件 [root@redcloud001 ~]# vim nginx-deploy.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-test labels: app: nginx-deploy spec: selector: matchLabels: app: nginx replicas: 2 template: metadata: labels: app: nginx spec: containers: - name: my-nginx image: nginx:latest imagePullPolicy: IfNotPresent ports: - containerPort: 80
#更新资源清单文件 [root@xianchaomaster1 ~]# kubectl apply -f nginx-deploy.yaml #查看 Deployment [root@xianchaomaster1 ~]# kubectl get deploy -l app=nginx-deploy NAME READY UP-TO-DATE AVAILABLE AGE nginx-test 2/2 2 2 16s #查看 Replicaset [root@xianchaomaster1 ~]# kubectl get rs -l app=nginx NAME DESIRED CURRENT READY AGE nginx-test-75c685fdb7 2 2 2 71s #查看 pod [root@xianchaomaster1 ~]# kubectl get pods -o wide -l app=nginx NAME READY STATUS IP nginx-test-75c685fdb7-6d4lx 1/1 Running 10.244.102.69 nginx-test-75c685fdb7-9s95h 1/1 Running 10.244.102.68 #删除 nginx-test-75c685fdb7-9s95h 这个 pod [root@xianchaomaster1 ~]# kubectl delete pods nginx-test-75c685fdb7-9s95h [root@xianchaomaster1 ~]# kubectl get pods -o wide -l app=nginx NAME READY STATUS IP nginx-test-75c685fdb7-6d4lx 1/1 Running 10.244.102.69 nginx-test-75c685fdb7-pr8gh 1/1 Running 10.244.102.70 #发现重新创建一个新的 pod 是 nginx-test-75c685fdb7-pr8gh 通过上面可以发现通过 deployment 管理的 pod,可以确保 pod 始终维持在指定副本数量
13 February 2026