pod的介绍、命令行创建pod

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

前言

环境: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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值