k8s中Pod的理解基本概念Pod 是 Kubernetes 集群中能够被创建和管理的最小部署单元,它是虚拟存在的 。Pod 是一组容器的集合,并且部署在同一个 Pod 里面的容器是亲密性很强的一组容器,Pod 里面的容器,共享网络和存储空间,Pod 是短暂的 。
k8s 中的 Pod 有下面两种使用方式
1、一个 Pod 中运行一个容器,这是最常见的用法 。一个 Pod 封装一个容器,k8s 直接对 Pod 管理即可;
2、一个 Pod 中同时运行多个容器,通常是紧耦合的我们才会放到一起 。同一个 Pod 中的多个容器可以使用 localhost 通信,他们共享网络和存储卷 。不过这种用法不常见,只有在特定的场景中才会使用 。
k8s 为什么使用 Pod 作为最小的管理单元k8s 中为什么不直接操作容器而是使用 Pod 作为最小的部署单元呢?
为了管理容器,k8s 需要更多的信息,比如重启策略,它定义了容器终止后要采取的策略;或者是一个可用性探针,从应用程序的角度去探测是否一个进程还存活着 。基于这些原因,k8s 架构师决定使用一个新的实体,也就是 Pod,而不是重载容器的信息添加更多属性,用来在逻辑上包装一个或者多个容器的管理所需要的信息 。
如何使用 Pod1、自主式 Pod我们可以简单的快速的创建一个 Pod 类似下面:
$ cat pod.yamlapiVersion: v1kind: Podmetadata:name: nginxspec:containers:- name: nginximage: nginx:1.14.2ports:- containerPort: 80创建
$ kubectl apply -f pod.yaml -n study-k8s$ kubectl get pod -n study-k8sNAMEREADYSTATUSRESTARTSAGEnginx1/1Running02m自主创建的 Pod ,因为没有加入控制器来管理,这样创建的 Pod,被删除,或者因为意外退出了,不会重启自愈,直接就会被删除了 。所以,业务中,我们在创建 Pod 的时候都会加入控制器 。
2、控制器管理的 Pod因为我们的业务长场景的需要,我们需要 Pod 有滚动升级,副本管理,集群级别的自愈能力,这时候我们就不能单独的创建 Pod, 我们需要通过相应的控制器来创建 Pod,来实现 Pod 滚动升级,自愈等的能力 。
对于 Pod 使用,我们最常使用的就是通过 Deployment 来管理 。
Deployment 提供了一种对 Pod 和 ReplicaSet 的管理方式 。Deployment 可以用来创建一个新的服务,更新一个新的服务,也可以用来滚动升级一个服务 。借助于 ReplicaSet 也可以实现 Pod 的副本管理功能 。
滚动升级一个服务,实际是创建一个新的 RS,然后逐渐将新 RS 中副本数增加到理想状态,将旧 RS 中的副本数减小到 0 的复合操作;这样一个复合操作用一个 RS 是不太好描述的,所以用一个更通用的 Deployment 来描述 。
$ vi deployment.yamlapiVersion: apps/v1kind: Deploymentmetadata:name: nginx-deploymentlabels:app: nginxspec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.14.2ports:- containerPort: 80运行
$ kubectl apply -f deployment.yaml -n study-k8s$ kubectl get pods -n study-k8sNAMEREADYSTATUSRESTARTSAGEnginx1/1Running067mnginx-deployment-66b6c48dd5-24sbd1/1Running059snginx-deployment-66b6c48dd5-wxkln1/1Running059snginx-deployment-66b6c48dd5-xgzgh1/1Running059s因为上面定义了 replicas: 3 也就是副本数为3,当我们删除一个 Pod 的时候,马上就会有一个新的 Pod 被创建 。
同样经常使用的到的控制器还有 DaemonSet 和 StatefulSet
DaemonSet:DaemonSet 确保全部(或者某些)节点上运行一个 Pod 的副本 。当有节点加入集群时,也会为他们新增一个 Pod。当有节点从集群移除时,这些 Pod 也会被回收 。删除 DaemonSet 将会删除它创建的所有 Pod 。
StatefulSet:用来管理有状态应用的工作负载,和 Deployment 类似,StatefulSet 管理基于相同容器规约的一组 Pod 。但和 Deployment 不同的是,StatefulSet 为它们的每个 Pod 维护了一个有粘性的 ID 。这些 Pod 是基于相同的规约来创建的,但是不能相互替换:无论怎么调度,每个 Pod 都有一个永久不变的 ID 。
- 猫和狗像什么 猜一个成语 猫狗像什么打一成语是什么
- 带鱼和刀鱼的区别
- 菊芋粉功效及副作用 菊芋粉和菊粉的区别
- 金桔和什么泡水喝好
- 动车组列车CDG开头的含义不同 我国高铁c和g有什么区别
- 带你了解运动后喝电解质水好不好 喝电解质水的好处和坏处是 什么
- 花生和什么一起吃好
- 蛤蜊不能和什么一起吃
- 香蜜沉沉烬如霜和沉香如屑 沉香蜜蜜烬如霜 演员表
- 鹰嘴豆不能和什么一起吃
特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
