官方文档: https://kubernetes.io/docs/concepts/workloads/pods/ Pod 是 Kubernetes 中的最小调度单元,k8s 是通过定义一个 Pod 的资源,然后在 Pod 里面运行容 器,容器需要指定一个镜像,这样就可以用来运行具体的服务。一个 Pod 封装一个容器(也可以封装多 个容器),Pod 里的容器共享存储、网络等。也就是说,应该把整个 pod 看作虚拟机,然后每个容器相当 于运行在虚拟机的进程。
Pod 是需要调度到 k8s 集群的工作节点来运行的,具体调度到哪个节点,是根据 scheduler 调度器实 现的。 白话解释: 可以把 pod 看成是一个“豌豆荚”,里面有很多“豆子”(容器)。一个豌豆荚里的豆子,它们吸收着共同的营养成分、肥料、水分等,Pod 和容器的关系也是一样,Pod 里面的容器共享 pod 的网络、存储等。
pod 相当于一个逻辑主机--比方说我们想要部署一个 tomcat 应用,如果不用容器,我们可能会部署 到物理机、虚拟机或者云主机上,那么出现 k8s 之后,我们就可以定义一个 pod 资源,在 pod 里定义一 个把 tomcat 容器,所以 pod 充当的是一个逻辑主机的角色。 1.2 Pod 工作方式 在 K8s 中,所有的资源都可以使用一个 yaml 文件来创建,创建 Pod 也可以使用 yaml 配置文件。或 者使用 kubectl run 在命令行创建 Pod(不常用)。 1.2.1 自主式 Pod 所谓的自主式 Pod,就是直接定义一个 Pod 资源,如下:
#导入镜像
把 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 节点