复制集和标签

首先

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

复制集(ReplicaSet)与标签(Label)之间的关系

image.png

在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的标签必须是独立且唯一的。

广告
将在 10 秒后关闭
bannerAds