#创建名字叫ng1 的pod控制器 和 1个pod kubectl run ng1 --image=nginx --port=80 -n dev #查看pod和deployment kubectl get pod,deploy -n dev #创建标签 kubectl label pod ng1-8444bdf97f-5gpd6 ver=1.0 -n dev #更新标签,已经有ver标签的情况下,要更新标签必须加--overwrite,否则报错 kubectl label pod ng1-8444bdf97f-5gpd6 ver=2.0 -n dev --overwrite #查看标签 kubectl get pod -n dev --show-labels #删除某个(ver)标签 kubectl label pod ng1-8444bdf97f-5gpd6 -n dev ver- #直接删除pod,发现会重新创建。原因是此pod由deployment生成 kubectl delete pod ng1-8444bdf97f-5gpd6 -n dev #删除deployment,pod自动删除 kubectl delete deploy ng1 -n dev #创建deployment和3个pod kubectl run ng1 --image=nginx --port=80 --replicas=3 -n dev kubectl get deploy,pod -n dev --show-labels kubectl delete deploy ng1 -n dev使用配置文件
创建一个pod-nginx.yaml,内容如下:
apiVersion: v1
kind: Pod
metadata:
name: ng1
namespace: dev
labels:
version: "3.0"
env: "test"
spec:
containers:
- image: nginx:latest
name: pod
ports:
- name: nginx-port
containerPort: 80
protocol: TCP
#创建1个pod,不会创建deploy kubectl apply -f pod-nginx.yaml #删除pod,不会重新生成pod kubectl delete -f pod-nginx.yaml使用配置文件创建1个deployment和多个pod
操作同上,用下面的配置文件即可
apiVersion: apps/v1
kind: Deployment
metadata:
name: ng1
namespace: dev
spec:
replicas: 3
selector:
matchLabels:
run: ng1
template:
metadata:
labels:
run: ng1
spec:
containers:
- image: nginx:latest
name: nginx
ports:
- containerPort: 80
protocol: TCP
''' >kubectl get ns,deploy,pod -n dev --show-labels NAME STATUS AGE LABELS namespace/default Active 2d标签选择namespace/dev Active 3m2s namespace/kube-node-lease Active 2d namespace/kube-public Active 2d namespace/kube-system Active 2d NAME READY UP-TO-DATE AVAILABLE AGE LABELS deployment.apps/ng1 3/3 3 3 2m8s NAME READY STATUS RESTARTS AGE LABELS pod/ng1-78f5d584cd-8vxqk 1/1 Running 0 2m8s pod-template-hash=78f5d584cd,run=ng1 pod/ng1-78f5d584cd-r9wkr 1/1 Running 0 2m8s pod-template-hash=78f5d584cd,run=ng1 pod/ng1-78f5d584cd-snrd6 1/1 Running 0 2m8s pod-template-hash=78f5d584cd,run=ng1 '''
Label Selector用于查询和筛选拥有某些标签的资源对象
当前有两种Label Selector:
基于等式的Label Selector
- name = slave: 选择所有包含Label中key="name"且value="slave"的对象
- env != production: 选择所有包括Label中的key="env"且value不等于"production"的对象
基于集合的Label Selector
- name in (master, slave): 选择所有包含Label中的key="name"且value="master"或"slave"的对象
- name not in (frontend): 选择所有包含Label中的key="name"且value不等于"frontend"的对象
标签的选择条件可以使用多个,此时将多个Label Selector进行组合,使用逗号","进行分隔即可。例如:
NAME READY STATUS RESTARTS AGE LABELS ng1-8444bdf97f-5gpd6 1/1 Running 0 9m44s run=ng1,title=a,ver=1.0 ng2-57646cbf96-r452f 1/1 Running 0 101s run=ng2,title=a,ver=2.0 >kubectl get pod -n dev --show-labels -l 'title in (a,b),ver=2.0' NAME READY STATUS RESTARTS AGE LABELS ng2-57646cbf96-r452f 1/1 Running 0 4m8s run=ng2,title=a,ver=2.0



