根容器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
kind: Pod
metadata:
name: string
namespace: string
labels:
- name: string
annotations:
- name: string
spec:
containers:
- name: string
image: string
imagePullPolicy:
command: [string]
args: [string]
workingDir: String 容器的工作目录
volumeMounts:
- name: String
mountPath: String
readOnly: boolean
volumes:
- name: String
emptyDir: { }
hostPath: String
path: String
ports: 容器需要暴露的端口库号列表
- name: String 端口号名称
containerPort: Int 容器需要监听的端口号
hostPort: Int 可选,容器所在主机需要监听的端口号,默认与Container相同
env:
- name: String
value: String
resources:
limits:
cpu: String
memory: String
requests:
cpu: string
memory: string
livenessProbe:
exec:
command: [String]
httpGet:
path: String
port: Int
host: String
schema: String
HttpHeaders:
- name: String
value: String
tcpSocket:
port: Int
initialDelaySeconds: Int
timeoutSeconds: Int
periodSeconds: Int
successThreshold: Int
failureThreshold: Int
securityContext:
privileged: false
restartPolicy:
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:
name: String
items:
- key: String
path: String
3. 镜像拉取策略说明imagePullPolicy
Always、Never、IfNotPresent
下面详解三种拉取策略
默认值。每次都尝试重新拉取镜像;
如果本地有该镜像,则使用本地镜像,本地镜像不存在时则去拉取镜像;
仅使用本地镜像,如果本地没有则不进行拉取
4. command、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 ~]
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 ~]
pod/pod-busybox-command-args created
[root@Master ~]
NAME READY STATUS RESTARTS AGE
pod-busybox-command-args 1/1 Running 0 4s
删除pod
[root@Master ~]
pod "pod-busybox-command-args" deleted
修改方式一:
[root@Master ~]
command: ["/bin/sh","-c","sleep 3600"]
修改为
command: ["/bin/sh"]
args: ["-c","sleep 3600"]
[root@Master ~]
pod/pod-busybox-command-args created
[root@Master ~]
NAME READY STATUS RESTARTS AGE
pod-busybox-command-args 1/1 Running 0 4s
删除pod
[root@Master ~]
pod "pod-busybox-command-args" deleted
修改方式二:
[root@Master ~]
command: ["/bin/sh","-c","sleep 3600"]
修改为
args:
- /bin/sh
- -c
- sleep 3600
[root@Master ~]
pod/pod-busybox-command-args created
[root@Master ~]
NAME READY STATUS RESTARTS AGE
pod-busybox-command-args 1/1 Running 0 4s
删除pod
[root@Master ~]
pod "pod-busybox-command-args" deleted