全部產品
Search
文件中心

Container Compute Service:配置acs-profile實現Pod配置自動注入

更新時間:Jan 15, 2025

為了減少您對業務YAML的改動,ACS支援acs-profile功能,可以提供叢集維度資源檢視。本文介紹如何配置acs-profile。

功能介紹

acs-profile支援Pod配置自動注入,其中包含了交換器、安全性群組、網域名稱解析模式等叢集維度配置,您可以根據需要進行更新:

  • 更新配置時無需重啟acs-virtual-node組件。

  • 對於新建立的ACS Pod,可以即時生效更新後的配置;對於存量ACS Pod,需要滾動發布後才會生效更新後的配置。

配置說明

建立Pod時,系統會讀取kube-system命名空間下的acs-profile設定檔(名為acs-profile的ConfigMap),並按照檔案中的配置來建立Pod。您可以通過以下命令查看acs-profile的YAML。

kubectl get cm -n kube-system acs-profile -o yaml

YAML內容如下:

apiVersion: v1
kind: ConfigMap
metadata:
  name: acs-profile
  namespace: kube-system
data:
  enablePrivateZone: "false"
  securityGroupId: sg-2zeeyaaxlkq9sppl****
  vSwitchIds: vsw-2ze23nqzig8inprou****,vsw-2ze94pjtfuj9vaymf****
  vpcId: vpc-2zeghwzptn5zii0w7****
  selectors: ""

修改acs-profile的方式如下:

  • 通過kubectl edit命令

    kubectl edit configmap acs-profile -n kube-system
  • 通過容器計算服務管理主控台

    1. 登入容器計算服務控制台

    2. 叢集列表頁面,單擊目的地組群名稱,進入該叢集的管理頁面。

    3. 在叢集管理頁的左側導覽列,選擇組態管理>配置項

    4. 選擇命名空間為kube-system

    5. 找到acs-profile,單擊YAML編輯

說明

如果修改acs-profile中的某項配置後,檔案存在格式錯誤,修改的配置將不會生效,具體的錯誤資訊會儲存到event中,您可以通過以下kubectl命令查看

kubectl -n kube-system get event --field-selector involvedObject.namespace=kube-system,involvedObject.name=acs-profile

更新叢集配置項

acs-profile中包含了vpcId、vSwitchIds等叢集配置項對應VPC、交換器等資訊,您可以根據需要進行更新,更新後的配置可以即時生效(熱更新)。支援更新的配置項如下:

配置項

樣本值

說明

securityGroupId

sg-2ze0b9o8pjjzts4h****

ACS Pod所屬安全性群組。

vSwitchIds

vsw-2zeet2ksvw7f14ryz****

ACS Pod所屬交換器。可配置多個,用半形逗號間隔。

vpcId

vpc-2zeghwzptn5zii0w7****

ACS Pod所屬VPC。

enablePrivateZone

"false"

是否使用PrivateZone進行網域名稱解析。

說明

上述配置項均為叢集層級的預設配置項,如果在建立ACS Pod時沒有特別修改和覆蓋某些參數,系統將會採用acs-profile中預先設定的預設配置。

配置Selectors

建立Pod時,系統會按照Selectors去匹配Pod,對於Label能夠匹配上的Pod,會自動追加Annotation和Label,以便生效ACS Pod的功能特性。

Selectors中可以包含多個Selector,在每個Selector中,您必須聲明Selector的name,配置格式如下:

配置項

說明

name

Selector名稱,必填不可為空。

namespaceSelector

通過Namespace Label篩選Pod。

namespaceSelector.matchLabels

通過{key,value}格式描述匹配規則。

namespaceSelector.matchExpressions

通過選擇運算子列表描述匹配規則。

有效運算子包括InNotInExistsDoesNotExist。 在InNotIn的情況下,設定的值必須是非空的。

objectSelector

通過Pod Label篩選。

objectSelector.matchLabels

通過{key,value}格式描述匹配規則。

objectSelector.matchExpressions

通過選擇運算子列表描述匹配規則。

有效運算子包括InNotInExistsDoesNotExist。 在InNotIn的情況下,設定的值必須是非空的。

effect

要動態追加的Annotation和Label。

Selectors的配置模板如下:

apiVersion: v1
kind: ConfigMap
metadata:
  name: acs-profile
  namespace: kube-system
data:
  selectors: |
    [
      {
        "name": "selector-demo1",
        "namespaceSelector": {
          "matchLabels": {
            "kubernetes.io/metadata.name": "dev-ns"
          }
        },
        "objectSelector": {
          "matchLabels": {
            "acs": "true"
          },
          "matchExpressions": [
            {
              "key": "usage",
              "operator": "In",
              "values": ["testing"]
            }
          ]
        },
        "effect": {
          "annotations": {
            "network.alibabacloud.com/custom-dnsconfig": "{\"servers\":[\"114.114.114.114\",\"8.8.8.8\"],\"searches\":[\"xx.com\",\"yy.com\"],\"options\":[\"ndots:2\",\"edns0\"]}"
          },
          "labels": {
            "created-by-acs": "true"
          }
        }
      }
    ]

上述模板中,名為selector-demo1的Selector可以實現以下功能:

如果Pod所屬命名空間為dev-ns,並且Pod本身含有acs=trueusage=testingLabel,則該Pod會自動增加network.alibabacloud.com/custom-dnsconfig="{\"servers\":[\"114.114.114.114\",\"8.8.8.8\"],\"searches\":[\"xx.com\",\"yy.com\"],\"options\":[\"ndots:2\",\"edns0\"]}"的Annotation,以及created-by-acs=true 的Label。

重要

為了確保精確匹配,建議您在一個Selector中至少配置namespaceSelectorobjectSelector中的一個。如果兩者同時配置,則Pod需要同時滿足兩種條件才可以成功匹配;如果兩者都不配置,則該effect將作用於叢集內所有的ACS Pod,可能會導致不必要的影響。

如果同時配置了多個Selector,ACS將按照順序匹配。成功匹配某個Selector後,會自動將該Selector中effect聲明的Annotation和Label追加到Pod中,不會覆蓋Pod原有的值。如存在重複的Annotation和Label,作用的優先順序如下:

Pod原有的聲明值。

最先被匹配上的Selector中effect聲明的值。

後續匹配的Selector中effect聲明的值。

示範樣本

  1. 使用以下內容,建立一個符合selector-demo1條件的Deployment。具體步驟,請參見使用YAML建立

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx
      namespace: dev-ns
      labels:
        acs: "true"
        usage: "testing"
    spec:
      containers:
      - name: nginx
        image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
        command: ["sleep", "infinity"]
        ports:
        - containerPort: 80
  2. Deployment建立完成後,查看Pod資訊如下圖所示。

    image