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-systemACSコンソールを使用する
ACSコンソール にログオンします。
[クラスター] で、クラスターの名前をクリックして、クラスター管理ページに移動します。
クラスター管理ページの左側のナビゲーションペインで、[構成 > Configmap] を選択します。
名前空間ドロップダウンリストから [kube-system] を選択します。
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 を指定します。ビジネス要件に基づいて、必要なパラメーターを更新できます。更新された構成はすぐに有効になります。次の表に、更新できるパラメーターを示します。
パラメーター | 例 | 説明 |
|
| ACS Pod が属するセキュリティグループ。 |
|
| ACS Pod が関連付けられている vSwitch の ID。 vSwitch ID はコンマ(,)で区切ります。 |
|
| ACS Pod がデプロイされる VPC の ID。 |
|
| PrivateZone を使用してドメイン名を解決するかどうかを指定します。 |
上記のパラメーターは、クラスターレベルのデフォルト構成です。 ACS Pod を作成するときにパラメーターを変更または上書きしない場合、システムは acs-profile で指定された組み込みのデフォルト構成を使用します。
セレクターの設定
システムがPodを作成すると、システムはセレクターに基づいてPodを照合します。 Pod にセレクターに対応するラベルがある場合、指定されたアノテーションとラベルが Pod に追加され、ACS Pod の機能が有効になります。
selectors パラメーターには複数のセレクターを設定できます。各セレクターの名前を指定する必要があります。例:
パラメーター | 説明 |
| セレクターの名前。このパラメーターは必須です。 |
| 名前空間のラベルを使用して Pod をフィルタリングします。 |
| 一致ルールは、 |
| Podセレクター要件のリストを使用して、一致ルールを記述します。 Pod セレクター要件のリストを使用して、一致ルールを記述します。 有効な演算子には、 |
| Pod のラベルを使用して Pod をフィルタリングします。 |
| 一致ルールは、 |
| ポッドセレクター要件のリストを使用して、一致ルールを記述します。 Pod セレクター要件のリストを使用して、一致ルールを記述します。 有効な演算子には、 |
| 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 設定で指定されたアノテーションとラベル。
例
次のコンテンツを使用して、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: 80Deployment を作成すると、次の図に示すように、Pod 情報が表示されます。
