Kubernetes 学习6 Pod控制器应用进阶
一、资源配置清单
1、自主式Pod资源
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。2、资源的清单格式,大多数清单格式都遵循如下条件:
a、一级字段:apiVersion(group/version),kind,metadata(name,namespace,labels,annotations....),spec,status(只读)
二、在spec中常用的定义资源的字段
1、spec.containers <[]object>#列表对象
a、 name <string> #容器名称
b、 image <string> #镜像名称 一般格式为 项目名称/用户名称/镜像名称:标签
c、 imagePullPolicy <string>#镜像获取策略
d、Always(总是到仓库中下载,无论本地有没有都要去仓库中下载),Never(本地有就用,本地没有也不下载),IfNotPreseat(如果本地存在则直接使用,如果本地不存在就去仓库下载)。如果镜像标签为latest则默认为Always,如果镜像标签不是latest则默认为IfNotPresent模式。一旦对象创建后就不能被更改。
e、ports #暴露端口
f、command #默认启动命令,如果要用到shell 需要手动指定,不指定的话默认运行默认启动命令,相当于docker中的entrypoint
g、args #向entrypoint 传递参数。默认启动命令为 entrypoint 命令 + Cmd 命令,若指定了args那么就变成了entrypoint命令 + args命令 ,args相当于docker中的Cmd命令
h、command 和 args与镜像中的各标签对比如下
三、资源标签
1、资源标签的键名和值必须小于等于63个字符。key 和 value 都需要小于等于63个字符。并且键名只能使用字母数字下划线点号连接线。并且只能以字母或者数字开头。
2、通过命令查看标签
[root@k8smaster manifests]# kubectl get pods -o wide --show-labels NAME READY STATUS RESTARTS AGE IP NODE LABELS myapp-848b5b879b-5k4s4 1/1 Running 0 4d 10.244.2.14 k8snode2 pod-template-hash=4046164356,run=myapp myapp-848b5b879b-bzblz 1/1 Running 0 4d 10.244.1.21 k8snode1 pod-template-hash=4046164356,run=myapp myapp-848b5b879b-hzbf5 1/1 Running 0 4d 10.244.1.22 k8snode1 pod-template-hash=4046164356,run=myapp nginx-deploy-5b595999-d9lv5 1/1 Running 0 4d 10.244.2.4 k8snode2 pod-template-hash=16151555,run=nginx-deploy pod-demo 2/2 Running 1 1h 10.244.1.23 k8snode1 app=myapp,tier=frontend
3、显示拥有app标签的值
[root@k8smaster manifests]# kubectl get pods -o wide -L app NAME READY STATUS RESTARTS AGE IP NODE APP myapp-848b5b879b-5k4s4 1/1 Running 0 4d 10.244.2.14 k8snode2 myapp-848b5b879b-bzblz 1/1 Running 0 4d 10.244.1.21 k8snode1 myapp-848b5b879b-hzbf5 1/1 Running 0 4d 10.244.1.22 k8snode1 nginx-deploy-5b595999-d9lv5 1/1 Running 0 4d 10.244.2.4 k8snode2 pod-demo 2/2 Running 0 4m 10.244.2.16 k8snode2 myapp
4、显示拥有app标签的pod
[root@k8smaster manifests]# kubectl get pods -o wide -l app --show-labels NAME READY STATUS RESTARTS AGE IP NODE LABELS pod-demo 2/2 Running 0 8m 10.244.2.16 k8snode2 app=myapp,tier=frontend
5、给pod用命令打标签
[root@k8smaster manifests]# kubectl label pods pod-demo release=canary #金丝雀 pod/pod-demo labeled [root@k8smaster manifests]# kubectl get pods -o wide -l app --show-labels NAME READY STATUS RESTARTS AGE IP NODE LABELS pod-demo 2/2 Running 0 13m 10.244.2.16 k8snode2 app=myapp,release=canary,tier=frontend
6、修改已有标签
[root@k8smaster manifests]# kubectl get pods -o wide -l app --show-labels NAME READY STATUS RESTARTS AGE IP NODE LABELS pod-demo 2/2 Running 0 13m 10.244.2.16 k8snode2 app=myapp,release=canary,tier=frontend [root@k8smaster manifests]# kubectl label pods pod-demo release=stable --overwrite pod/pod-demo labeled [root@k8smaster manifests]# kubectl get pods -o wide -l app --show-labels NAME READY STATUS RESTARTS AGE IP NODE LABELS pod-demo 2/2 Running 0 15m 10.244.2.16 k8snode2 app=myapp,release=stable,tier=frontend
7、k8s的标签选择器有两类
a、等值关系标签选择器: = ,==,!=(不等于)
[root@k8smaster manifests]# kubectl get pods NAME READY STATUS RESTARTS AGE myapp-848b5b879b-5k4s4 1/1 Running 0 4d myapp-848b5b879b-bzblz 1/1 Running 0 4d myapp-848b5b879b-hzbf5 1/1 Running 0 4d nginx-deploy-5b595999-d9lv5 1/1 Running 0 4d pod-demo 2/2 Running 0 22m [root@k8smaster manifests]# kubectl label pods nginx-deploy-5b595999-d9lv5 release=canary pod/nginx-deploy-5b595999-d9lv5 labeled [root@k8smaster manifests]# kubectl get pods -o wide --show-labels -l release #查看包含release标签的pod NAME READY STATUS RESTARTS AGE IP NODE LABELS nginx-deploy-5b595999-d9lv5 1/1 Running 0 4d 10.244.2.4 k8snode2 pod-template-hash=16151555,release=canary,run=nginx-deploy pod-demo 2/2 Running 0 24m 10.244.2.16 k8snode2 app=myapp,release=stable,tier=frontend [root@k8smaster manifests]# kubectl get pods -o wide --show-labels -l release=canary #查看包含release=canary标签的pod NAME READY STATUS RESTARTS AGE IP NODE LABELS nginx-deploy-5b595999-d9lv5 1/1 Running 0 4d 10.244.2.4 k8snode2 pod-template-hash=16151555,release=canary,run=nginx-deploy [root@k8smaster manifests]# kubectl get pods -o wide --show-labels -l release,app #查看既包含release又包含app标签的pod NAME READY STATUS RESTARTS AGE IP NODE LABELS pod-demo 2/2 Running 0 24m 10.244.2.16 k8snode2 app=myapp,release=stable,tier=frontend [root@k8smaster manifests]# kubectl get pods -o wide --show-labels -l release=stable,app=myapp #查看release=stable和app=myapp的pod NAME READY STATUS RESTARTS AGE IP NODE LABELS pod-demo 2/2 Running 0 25m 10.244.2.16 k8snode2 app=myapp,release=stable,tier=frontend
[root@k8smaster manifests]# kubectl get pods -o wide --show-labels -l release!=stable,app!=myapp #查看release不等于stable和app不等于myapp的pod NAME READY STATUS RESTARTS AGE IP NODE LABELS myapp-848b5b879b-5k4s4 1/1 Running 0 4d 10.244.2.14 k8snode2 pod-template-hash=4046164356,run=myapp myapp-848b5b879b-bzblz 1/1 Running 0 4d 10.244.1.21 k8snode1 pod-template-hash=4046164356,run=myapp myapp-848b5b879b-hzbf5 1/1 Running 0 4d 10.244.1.22 k8snode1 pod-template-hash=4046164356,run=myapp nginx-deploy-5b595999-d9lv5 1/1 Running 0 4d 10.244.2.4 k8snode2 pod-template-hash=16151555,release=canary,run=nginx-deploy [root@k8smaster manifests]# kubectl get pods -o wide --show-labels -l release!=stable #查看release不等于stable的pod NAME READY STATUS RESTARTS AGE IP NODE LABELS myapp-848b5b879b-5k4s4 1/1 Running 0 4d 10.244.2.14 k8snode2 pod-template-hash=4046164356,run=myapp myapp-848b5b879b-bzblz 1/1 Running 0 4d 10.244.1.21 k8snode1 pod-template-hash=4046164356,run=myapp myapp-848b5b879b-hzbf5 1/1 Running 0 4d 10.244.1.22 k8snode1 pod-template-hash=4046164356,run=myapp nginx-deploy-5b595999-d9lv5 1/1 Running 0 4d 10.244.2.4 k8snode2 pod-template-hash=16151555,release=canary,run=nginx-deploy
b、集合关系的标签选择器
KEY in {VALUE1,VALUE2,...}
KEY notin {VALUE1,VALUE2...}
KEY #存在此键
!KEY #不存在此键
[root@k8smaster manifests]# kubectl get pods -o wide --show-labels NAME READY STATUS RESTARTS AGE IP NODE LABELS myapp-848b5b879b-5k4s4 1/1 Running 0 4d 10.244.2.14 k8snode2 pod-template-hash=4046164356,run=myapp myapp-848b5b879b-bzblz 1/1 Running 0 4d 10.244.1.21 k8snode1 pod-template-hash=4046164356,run=myapp myapp-848b5b879b-hzbf5 1/1 Running 0 4d 10.244.1.22 k8snode1 pod-template-hash=4046164356,run=myapp nginx-deploy-5b595999-d9lv5 1/1 Running 0 4d 10.244.2.4 k8snode2 pod-template-hash=16151555,release=canary,run=nginx-deploy pod-demo 2/2 Running 0 39m 10.244.2.16 k8snode2 app=myapp,release=stable,tier=frontend [root@k8smaster manifests]# kubectl get pods -o wide --show-labels -l "release in (canary,beta,alpha)" NAME READY STATUS RESTARTS AGE IP NODE LABELS nginx-deploy-5b595999-d9lv5 1/1 Running 0 4d 10.244.2.4 k8snode2 pod-template-hash=16151555,release=canary,run=nginx-deploy [root@k8smaster manifests]# kubectl get pods -o wide --show-labels -l "release notin (canary,beta,alpha)" NAME READY STATUS RESTARTS AGE IP NODE LABELS myapp-848b5b879b-5k4s4 1/1 Running 0 4d 10.244.2.14 k8snode2 pod-template-hash=4046164356,run=myapp myapp-848b5b879b-bzblz 1/1 Running 0 4d 10.244.1.21 k8snode1 pod-template-hash=4046164356,run=myapp myapp-848b5b879b-hzbf5 1/1 Running 0 4d 10.244.1.22 k8snode1 pod-template-hash=4046164356,run=myapp pod-demo 2/2 Running 0 41m 10.244.2.16 k8snode2 app=myapp,release=stable,tier=frontend
58分35秒
