Kubernetes Pod篇(1)Pod概述 - 根容器Pause、Pod清单、镜像拉取策略、command与args的区别
1. Pod简述# 本节要点根容器Pause的作用,作为整组容器的状态,Pod里的多个业务容器共享Pause容器IP,共享Pause容器挂接的Volume。每个Pod都有唯一IP;一个Pod容器与另外主机的Pod容器之间可以直接通信。Pod运行在节点Node中;Pod是对容器的封装,是k8s最小的调度单元,也是Kubernetes最重要的基本概念;Pause容器简述每个Pod都有一个特殊的被称为“
·
# 本节要点
根容器Pause的作用,作为整组容器的状态,Pod里的多个业务容器共享Pause容器IP,共享Pause容器挂接的Volume。
每个Pod都有唯一IP;一个Pod容器与另外主机的Pod容器之间可以直接通信。
1. Pod简述
- Pod运行在节点Node中;
- Pod是对容器的封装,是k8s最小的调度单元,也是Kubernetes最重要的基本概念;
- Pause容器简述
每个Pod都有一个特殊的被称为“根容器”的Pause容器,Pause容器对应的镜像属于Kubernetes平台的一部分。Kubernetes设计出全新Pod概念的原因如下。
原因一,在一组容器作为一个单位的情况下,我们难以简单地对整组容器的状态进行判断。如果其中一个容器死亡,此时该去定义整组容器都死亡呢?还是定义N/M的死亡率呢?通过引入与业务无关并且不容易死亡的Pause容器作为Pod的根容器,以它的状态代表整组容器的状态,可以简单的解决整个问题。
原因二,Pod里的多个业务容器共享Pause容器IP,共享Pause容器挂接的Volume,这样既简化了密切关联的业务容器之间的通信问题,也很好地解决了它们之间的文件共享问题。- Kubernetes为每个Pod都分配了唯一的IP地址,称之为Pod IP,一个Pod里的多个容器共享Pod IP。Kubernetes要求底层网络支持集群内任意两个Pod之间的TCP/IP直接通信,因此一个Pod容器与另外主机上的Pod容器能够直接通信。
2. Pod清单
apiVersion: v1 # Pod版本号为v1
kind: Pod # 使用的资源类型为Pod
metadata:
name: string # 当前Pod的名称,名字唯一
namespace: string # Pod所属的命名空间,默认值为default
labels: # 自定义标签列表
- name: string # 当前pod标签为“name=string”
annotations: # 自定义注解列表
- name: string
spec: # Pod中的详细定义
containers: # Pod的容器列表
- name: string # 容器名字
image: string # 容器镜像
imagePullPolicy: # 容器的镜像拉取策略
command: [string] # 容器的启动命令列表
args: [string] # 容器的启动命令参数列表
workingDir: String 容器的工作目录
volumeMounts: # 挂载到容器内部的存储卷配置
- name: String # 引用Pod定义的共享存储卷的名,需用Pod.spec.volumes[]部分定义的卷名
mountPath: String # 存储卷在容器内的绝对路径
readOnly: boolean # 设置为只读模式,默认为false
volumes: # 在该Pod上定义共享存储卷列表
- name: String # 共享存储卷名称,必须字母小写
emptyDir: { } # 类型为emptyDir的存储卷,与Pod同生命周期的一个临时目录,为空值
hostPath: String # 类型为hostPath的存储卷,表示挂载Pod所在宿主机的目录
path: String # Pod所在宿主机的目录,将被用于同期中Mount的目录
ports: 容器需要暴露的端口库号列表
- name: String 端口号名称
containerPort: Int 容器需要监听的端口号
hostPort: Int 可选,容器所在主机需要监听的端口号,默认与Container相同
env: # 容器运行前需设置的环境变量列表
- name: String # 环境变量名称
value: String # 环境变量的值
resources: # 资源限制和请求的设置
limits: # 资源限制的设置
cpu: String # Cpu的限制,单位为Core数,将用于docker run --cpu-shares参数,如果整数后跟m,表示占用权重,1Core=1000m
memory: String # 内存限制,单位可以为Mib/Gib,将用于docker run --memory参数
requests: # 资源请求的设置
cpu: string # CPU请求,容器启动的初始可用数量
memory: string # 内存请求,容器启动的初始可用数量
livenessProbe: # 对Pod内容器健康检查设置,当探测无响应几次后将自动重启该容器,检查方法有exec、httpGet和tcpSocket,对一个容器只需设置其中一种方法即可。
exec: # 对Pod容器内检查方式设置为exec方式
command: [String] # exec方式需要制定的命令或脚本
httpGet: # 对Pod容器内检查方式设置为HttpGet方式,需要指定path、port
path: String # 网址URL路径(去除对应的域名或IP地址的部分)
port: Int # 对应端口
host: String # 域名或IP地址
schema: String # 对应的检测协议,如http
HttpHeaders: # 指定报文头部信息
- name: String
value: String
tcpSocket: # 对Pod容器内检查方式设置为tcpSocket方式
port: Int
initialDelaySeconds: Int # 容器启动完成后首次探测的时间,单位为秒
timeoutSeconds: Int # 对容器健康检查探测等待响应的超时时间,单位为秒,默认为1秒
periodSeconds: Int # 对容器监控检查的定期探测时间设置,单位为秒,默认10秒一次
successThreshold: Int # 探测几次成功后认为成功
failureThreshold: Int # 探测几次失败后认为失败
securityContext:
privileged: false
restartPolicy: # Pod的重启策
nodeSelector: 设置NodeSelector表示将该Pod调度到包含这个label的node上,以Key:Value的格式指定
Key: Value 调度到指定的标签Node上
imagePullSecrets: Pull镜像时使用的secret名称,以Key:SecretKey格式指定
- name: String
hostNetwork: false 是否使用主机网络模式,默认为false,如果设置为true,表示使用宿主机网络
secret: 类型为Secret的存储卷,挂载集群与定义的Secret对象到容器内部
secretname: String
items: 当仅需挂载一个Secret对象中的指定Key时使用
- key: String
path: String
configMap: # 类型为ConfigMap的存储卷,挂载预定义的ConfigMap对象到容器内部
name: String
items: # 当仅需挂载一个ConfigMap对象中的指定Key时使用
- key: String
path: String
3. 镜像拉取策略说明imagePullPolicy
# 镜像拉取策略有三种
Always、Never、IfNotPresent
下面详解三种拉取策略
# Always
默认值。每次都尝试重新拉取镜像;
# IfNotPresent
如果本地有该镜像,则使用本地镜像,本地镜像不存在时则去拉取镜像;
# Never
仅使用本地镜像,如果本地没有则不进行拉取
4. command、args的区别
# command、args两项实现覆盖Dockerfile中ENTRYPOINT的功能,具体的command命令代替ENTRYPOINT的命令行,args代表集体的参数。
# 以下是使用场景
1. 如果command和args均没有指定,那么则使用Dockerfile的配置。
2. 如果command没有指定,但指定了args,那么Dockerfile中配置的ENTRYPOINT的命令行会被执行,并且将args中填写的参数追加到ENTRYPOINT中。
3. 如果command指定了,但args没有写,那么Dockerfile默认的配置会被忽略,执行输入的command(不带任何参数,当然command中可自带参数)。
4. 如果command和args都指定了,那么Dockerfile的配置被忽略,执行command并追加上args参数。
[root@Master ~]# vim pod-busybox-command-args.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-busybox-command-args
labels:
name: pod-busybox-command-args
spec:
containers:
- name: busybox
image: busybox
imagePullPolicy: IfNotPresent
command: ["/bin/sh","-c","sleep 3600"]
[root@Master ~]# kubectl create -f pod-busybox-command-args.yaml
pod/pod-busybox-command-args created
[root@Master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
pod-busybox-command-args 1/1 Running 0 4s
删除pod
[root@Master ~]# kubectl delete pod pod-busybox-command-args
pod "pod-busybox-command-args" deleted
修改方式一:
[root@Master ~]# vim pod-busybox-command-args.yaml
command: ["/bin/sh","-c","sleep 3600"]
修改为
command: ["/bin/sh"]
args: ["-c","sleep 3600"]
[root@Master ~]# kubectl create -f pod-busybox-command-args.yaml
pod/pod-busybox-command-args created
[root@Master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
pod-busybox-command-args 1/1 Running 0 4s
删除pod
[root@Master ~]# kubectl delete pod pod-busybox-command-args
pod "pod-busybox-command-args" deleted
修改方式二:
[root@Master ~]# vim pod-busybox-command-args.yaml
command: ["/bin/sh","-c","sleep 3600"]
修改为
args:
- /bin/sh
- -c
- sleep 3600
[root@Master ~]# kubectl create -f pod-busybox-command-args.yaml
pod/pod-busybox-command-args created
[root@Master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
pod-busybox-command-args 1/1 Running 0 4s
删除pod
[root@Master ~]# kubectl delete pod pod-busybox-command-args
pod "pod-busybox-command-args" deleted
更多推荐
已为社区贡献1条内容
所有评论(0)