今天学了pod资源清单中的字段含义和用法。
在资源清单中command和args的区别:
从图中可以看到,如果你没有在设置command和args的值会按照镜像设置好的Env和cmd走流程;
如果你只设置了command就会把镜像的预先设置的环境替代;
如果你只设置了args就会把镜像中的cmd替代并追加到镜像中的Env后面,当Env变量;
如果你设置了command和args就会和把args追加到command后面当变量。
lable字段:
lable在资源清单中是以键值对的形式存在。(key:value)
key:只能用“字母,数字,,-”(不能为空)
value:只能用“字母,数字,,-”(一定要以数字或字母开头,能为空)
kubectl get pods -l nginx --show-lables
#显示标签为nginx的pod,并且显示标签信息
kubectl get pods -L nginx mysql
#显示nginx标签和mysql标签两个的值,没有此标签会显示空
kubectl get pods -l nginx=v1.1
#显示标签等于nginx=v1.1的pod
kubectl get pods -l nginx!=v1.1
#显示标签不等于nginx=v1.1和没有这个标签的pods
kubectl get pods -l nginx in (v1.1,v1.2)
#显示标签等于nginx=v1.1或nginx=v1.2的pods(如果是notin:说明显示nginx!=v1.1或nginx!=v1.2或没有nginx的pods)
kubectl lable pods nginx app=www
#为nginx的pod添加app=www的标签(如果app标签已经存在,只是想修改值需要添加--overwrite)
nodeSelector字段&imagePullPolicy字段:
kubectl lable nodes www disk=ssd
#给node中的www添加标签
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
env: test
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
nodeSelector:
disk: ssd
#imagePullPolicy:获取镜像的策略;默认如果镜像版本是latest每次都会从镜像仓库中下载,如果指定了版本号会优先使用本镜像。
#Always
#总是拉取:
#首先获取仓库镜像信息,
#如果仓库中的镜像与本地不同,那么仓库中的镜像会被拉取并覆盖本地。
#如果仓库中的镜像与本地一致,那么不会拉取镜像。
#如果仓库不可用,那么pod运行失败。
#IfNotPresent
#优先使用本地:
#如果本地存在镜像,则使用本地的,
#不管仓库是否可用。
#不管仓库中镜像与本地是否一致。
#Never
#只使用本地镜像,如果本地不存在,则pod运行失败
#nodeSelector:把pod部署在有disk=ssd的node中
annotations字段:
与lable不一样的是它不能用于挑选资源对象,仅用于为对象提供“元数据”。
restartPolicty字段:
restartPolicty有Always,OnFainlure,Never等值;
Always:只要容器发生错误或没达到预期要求就立刻重新启动;
OnFainlure:只有容器发生错误才会重新启动;
Nerver:绝不重启;
restartPolicty字段默认Always。
Pod生命周期:
Pod的状态:Pending,Runing,Failed,Succeeded,Unknown
Pending:创建pod失败是会出现的挂起状态;
Runing:运行状态;
Failed:运行错误状态;
Succeeded:Pod初始化成功会有一瞬间的成功状态;
Unknown:当kubelet失联了会出现的未知状态。
Pod创建过程如图所示:
容器钩子:
容器钩子是Kubemetes针对容器生命周期管理引入的事件处理机制,它负责监听Kubemetes对容器生命周期的管理信息,并将这些信息以广播的形式通知给容器。然后执行相应的回调函数。
Kubemetes支持两种类型的容器钩子,分别为PostStart和PostStart。