Kubernetes的Pod(一)

前言

在 Kubernetes中,Pod(容器组是最小的部署单元。它可以包含一个或多个紧密关联的容器,这些容器共享相同的网络命名空间、存储卷和其他资源。Pod 是 Kubernetes 中的原子调度单位,Kubernetes 将 Pod 调度到集群中的节点上,并负责管理它们的生命周期。

特点

  1. 多个容器:Pod 中可以包含一个或多个容器,这些容器共享相同的网络命名空间和 IP 地址,它们可以轻松地进行通信和资源共享。
  2. 共享资源:Pod 中的容器共享相同的存储卷和网络命名空间,它们可以直接相互通信,无需通过网络通信。
  3. 原子性:Pod 是 Kubernetes 中的最小调度单位,Kubernetes 将 Pod 视为一个整体,不会将其拆分到不同的节点上。
  4. 生命周期管理:Kubernetes 负责管理 Pod 的生命周期,包括创建、启动、停止、重启等操作,以确保 Pod 中的容器始终保持运行状态。

注:同Pod中的容器共享IP地址和端口空间,并且可以通过localhost相互访问。他们还可以使用标准的进程间通信(如SystemV信号量或POSIX共享内存)相互通信,不同Pod中的容器具有不同的IP地址,无需特殊配置即可通过IPC进行通信。

无状态的Pod:Deployments创建的pod是无状态的,就是pod部分挂了对整体没有影响。 无状态的pod(单个对整体无影响)

有状态的Pod:StatefulSet创建的pod有关联的,一个挂了影响整体。(单个对整体有影响)

init Pod: 容器是 Kubernetes 中一种特殊类型的容器,它们在 Pod 中的其他容器启动之前运行。Init 容器通常用于在主应用程序容器启动之前执行初始化任务,如数据预处理、配置准备、数据加载等。一旦所有 Init 容器成功完成其任务,Kubernetes 将继续启动主应用程序容器。Init 容器与普通容器的区别在于它们的生命周期。Init 容器的生命周期仅限于在其他容器启动之前运行,而不会被重新启动或重新调度。(有部分资源对象只能在init容器中设置)Init 容器与普通容器的区别在于它们的生命周期。Init 容器的生命周期仅限于在其他容器启动之前运行,而不会被重新启动或重新调度。

Pod的状态

  1. Pending:挂起,我们在请求创建pod时,条件不满足,调度没有完成,没有任何一个节点能满足调度条件。已经创建了但是没有适合它运行的节点叫做挂起,调度没有完成。
  2. Running:运行状态。
  3. Failed:表示失败。
  4. Succeeded:表示成功状态。
  5. Unknown:未知状态,所谓pod是什么状态是apiserver和运行在pod节点的kubelet进行通信获取状态信息的,如果节点之上的kubelet本身出故障,那么apiserver就连不上kubelet,得不到信息了,就会看Unknown

pod重启策略

kubectl explain pods.spec.restartPolicy 定义
Always:只要容器挂了就重启
OnFailure:只有容器状态为错误的时候才重启
Never:从不重启容器
默认重启策略就是Always

Pod的网络

每一个Pod会被分配唯一的IP地址,Pod中的每个容器共享网络名称空间,包括IP地址和网络端口,内部使用Localhost相互通信,当Pod和Pod
之间相互通信时必须使用共享网络资源。

Pod的存储

Pod可以指定一组共享存储卷。 POD中的所有容器都可以访问共享卷,允许这些容器共享数据。 卷也允许Pod中的持久数据在需要重新启动的情况下存活。

Pod与控制器

控制器可以管理一个或多个Pod,确保它们按照所定义的状态进行运行。例如,Deployment 控制器可以管理一组 Pod 的副本,并负责在需要时进行扩展、更新、缩减或更新。控制器还负责监视 Pod 的健康状态,并在 Pod 失效或出现问题时进行自愈操作,以确保应用程序的高可用性和稳定性。常见控制器包括 ReplicaSet、Deployment、StatefulSet 等

Pod的模版(重要)

在 Kubernetes 中,Pod 模板是指定义 Pod 规范的模板,它描述了 Pod 中容器的属性、配置和资源需求。Pod 模板通常用于创建和部署多个相似的 Pod 实例,可以通过控制器(如 Deployment、StatefulSet、ReplicaSet 等)来使用。

1、Pod和api对象

kubectl explain pods 查看Pod的资源对象

apiVersion定义了此对象表示的版本化模式。服务器应将已识别的模式转换为最新的内部值,并可能拒绝无法识别的值。
参考信息:https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#resources

2、Pod的关键字段

kind:在Kubernetes中,Kind 是资源的类型,用于指定Kubernetes API中的不同资源对象。在YAML文件中,Kind 字段指定了要创建或操作的资源类型。就是表示我们要创建什么资源,如Pod、deployment、statefulset、pod、service、ingress等

metadata:在Kubernetes中,metadata字段用于存储资源对象的元数据,例如名称、命名空间、标签等。这些元数据提供了关于资源的基本信息,以便 Kubernetes 可以正确地管理和操作这些资源。

spec:在Kubernetes中,metadata 字段用于存储资源对象的元数据,例如名称、命名空间、标签等。这些元数据提供了关于资源的基本信息,以便 Kubernetes 可以正确地管理和操作这些资源。

简单的YAML解析

apiVersion: v1 
kind: Pod
metadata:
  name: nginx
  namespace: default
  labels: 
    web: nginx-web
spec:
  hostname: nginx-host
  nodeName: node01
  containers:
    - name: nginx-test
      image: nginx:latest
      imagePullPolicy: IfNotPresent
      ports: 
        - name: nginx-post
          containerPort: 80
          hostPort: 8080
  restartPolicy: Always
  #container中的restartPolicy只能在ini容器中设置

matadata.name:

 [root@master yaml]# kubectl get pods
 NAME    READY   STATUS    RESTARTS   AGE
 nginx   1/1     Running   0          29m

matadata.labels字段:

  [root@master yaml]# kubectl get pods nginx --show-labels
  NAME    READY   STATUS    RESTARTS   AGE   LABELS
  nginx   1/1     Running   0          30m   web=nginx-web

spec.nodeName:

[root@master yaml]# kubectl get pods -o wide
NAME    READY   STATUS    RESTARTS   AGE   IP            NODE     NOMINATED NODE   READINESS GATES
nginx   1/1     Running   0          32m   10.244.1.28   node01   <none>           <none>

spec.containers.name:

 [root@master yaml]# kubectl exec -it nginx --  cat /etc/hostname
 nginx-host

其他属性需要使用:kubectl describe pod my-pod 命令查看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值