前面都是直接實作,我們現在要來談談K8S的兩大主力,deployment 跟 service。
首先是 deployment,他是用來定義pods跟 replica set的
我們直接看檔案
apiVersion: apps/v1
kind: Deployment
metadata:
name: ecsdemo-nodejs
labels:
app: ecsdemo-nodejs
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: ecsdemo-nodejs
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
labels:
app: ecsdemo-nodejs
spec:
containers:
- image: brentley/ecsdemo-nodejs:latest
imagePullPolicy: Always
name: ecsdemo-nodejs
ports:
- containerPort: 3000
protocol: TCP
apiVersion指的是K8S的版本號
metadata - name 指的是這個pod的名稱
metadata - label 是K8S核心元件,K8s 會透過 Label Selector
將Pod分群管理
metadata - annotations 跟label很像,但是給外部查找用的。有點像是runner標籤。通常會是版本號或發佈日期
spec是定義container,如果你有兩個container你也可以這樣寫
範例
spec:
containers:
- name: front-end
image: nginx
ports:
- containerPort: 80
- name: rss-reader
image: nickchase/rss-php-nginx:v1
ports:
- containerPort: 88
spec replicas 這是管理一群pods的replicas。設定的方法我們又稱作ReplicaSet。如果replicas:2,代表的是不碖哪個pod要被deploy,我都希望他有兩個replicas。但你如果只這樣設定,他並不知道你要怎樣的replica,所以我們要在詳細描述。你會發現看起來很眼熟,沒錯,他跟你單獨定義pods很像。
spec - template 是定義哪些物件被replica
spec - label 。這邊我們在Deployment跟 template都有定義app:web,並且在selector定義了matchLabels。指的是我們指定哪些對像是部署的一部分
spec - container - imagePullPolicy 每當K8s啟動pod時,會去檢查container的repo,並將名稱解攜為摘要。如果k8s有容器image且摘要有在本地緩存,K8s會使用其緩存的image。如果沒有就會重新拉
上面是deployment的檔案介紹,如果你想啟用這份deployment檔案,我們可以輸入指令
kubectl apply -f kubernetes/deployment.yaml