ACK Edge是業界首個非侵入的邊緣計算雲原生產品服務,為了給您提供雲邊一體化的使用體驗,通過InClusterConfig訪問kube-apiserver的業務Pod,無需任何修改,可以直接被部署到邊緣環境。本文介紹如何在邊緣情境無縫運行使用InClusterConfig的業務Pod。
背景資訊
當需要把原生Kubernetes中,通過InClusterConfig(即Kubernetes Service)訪問kube-apiserver的業務Pod部署到邊緣環境中,會出現以下問題:
問題一:Pod通過InClusterConfig地址訪問kube-apiserver,節點上預設網路規則(iptables/ipvs)將會把請求轉寄到kube-apiserver的Pod IP,同時雲端與邊緣位於不同網路平面,邊緣是無法訪問到雲端的Pod IP。所以邊緣業務Pod無法通過InClusterConfig訪問到kube-apiserver。
問題二:在解決問題一後,如果雲邊網路斷開時業務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}目錄下是否有對應的資料。