iT邦幫忙

2022 iThome 鐵人賽

DAY 11
0

本篇大綱

邁向真正的要組合服務了,今天我們先來從 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 套用進去

https://ithelp.ithome.com.tw/upload/images/20220926/20112934A7niGC9Hid.png

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

kubectl get all # 檢查 Pod Service Deployment ReplicaSet

https://ithelp.ithome.com.tw/upload/images/20220926/20112934BleXhRqf3c.png

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

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

curl http://192.168.200.102:30000

https://ithelp.ithome.com.tw/upload/images/20220926/20112934EupZ0mBnpY.png

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

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

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

https://ithelp.ithome.com.tw/upload/images/20220926/20112934x8t3DiTXLF.png

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

curl http://192.168.200.102:30000

https://ithelp.ithome.com.tw/upload/images/20220926/20112934Oc9Y7mIFxx.png

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

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

kubectl delete -f .

https://ithelp.ithome.com.tw/upload/images/20220926/201129346RvCOzb4I1.png

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

本系列內容也會同步貼到我的 Blog https://blog.yangjerry.tw 歡迎來我的 Blog 點一下 RSS 追蹤,那我們就下一篇文章見啦!

Source


上一篇
Day 10 Kubernetes - Storage & ConfigMap & Secret
下一篇
Day 12 Kubernetes - 組建真正的服務吧(二)
系列文
關於我怎麼把一年內學到的新手 IT/SRE 濃縮到 30 天筆記這檔事30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言