ReplicaSet的配置以下vim
apiVersion: apps/v1 kind: ReplicaSet metadata: name: myapp namespace: default spec: replicas: 2 selector: matchLabels: app: myapp release: canary template: metadata: name: myapp-pod labels: app: myapp release: canary environment: qa spec: containers: - name: myapp-container image: ikubernetes/myapp:v1 ports: - name: http containerPort: 80
在这个ReplicaSet中,咱们设置了两个label,app=myapp, release=canary
, 建立rs后,查看api
[root@master manifests]# kubectl create -f rs-demo.yaml --dry-run replicaset.apps/myapp created (dry run) [root@master manifests]# kubectl create -f rs-demo.yaml replicaset.apps/myapp created [root@master manifests]# kubectl get pods NAME READY STATUS RESTARTS AGE myapp-bj795 1/1 Running 0 18s myapp-blmx8 1/1 Running 0 18s [root@master manifests]# vim rs-demo.yaml [root@master manifests]# kubectl get pods --show-labels NAME READY STATUS RESTARTS AGE LABELS myapp-b8sb5 1/1 Running 0 5m app=myapp,environment=qa,release=canary myapp-blmx8 1/1 Running 0 8m app=myapp,environment=qa,release=canary [root@master manifests]# kubectl get rs NAME DESIRED CURRENT READY AGE myapp 2 2 2 39s
ReplicaSet会经过label app=myapp, release=canary
来筛选Pod,而且设定的符合该label的Pod副本应该为2个。app
pod-demo.yaml文件的内容以下:frontend
apiVersion: v1 kind: Pod metadata: name: pod-demo namespace: default labels: app: myapp tier: frontend spec: containers: - name: myapp image: ikubernetes/myapp:v1 ports: - name: http containerPort: 80 - name: https containerPort: 443 - name: busybox image: busybox:latest #ImagePullPolicy: IfNotPresent command: - "/bin/sh" - "-c" - "sleep 3600"
此时,咱们建立另外一个pod测试
[root@master manifests]# kubectl create -f pod-demo.yaml pod/pod-demo created [root@master manifests]# kubectl get pods --show-labels NAME READY STATUS RESTARTS AGE LABELS myapp-b8sb5 1/1 Running 0 5m app=myapp,environment=qa,release=canary myapp-blmx8 1/1 Running 0 7m app=myapp,environment=qa,release=canary pod-demo 2/2 Running 0 11s app=myapp,tier=frontend
能够看到,pod-demo的label为 app=myapp,tier=frontend
,咱们尝试给pod-demo添加一个label release=canary
,看下会出现什么效果。spa
[root@master manifests]# kubectl label pods pod-demo release=canary pod/pod-demo labeled [root@master manifests]# kubectl get pods --show-labels NAME READY STATUS RESTARTS AGE LABELS myapp-b8sb5 1/1 Running 0 5m app=myapp,environment=qa,release=canary myapp-blmx8 1/1 Running 0 8m app=myapp,environment=qa,release=canary pod-demo 2/2 Terminating 0 34s app=myapp,release=canary,tier=frontend
能够发现: pod-demo的状态已经为 Terminating。 说明ReplicaSet经过标签选择器获取到了三个副本,而后预期的副本数被设定为2,它随机杀掉了一个。code
应该是随机的, 不过,我测试了几回,都是把新建的pod-demo杀掉了。get