iT邦幫忙

2023 iThome 鐵人賽

DAY 29
0
Cloud Native

docker系列 第 29

Day29 ReplicaSet & Deployment

  • 分享至 

  • xImage
  •  

Kubernetes 中,有一個比 Pod 更進階的元件叫做 ReplicaSet,這是一群 Pod 的複製人,讓服務可以不單打獨鬥,可以有多個相同服務共同分擔。
要將服務從原本的 Pod 變成 ReplicaSet,我們像下面這個 YAML 檔一樣:

# replicaset-example.yaml

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: ubuntu-replicaset
spec:
  replicas: 5
  minReadySeconds: 10
  selector:
    matchLabels:
      app: ubuntu-pod
  template:
    metadata:
      name: ubuntu-replicaset
      labels:
        app: ubuntu-pod
    spec:
      containers:
        - name: ubuntu
          image: ubuntu:20.04
          args:
            [
              bash,
              -c,
              'for ((i = 0; ; i++)); do echo "$i: $(date)"; sleep 100; done',
            ]

這樣就可以將 ReplicaSet 部署起來。ReplicaSet 由 kube-controller-manager 監測 selector 標籤,將具有指定標籤的 Pod 維護至預期的數量。一旦少了 Pod,ReplicaSet 會自動補上。
你可以使用以下指令查看 ReplicaSet 的狀態:

kubectl get replicaset
# 或
kubectl get rs

如果手動刪除其中幾個 Pod,你會發現 ReplicaSet 會自動將缺少的 Pod 補回來。
然而,如果我們想要更新服務,只有使用 ReplicaSet 可能還不夠方便。這時 Kubernetes 提供了 Deployment 元件,可以同時維護多個 ReplicaSet。使用 Deployment,你可以透過指令更新服務,Kubernetes 會自動將服務在不中斷的情況下過渡到新的狀態。
以下是使用 Deployment 的 YAML 檔案範例:

# deployment-example.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: ubuntu-deployment
  labels:
    app: ubuntu-deployment
spec:
  replicas: 5
  strategy:
    rollingUpdate:
      maxUnavailable: 1
  selector:
    matchLabels:
      app: ubuntu-pod
  template:
    metadata:
      name: ubuntu-deployment
      labels:
        app: ubuntu-pod
    spec:
      containers:
        - name: ubuntu
          image: ubuntu:20.04
          args:
            [
              bash,
              -c,
              'for ((i = 0; ; i++)); do echo "$i: $(date)"; sleep 100; done',
            ]

Deployment 多了一個 strategy 選項,讓你可以選擇更新時的策略,以確保在任何情況下都有數個服務在線,避免服務中斷。
你可以使用以下指令查看 Deployment 的狀態:

kubectl get deployment
# 或
kubectl get deploy

上一篇
Day 28 Volume, PersistentVolume & PersistentVolumeClaim
下一篇
Day30 Ingress
系列文
docker30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言