昨天提到了如何建立Kubernetes的最小單位Pod,那如果我們今天想要建立多個相同的Pod,以重複執行相同的任務,亦,或是避免部分的Pods掛掉後,服務因此而終止,那該如何做到呢?
在Kubernetes早期的版本中,如果我們想要讓系統自動地將相同的Pod維持在某個數量,需要用到ReplicationController,而在現在的主流的做法是Deployment,我們可以先來看看它的YAML是怎麼寫~
apiVersion: v1
kind: ReplicationController
metadata:
name: nginx
spec:
replicas: 3
selector:
app: nginx
template:
metadata:
name: nginx
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
我們從上面從官網找到的範例可以發現,也是有存在昨天提到的必要的四個欄位apiVersion, kind, metadata, spec,那我們接下來談談昨天沒提到的欄位~
此外,如果在YAML中看到"-"這個符號,這代表這邊的值是個Array,而有"-"的則是這個Array的第一行。
這樣ReplicationController就無法監控這個template所產生的container,進而無法管理其數量。
先來看看範例吧~
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: frontend
labels: # labels A
app: guestbook
tier: frontend
spec:
replicas: 3
selector:
matchLabels:
tier: frontend
template:
metadata:
labels: # labels B
tier: frontend
spec:
containers:
- name: php-redis
image: gcr.io/google_samples/gb-frontend:v3
首先,我們可以看到有兩個地方都有labels,而我有加上labels A, B的註釋,labels A的作用是管理ReplicaSet本身,像是我們今天要用label來找出這個ReplicaSet,就可以用:
# 這邊的 -l 代表label,不確定的話可以用kubectl get --help來確認
kubectl get replicaset -l app=my-nginx
另外我們可以看到在selector中,變成matchLabels,這代表只要符合這些條件的Pod都會受到ReplicaSet所管理。
主要有2:
Labels in Deployment Spec & template
Difference between ReplicaSet and ReplicationController?