内容简介:每个Pod都有一个特殊的被称为“根容器”的Pause容器Pause容器对应的镜像属于k8s平台的一部分,除了Pause容器还包含一个或多个紧密相关的业务容器Pod图示:
Pod详解
Pod介绍
Pod 是k8s的重要概念,要掌握
每个Pod都有一个特殊的被称为“根容器”的Pause容器
Pause容器对应的镜像属于k8s平台的一部分,除了Pause容器还包含一个或多个紧密相关的业务容器
Pod图示:
-
Pod VS 应用
每个Pod都是应用的一个实例,有专用的IP
-
Pod VS 容器
一个Pod可以有多个容器,彼此间共享网络和存储资源
每个Pod中有一个Pause容器保存所有的容器状态,通过管理Pause容器,达到管理Pod中所有容器的效果
-
Pod VS 节点
同一个Pod中的容器总会被调用到相同的Node节点,不同节点Pod的通信基于虚拟二层网络技术实现
-
Pod VS Pod
普通的Pod 和静态Pod
Pod 定义
通过yaml文件格式定义pod
Pod使用
在k8s中对运行的容器要求为:
所以应用需要改造成前台运行的方式
如果我们创建的 docker 镜像的启动命令是后台执行程序,则kubelet创建包含这个容器的pod
之后运行该命令,即认为Pod已经结束,将立刻销毁该Pod.
如果该Pod定义了RC,则创建、销毁会陷入一个无限循环的过程中
Pod可以由1个或多个容器组合而成
-
一个容器组成的pod
demo1.yaml
apiVersion: v1 kind: Pod metadata: name: mytomcat labels: name: mytomcat spec: containers: - name: mytomcat image: tomcat ports:
创建pod:
[root@laptop tmp]# kubectl create -f demo1.yaml
pod/mytomcat created
查看pod:
[root@laptop tmp]# kubectl get pods //或者kubectl get po
NAME READY STATUS RESTARTS AGE
mytomcat 0/1 ContainerCreating 0 2m30s
[root@laptop tmp]# kubectl describe po mytomcat //查看特定的name
删除pod:
[root@laptop tmp]# kubectl delete -f demo1.yaml
[root@laptop tmp]# kubectl delete pod --all/[pod_name]
* 多个容器组成的pod demo2.yaml
apiVersion: v1
kind: Pod
metadata:
name: myweb labels: name: tomcat-redis
spec:
containers: - name: tomcat image: tomcat ports: - containerPort: 8000 - name: redis image: redis ports: - containerPort: 6379
## Pod分类 ### 普通Pod 普通pod 一旦被创建,就会被放入到etcd中存储,随后会被k8s master调度到某个具体的Node上并进行绑定,随后该pod对应的Node上的kubelet进程实例化成一组相关的docker容器并启动起来 在默认情况下,当pod里某个容器停止时,k8s会自动检测到这个问题并且重新启动这个pod里所有容器。 如果该pod所在的Node当机,则会将这个Node上所有的pod重新调度到其他节点上 ### 静态Pod 静态pod是由kubelet进行管理的仅存在于特定Node上的pod,它们不能通过API Server进行管理。 无法与RC(replicationController)、Deployment和DaemonSet进行关联,并且kubelet也无法对它们进行健康检测 ## Pod生命周期和重启策略 ### Pod状态 | 状态值 | 说明 | | --------- | ------------------------------------------------------------------------------------ | | Pending | API Server已经创建了该pod,但Pod中的一个或多个容器的镜像还没有创建,包括镜像下载过程 | | Running | Pod 内所有容器已创建,且至少一个容器处于运行状态,正在启动状态或正在重启状态 | | Completed | Pod内所有容器均成功执行退出,且不会再重启 | | Failed | Pod内所有容器均已退出,但至少一个容器退出失败 | | Unknown | 由于某种原因无法获取Pod状态,例如网络通信不通 | ### Pod重启策略 重启策略包括Always, OnFailure和Never , 默认是Always | 重启策略 | 说明 | | --------- | ------------------------------------------------------ | | Always | 当容器失效时,由kubelet自动重启该容器 | | OnFailure | 当容器终止运行且退出码不为0时,由kubelet自动重启该容器 | | Never | 不论容器运行状态如何,kubelet都不会重启该容器 | ## Pod资源配置 每个Pod都可以对其能使用的服务器上的计算资源设置限额, **`k8s中可以设置限额的计算资源有CPU和Memory两种`** 其中CPU的资源单位是CPU数量,是一个绝对值而非相对值 Memory配置也是一个绝对值,它的单位是字节数 k8s中,一个计算资源进行配置需要设定两个参数: * requests 表示该资源最小申请数量,系统必须满足要求 * limits表示该资源最大允许使用的量,不能突破,该容器使用超过这个量的资源时,会被k8s kill并重启 看一个例子:
spec:
container:
-
name: db
image: mysql
resources:
requests: memory: "64Mi" cpu: "250m" limits: memory: "128Mi" cpu: "500m"
上面的代码表示 mysql 容器申请至少0.25个cpu和64MiB内存
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Remote
Jason Fried、David Heinemeier Hansson / Crown Business / 2013-10-29 / CAD 26.95
The “work from home” phenomenon is thoroughly explored in this illuminating new book from bestselling 37signals founders Fried and Hansson, who point to the surging trend of employees working from hom......一起来看看 《Remote》 这本书的介绍吧!