复制集和标签
首先
上次我们确认了ReplicaSet的运行情况。
当服务器崩溃导致副本数量减少时,通过自动修复功能恢复了副本数量。
Master服务器会检测到副本数量的减少,并向Worker节点发送指令以增加副本数量,但是副本数量是通过”label”来计算的,而不是通过Pod的数量。
这次我们想要确认这个操作的运行情况。
复制集(ReplicaSet)与标签(Label)之间的关系

在yaml文件中,需要对”spec.selector.matchLabels”和”spec.template.metadata.labels”进行一致的描述。
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: sample-pod3
spec:
replicas: 3
selector:
matchLabels:
app: nginx-redis <----------+
template: |
metadata: | 合わせる必要がある
labels: |
app: nginx-redis <--------+
spec:
containers:
- name: nginx
image: nginx:latest
- name: redis
image: redis:latest
所以,如果标签设定不匹配,在进行部署时会导致错误。就像这样。
$ kubectl apply -f sampleReplicaSet-E.yaml
The ReplicaSet "sample-pod3" is invalid: spec.template.metadata.labels: Invalid value: map[string]string{"app":"nginx-redis-e"}: `selector` does not match template `labels`
如果Pod中指定了与ReplicaSet相同的标签会发生什么?
下一步,我們將嘗試在另一個Pod上指定與ReplicaSet相同的標籤並進行部署。
首先,我們將查看目前的狀態。
$ kubectl get rs -o wide
NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR
sample-pod3 3 3 3 24h nginx,redis nginx:latest,redis:latest app=nginx-redis
$ kubectl get pod -L app
NAME READY STATUS RESTARTS AGE APP
sample-pod3-7nxxr 2/2 Running 2 24h nginx-redis
sample-pod3-ngw8x 2/2 Running 2 23h nginx-redis
sample-pod3-thbbx 2/2 Running 2 24h nginx-redis
接下来,我们将部署具有相同标签的以下yaml文件中的Pod。
apiVersion: v1
kind: Pod
metadata:
name: sample-pod1
labels:
app: nginx-redis
spec:
containers:
- name: nginx
image: nginx:latest
- name: redis
image: redis:latest
$ kubectl apply -f nginx_redis.yaml
pod/sample-pod1 created
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
sample-pod1 0/2 Terminating 0 2s
sample-pod3-7nxxr 2/2 Running 2 24h
sample-pod3-ngw8x 2/2 Running 2 23h
sample-pod3-thbbx 2/2 Running 2 24h
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
sample-pod3-7nxxr 2/2 Running 2 24h
sample-pod3-ngw8x 2/2 Running 2 23h
sample-pod3-thbbx 2/2 Running 2 24h
Pod会被部署,但很快就会进入Terminating状态并被删除。
我尝试了几次,每次新部署的Pod都会被删除。
由于找不到手册中的说明,所以我还无法确认Kubernetes的操作是否始终正确。但是,我已经明白在设置标签时需要注意的事项。至少,用于ReplicaSet的标签必须是独立且唯一的。