邁向真正的要組合服務了,今天我們先來從 Deployment 來測試起,來試試 Service 有沒有達到負載平衡的效果。
我們先來建立只有顯示 Hostname 的 Deployment,我把 Docker image 下載回來本機查詢他有 Expose 9376 的 Port,因此 containerPort 就是 9376。
# 1. Save as `hostname-deploy.yaml`
# 2. In bash, `kubectl apply -f hostname-deploy.yaml`
# 3. If you want to remove, `kubectl delete -f hostname-deploy.yaml`
apiVersion: apps/v1
kind: Deployment
metadata:
name: hostname-deployment
labels:
app: hostname
spec:
replicas: 1
selector:
matchLabels:
app: hostname
template:
metadata:
labels:
app: hostname
spec:
containers:
- name: hostname
image: gcr.io/kubernetes-e2e-test-images/serve-hostname:1.1
ports:
- containerPort: 9376
再來是建立 Service,為了 Demo 方便,我這裡會使用 NodePort。
# 1. Save as `hostname-svc.yaml`
# 2. In bash, `kubectl apply -f hostname-svc.yaml`
# 3. If you want to remove, `kubectl delete -f hostname-svc.yaml`
apiVersion: v1
kind: Service
metadata:
name: hostname-svc # Service 的名字
labels:
app: hostname
spec:
type: NodePort # Worker node port 出去
selector:
app: hostname # 對應 Pod 的標籤
ports:
- protocol: TCP # 可以選擇 TCP 跟 UDP
port: 80 # 對 service 要 expose 的 port
targetPort: 9376 # 對應 Pod 的 containerPort
nodePort: 30000 # Worker node 開的 port number
那我們就輸入 apply 把設定檔套用進去:
kubectl apply -f . # 把當前資料夾的檔案 YAML 套用進去
方便確認,可以用 kubectl get all
確認服務有沒有上去:
kubectl get all # 檢查 Pod Service Deployment ReplicaSet
根據 Service 內容得知,我們設定為 NodePort 30000,因此可以知道我在內網裡面可以直接連 Worker node 的 30000 Port,就可以進去此服務。
那我們就可以用 curl
來測試個五次:
curl http://192.168.200.102:30000
有顯示 Hostname 就代表成功了,系統會顯示 Pod 的名稱。
那我們就來試著 replica 開多一點,幾種方式可以修改:
hostname-deploy.yaml
再 apply 一次。kubectl edit
直接編輯 Deployment,replicas
數量調高。kubectl scale
把 Deployment 擴充。# 1.
vim hostname-deploy.yaml
kubectl apply -f hostname-deploy.yaml
# 2.
kubectl edit deploy hostname-deployment
# 找到 replicas 欄位,把數量調高
# 3.
kubectl scale --replicas=3 deploy/hostname-deployment
那我們就可以再來用 curl
來測試個十次:
curl http://192.168.200.102:30000
就會發現後面每次接的 Pod 不見得都是同一個,證明 Service 有做到簡單的負載平衡,連線到各自不同的 Pod。
那我們就把他刪除掉結束這個實驗:
kubectl delete -f .
下一篇我會來介紹,如何使用 Deployment + Secret + EmptyDir 架設 Wordpress + MySQL。
本系列內容也會同步貼到我的 Blog https://blog.yangjerry.tw 歡迎來我的 Blog 點一下 RSS 追蹤,那我們就下一篇文章見啦!