Deployment 可以達成以下幾件事情:

基本YAML file設定

# my-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
spec:
  replicas: 3 # 要啟用的Pod數量
  selector:
    matchLabels:
      app: my-deployment
  template:
    metadata:
      labels:
        app: my-deployment
    spec:
      containers:
      - name: my-pod
        image: application-image:latest # Image name
        ports:
	        - name: app-port # Port name,可直接使用此名稱代替container port連接
            containerPort: 8000
            protocol: TCP

Deployment 也會自動幫我們建立一個 Replication Set 來管理這些 Pods

Health checks

如果使用 Liveness Probe,當錯誤發生時 (無回應或回應錯誤),k8s 會嘗試重新建立 (kill then create) 一個新的容器。

如果使用 Readiness Probe,當錯誤發生時,對應的 Service 物件就會將該容器標示為不可使用,所以任何的需求都不會導向該容器。

# my-deployment.yaml
spec:
	containers:
		- name: my-pod
			...
			livenessProbe:
	      tcpSocket:
	        port: app-port # 要訪問的Port
	      initialDelaySeconds: 15 # 設定當service剛啟動時,要延遲幾秒再開始做health checks
	      periodSeconds: 20 # 每隔幾秒訪問一次,預設值為 10秒
	    readinessProbe:
	      tcpSocket:
	        port: app-port
	      initialDelaySeconds: 5
	      periodSeconds: 10

其他參數參考:

環境變數設定