Deployment 可以達成以下幾件事情:
# 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
如果使用 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
其他參數參考:
successThreshold
: 設置訪問幾次就代表目前服務還正常運行failureThreshold
: 代表服務回傳不如預期時,在 Kubernetes 放棄該 Container 之前,會嘗試的次數,預設為3次httpGet.path
: 設定 health checks 要訪問的路徑httpGet.port
: 指定我們要訪問的 port