《關於我怎麼把一年內學到的新手 IT/SRE 濃縮到 30 天筆記這檔事》 Day 11 Kubernetes - 組建真正的服務吧(一)

本篇大綱

邁向真正的要組合服務了,今天我們先來從 Deployment 來測試起,來試試 Service 有沒有達到負載平衡的效果。

內文

我們先來建立只有顯示 Hostname 的 Deployment,我把 Docker image 下載回來本機查詢他有 Expose 9376 的 Port,因此 containerPort 就是 9376。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 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 把設定檔套用進去:

1
kubectl apply -f . # 把當前資料夾的檔案 YAML 套用進去

day11-01.png

方便確認,可以用 kubectl get all 確認服務有沒有上去:

1
kubectl get all # 檢查 Pod Service Deployment ReplicaSet

day11-02.png

根據 Service 內容得知,我們設定為 NodePort 30000,因此可以知道我在內網裡面可以直接連 Worker node 的 30000 Port,就可以進去此服務。

那我們就可以用 curl 來測試個五次:

1
curl http://192.168.200.102:30000

day11-03.png

有顯示 Hostname 就代表成功了,系統會顯示 Pod 的名稱。

那我們就來試著 replica 開多一點,幾種方式可以修改:

  1. 修改完 hostname-deploy.yaml 再 apply 一次。
  2. kubectl edit 直接編輯 Deployment,replicas 數量調高。
  3. kubectl scale 把 Deployment 擴充。
1
2
3
4
5
6
7
8
# 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

day11-04.png

那我們就可以再來用 curl 來測試個十次:

1
curl http://192.168.200.102:30000

day11-05.png

就會發現後面每次接的 Pod 不見得都是同一個,證明 Service 有做到簡單的負載平衡,連線到各自不同的 Pod。

那我們就把他刪除掉結束這個實驗:

1
kubectl delete -f .

day11-06.png

下一篇我會來介紹,如何使用 Deployment + Secret + EmptyDir 架設 Wordpress + MySQL。

本系列內容也會同步貼到我的 iT 邦幫忙 https://ithelp.ithome.com.tw/users/20112934 歡迎來點一下追蹤,那我們就下一篇文章見啦!

Source


《關於我怎麼把一年內學到的新手 IT/SRE 濃縮到 30 天筆記這檔事》 Day 11 Kubernetes - 組建真正的服務吧(一)
https://blog.yangjerry.tw/2022/09/26/it2022-day11/
作者
Jerry Yang
發布於
2022年9月26日
許可協議