前言
环境:centos7.9 docker-ce-20.10.9 kubernetes-version v1.22.6
介绍pod
在kubernetes的世界中,k8s并不直接处理容器,而是使用多个容器共存的理念,这组容器就叫做pod。
pod是k8s中可以创建和管理的最小单元,是资源对象模型中由用户创建或部署的最小资源对象模型,其他的资源对象都是用来支撑pod对象功能的,比如,pod控制器就是用来管理pod对象的,service或者imgress资源对象是用来暴露pod引用对象的,persistentvolume资源
是用来为pod提供存储等等,简而言之,k8s不会直接处理容器,而是pod,pod才是k8s中可以创建和管理的最小单元,也是基本单元。
pod的特点
1、每个pod就像一个独立的逻辑机器,k8s会为每个pod分配一个集群内部唯一的IP地址,所以每个pod都拥有自己的IP地址、主机名、进程等;
2、一个pod可以包含1个或多个容器,1个容器一般被设计成只运行1个进程,1个pod只可能运行在单个节点上,即不可能1个pod跨节点运行,pod的生命周期是短暂,也就是pod可能随时被消亡(如节点异常,pod异常等情况);
2、每一个pod都有一个特殊的被称为"根容器"的pause容器,也称info容器,pause容器对应的镜像属于k8s平台的一部分,除了pause容器,每个pod还包含一个或多个跑业务相关组件的容器;
3、一个pod中的容器共享network命名空间;
4、一个pod里的多个容器共享pod IP,这就意味着1个pod里面的多个容器的进程所占用的端口不能相同,否则在这个pod里面就会产生端口冲突;既然每个pod都有自己的IP和端口空间,那么对不同的两个pod来说就不可能存在端口冲突;
5、应该将应用程序组织到多个pod中,而每个pod只包含紧密相关的组件或进程;
6、pod是k8s中扩容、缩容的基本单位,也就是说k8s中扩容缩容是针对pod而言而非容器。
pod实现共享网络实现机制:首先pod会创建pause容器,把其他业务容器加入pause容器,
从而让所以业务容器都在同一个命名空间中,这样可是实现网络共享。
pod共享存储实现机制: 引入数据卷volume,使用数据卷进行持久化存储。
pod背后的根本原理
一个容器一般被设计运行一个进程,除非进程本身产生子进程,,由于不能将多个进程聚集在同一个单独的容器中,所以需要一种更高级的结构将容器绑定在一起,并将它们作为一个单元进行管理,这就是pod的背后原理。
命令行创建pod、查看pod
#注意:kubectl run 在旧版本中创建的是deployment,但在本书的版本中创建的是pod
[root@master ~]# kubectl run nginx --image=nginx:1.7.9 --labels="app=nginx" #创建一个pod,并设置标签为app=httpd
pod/nginx created
[root@master ~]# kubectl get pods -n default #查看pod,已经是运行状态
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 43s
[root@master ~]# kubectl get pod nginx -n default -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx 1/1 Running 0 75s 10.244.1.28 node1 <none> <none>
[root@master ~]#
kubectl describe 命令查看pod的详细信息
[root@master ~]# kubectl describe pod nginx #使用kubectl describe命令来查看我们刚才创建的pod的详细信息
Name: nginx #pod的名称为nginx
Namespace: default #pod的所属命名空间
Priority: 0 #这个参数是优先级,暂时不用管
Node: node1/192.168.118.132 #pod所在节点
Start Time: Mon, 14 Feb 2022 22:40:55 +0800 #pod启动时间
Labels: app=nginx #标签
Annotations: <none>
Status: Running #状态
IP: 10.244.1.28 #pod的IP,前面我们介绍pod的时候说过,pod就像一个逻辑机器,有着自己的IP
IPs:
IP: 10.244.1.28
Containers: #容器部分,一个pod可以跑多个容器
nginx: #
Container ID: docker://042179fde4baa7138ac0213bbfb99dd5f02bf915cd91d0ae38982b2bdd30cb9a #容器ID
Image: nginx:1.7.9 #镜像
Image ID: docker-pullable://nginx@sha256:e3456c851a152494c3e4ff5fcc26f240206a94affb40e0714846c451 #镜像ID
Port: <none>
Host Port: <none>
State: Running #容器状态
Started: Mon, 14 Feb 2022 22:40:56 +0800 #容器启动时间
Ready: True #是否准备就绪
Restart Count: 0 #重启次数
Environment: <none>
Mounts: #容器挂载点
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-n5gcr (ro

本文深入介绍了Kubernetes(k8s)中的Pod概念,Pod作为k8s中最小的管理单元,承载着多个容器,并拥有唯一的IP地址。每个Pod内容器共享网络命名空间和存储,通过pause容器实现网络共享,使用数据卷volume进行持久化存储。创建Pod的命令行操作、查看Pod详细信息以及通过Service对外暴露服务的方法也进行了演示。此外,还讨论了Pod的生命周期、标签选择器、端口映射和命令行启动参数等关键特性。

2230

被折叠的 条评论
为什么被折叠?



