iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 13
0
IoT

從開源kubernetes雲端運算到kubeedge雲邊協同系列 第 13

Day 13: KubeEdge與Service(使用cluster-ip)

  • 分享至 

  • xImage
  •  

用過Kubernetes的人應該都會知道Service服務的好處。在前幾天我們試過用deployments管理多個Pod,而service就是一個接口可以讓外部的服務透過這個接口存取到後面的Pod。有了service管理可以省掉很多事情,想想看使用deployments管理Pod時,如果Pod重啟的話就會換一組cluster-ip,這樣如果你透過cluster-ip去連接到後面的Pod進行服務,就會受到cluster-ip變動的影響,當你用了service後他就會固定指向deployment底下的Pod,不會受到ip改變的影響。
我們以下面的YAML為例子:

# k8s-nginx-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: k8s-nginx-deploy
  namespace: default
  labels:
    app: k8s-nginx-deploy
spec:
  replicas: 3
  selector:
    matchLabels:
      app: k8s-nginx-deploy
  template:
    metadata:
      labels:
        app: k8s-nginx-deploy
    spec:
      containers:
      - image: nginx:latest
        name: nginx
        ports:
        - containerPort: 80
      nodeSelector:
        name: k8s-node02
---
apiVersion: v1
kind: Service
metadata:
  name: k8s-nginx-service # service的名字
spec:
  selector:
    app: k8s-nginx-deploy # 指定有哪些tag的Pod可以提供服務
  ports:
    - name: http #幫這個port取一個名字
      port: 7777 #給定這個service對應出來的port
      targetPort: 80 #給定由Pod對應出來的port
      protocol: TCP #連線類型,提供TCP以及UDP

在26~37行部份新增了Service的設定。在這部份的設定中,selector指定了有這些標籤的Pod提供服務,所以不會受到Pod cluster-IP的變動影響(由deployment重啟的Pod其標籤不變)

kuebctl apply -f k8s-nginx-deploy.yaml


這裡我們可以看到Pod部屬完成後,以及service的狀態:

可以看到新增了一個名為k8s-nginx-service的服務,他的使用方式也很簡單:

用service的cluster-ip以及他的port就可以連線。

那同樣好用的東西在KubeEdge上能不能用呢?我們在KubeEdge上面再做一次同樣的實驗:

# edge-nginx-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: kubeedge-nginx-deploy
  namespace: default
  labels:
    app: kubeedge-nginx-deploy
spec:
  replicas: 3
  selector:
    matchLabels:
      app: kubeedge-nginx-deploy
  template:
    metadata:
      labels:
        app: kubeedge-nginx-deploy
    spec:
      containers:
      - image: nginx:latest
        name: nginx
        ports:
        - containerPort: 80
      nodeSelector:
        name: edge
---
apiVersion: v1
kind: Service
metadata:
  name: kubeedge-nginx-service
spec:
  selector:
    app: kubeedge-nginx-deploy
  ports:
    - name: http
      port: 6666
      targetPort: 80
      protocol: TCP
kuebctl apply -f edge-nginx-deploy.yaml


確認過服務跟Pod有正常運行後,我們試試看:

curl 10.109.63.238:6666


由此可知KubeEdge沒辦法用Service。


上一篇
Day 12 KubeEdge 容器網路: Host port
下一篇
Day 14 KubeEdge與Service應用(使用NodePort)
系列文
從開源kubernetes雲端運算到kubeedge雲邊協同30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言