CKA – Replicaset的使用

Kubernetes的replicaset是无法使用命令行来创建的,只能只用yaml来创建。Replicaset yaml的范例能够通过kubernetes的官网查询。

https://kubernetes.io/docs/concepts/workloads/controllers/replicaset

使用范例

1. 创建yaml

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: frontend
spec:
  replicas: 3
  selector:
    matchLabels:
      tier: frontend
  template:
    metadata:
      labels:
        tier: frontend
    spec:
      containers:
      - name: php-redis
        image: us-docker.pkg.dev/google-samples/containers/gke/gb-frontend:v5

2. 查看已经创建的replicaset

kubectl get replicaset

3. 原本frontend replicaset 创建是3个pod, 现在使用命令行改成5个

kubectl scale --replicas=5 replicaset/frontend

4. 删除已创建好的replicaset

kubectl delete replicaset frontend

解释Replicaset的yaml结构

使用Replicaset的缺点

1. 无法rolling update与rollback
ReplicaSet 只负责创建或删除 Pod,以保证副本数与目标一致,但并不支持渐进式地逐步替换旧版 Pod,因此无法实​​现零停机的滚动更新,也无法自动回滚到之前的稳定版本。
举例:我的replicaset原本使用image 是v1的,但是我改了v2,这个使用正在开着的pod是不会更新成v2版本的,只有把pod是scale改成0,然后再改成你要的数量才会重新拉去最新的image版本

    2. 会无端端接管符合match label的pod
    凡是符合match label的pod都会被replicaset接管


    举例1:我原本已经创建了pod并且label是app=test-app , 这个时候我创建了新的replicaset指定的match label是app=test-app,数量是3个,接着kubernetes只会创建2个而已,已经原本是第一个pod已经被这个replicaset接管了。

    举例2:延续举例1的情况,这个时候我删除了这个replicaset,那么毫无相关的pod (我一开始手动创建的pod) 也会一并被删除, 已经这个毫无相关的pod刚好被replicaset match label了,所以也被一并接管

    Loading

    Facebook评论