すべてのプロダクト
Search
ドキュメントセンター

Container Compute Service:Pod構成の自動挿入のためのacs-profileの設定

最終更新日:Jan 15, 2025

YAMLファイルの変更を最小限に抑えるために、Alibaba Cloud Container Compute Service(ACS)は acs-profile 機能を提供しています。 acs-profile は、クラスターレベルでリソースビューを提供します。このトピックでは、acs-profile を設定する方法について説明します。

機能の説明

acs-profile は、Pod構成を自動的に挿入できます。構成には、vSwitch、セキュリティグループ、およびドメイン名解決モードが含まれます。ビジネス要件に基づいて構成を更新できます。

  • 構成を更新するために acs-virtual-node コンポーネントを再起動する必要はありません。

  • 更新された構成は、新しく作成された ACS Pod にすぐに適用されますが、既存の ACS Pod には、Pod でローリングリリースが実行された後にのみ適用されます。

手順

システムがPodを作成すると、システムは kube-system 名前空間の acs-profile 構成ファイル(ConfigMap という名前の acs-profile)を読み取ります。次に、システムは構成ファイルの構成に基づいて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
  • ACSコンソールを使用する

    1. ACSコンソール にログオンします。

    2. [クラスター] で、クラスターの名前をクリックして、クラスター管理ページに移動します。

    3. クラスター管理ページの左側のナビゲーションペインで、[構成 > Configmap] を選択します。

    4. 名前空間ドロップダウンリストから [kube-system] を選択します。

    5. acs-profile を見つけて、[YAMLを編集] をクリックします。

説明

acs-profile の構成を変更した後にファイルにフォーマットエラーが存在する場合、構成は有効になりません。エラー情報はイベントに保存されます。次の kubectl コマンドを使用して、エラー情報を表示できます。

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

クラスターパラメーターの更新

acs-profile には、クラスターパラメーターが含まれています。たとえば、vpcId パラメーターは、Pod がデプロイされる仮想プライベートクラウド(VPC)を指定します。 vSwitchIds パラメーターは、Pod に関連付けられている vSwitch を指定します。ビジネス要件に基づいて、必要なパラメーターを更新できます。更新された構成はすぐに有効になります。次の表に、更新できるパラメーターを示します。

パラメーター

説明

securityGroupId

sg-2ze0b9o8pjjzts4h****

ACS Pod が属するセキュリティグループ。

vSwitchIds

vsw-2zeet2ksvw7f14ryz****

ACS Pod が関連付けられている vSwitch の ID。 vSwitch ID はコンマ(,)で区切ります。

vpcId

vpc-2zeghwzptn5zii0w7****

ACS Pod がデプロイされる VPC の ID。

enablePrivateZone

"false"

PrivateZone を使用してドメイン名を解決するかどうかを指定します。

説明

上記のパラメーターは、クラスターレベルのデフォルト構成です。 ACS Pod を作成するときにパラメーターを変更または上書きしない場合、システムは acs-profile で指定された組み込みのデフォルト構成を使用します。

セレクターの設定

システムがPodを作成すると、システムはセレクターに基づいてPodを照合します。 Pod にセレクターに対応するラベルがある場合、指定されたアノテーションとラベルが Pod に追加され、ACS Pod の機能が有効になります。

selectors パラメーターには複数のセレクターを設定できます。各セレクターの名前を指定する必要があります。例:

パラメーター

説明

name

セレクターの名前。このパラメーターは必須です。

namespaceSelector

名前空間のラベルを使用して Pod をフィルタリングします。

namespaceSelector.matchLabels

一致ルールは、{key,value} 形式で記述されます。

namespaceSelector.matchExpressions

Podセレクター要件のリストを使用して、一致ルールを記述します。

Pod セレクター要件のリストを使用して、一致ルールを記述します。 有効な演算子には、InNotInExists、および DoesNotExist が含まれます。 In 演算子と NotIn 演算子に指定する値は空であってはなりません。

objectSelector

Pod のラベルを使用して Pod をフィルタリングします。

objectSelector.matchLabels

一致ルールは、{key,value} 形式で記述されます。

objectSelector.matchExpressions

ポッドセレクター要件のリストを使用して、一致ルールを記述します。

Pod セレクター要件のリストを使用して、一致ルールを記述します。 有効な演算子には、InNotInExists、および DoesNotExist が含まれます。 In 演算子と NotIn 演算子に指定する値は空であってはなりません。

effect

Pod に動的に追加するアノテーションとラベル。

セレクターの構成テンプレート:

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 という名前のセレクターは、次の機能を提供します。

Pod の名前空間が dev-ns で、Pod に acs=true ラベルと usage=testing ラベルが含まれている場合、network.alibabacloud.com/custom-dnsconfig="{\"servers\":[\"114.114.114.114\",\"8.8.8.8\"],\"searches\":[\"xx.com\",\"yy.com\"],\"options\":[\"ndots:2\",\"edns0\"]}" アノテーションと created-by-acs=true ラベルが Pod に自動的に追加されます。

重要

完全に一致させるために、セレクターごとに namespaceSelector パラメーターと objectSelector パラメーターの少なくとも一方を設定することをお勧めします。 namespaceSelector と objectSelector の両方が設定されている場合、Pod は両方のパラメーターの値と一致する必要があります。どちらも設定されていないが、effect パラメーターが設定されている場合、effect 設定はすべての ACS Pod に適用され、不要な影響が生じる可能性があります。

複数のセレクターを設定した場合、セレクターは ACS によって順番に照合されます。 Pod が照合されると、effect 設定で指定されたアノテーションとラベルが Pod に自動的に追加されます。これらのアノテーションとラベルは、Pod の既存のアノテーションとラベルを上書きしません。重複するアノテーションまたはラベルが存在する場合、アノテーションまたはラベルの優先順位は次のとおりです。

Pod の既存のアノテーションとラベル。

最初に一致したセレクターの effect 設定で指定されたアノテーションとラベル。

後続で一致したセレクターの 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