ACK Edge是業界首個非侵入的邊緣計算雲原生產品服務,旨在為您提供雲邊一體化的使用體驗,使用InClusterConfig訪問kube-apiserver的業務Pod無需進行任何修改,即可直接部署到邊緣環境。本文將介紹如何在邊緣情境中無縫運行使用InClusterConfig的業務Pod。
背景資訊
當需要把原生Kubernetes中,通過InClusterConfig(即Kubernetes Service)訪問kube-apiserver的業務Pod部署到邊緣環境中,會出現以下問題:
問題一:Pod通過InClusterConfig地址訪問kube-apiserver,由於雲端與邊緣位於不同網路平面,邊緣業務Pod無法訪問到雲端的Pod IP。
問題二:在解決問題一後,如果雲邊網路斷開,業務Pod容器重啟時,邊緣Pod將無法從kube-apiserver擷取業務配置,影響到業務Pod重啟運行。
關於從Pod訪問API的更多資訊,請參見從Pod中訪問API。
解決方案
通過邊緣節點上的edge-hub非侵入的ACK Edge服務,可以解決上述問題,讓使用InClusterConfig的業務Pod無需修改,即可直接運行在邊緣情境。具體說明如下:
在業務Pod無感知狀態下,邊緣Pod的訪問地址(即KUBERNETES_SERVICE_HOST和KUBERNETES_SERVICE_PORT環境變數)會被預設修改為edge-hub的HTTPS Endpoint(即
KUBERNETES_SERVICE_HOST=169.254.2.1,KUBERNETES_SERVICE_PORT=10268)。因此,業務Pod的InClusterConfig會通過edge-hub來訪問kube-apiserver,從而解決上述的問題一。您需要手動開啟edge-hub的資料緩衝能力,這樣即使雲邊斷網,業務Pod重啟時可以從edge-hub中擷取到本機快取資料,從而解決上述的問題二。
關於如何開啟edge-hub的資料緩衝能力,請參見開啟edge-hub的資料緩衝能力。
開啟edge-hub的資料緩衝能力
資料緩衝在本地磁碟,不推薦為有大量list/watch請求的Pod開啟資料緩衝。
開啟edge-hub資料緩衝後,必須重啟對應的業務Pod。
擷取User-Agent資訊。
User-Agent通常是業務容器的啟動命令。
apiVersion: v1 kind: Pod metadata: name: edge-app-pod spec: containers: - name: "edge-app" image: "xxx/edge-app-amd64:1.18.8" command: - /bin/sh - -ec - | # User-Agent即為啟動命令: edge-app。 /usr/local/bin/edge-app --v=2也可通過edge-hub的日誌確認User-Agent資訊,找到類似
{User-Agent} watch {resource}的日誌,如下所示:I0820 07:50:18.899015 1 util.go:221] edge-app get services: /api/v1/services/xxx with status code 200, spent 21.035061152ms開啟edge-hub緩衝能力。
在edge-hub-cfg ConfigMap的cache_agents欄位中增加業務Pod的User-Agent Header以開啟資料緩衝能力。
根據以下YAML樣本,開啟edge-hub緩衝能力:
apiVersion: v1 kind: ConfigMap metadata: name: edge-hub-cfg namespace: kube-system data: # 緩衝邊緣edge-app pod(User-Agent header為edge-app)訪問kube-apiserver的資料。 # 開啟緩衝後,請重啟對應的業務Pod。 cache_agents: "edge-app" # 添加多個組件請用英文半形逗號(,)分隔。確認業務Pod的雲端返回資料緩衝是否生效。
在業務Pod啟動並執行節點上,查看/etc/kubernetes/cache/{User-Agent}目錄下是否有資料。