為了減少您對業務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 yamlYAML內容如下:
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通過容器計算服務管理主控台
登入容器計算服務控制台。
在叢集列表頁面,單擊目的地組群名稱,進入該叢集的管理頁面。
在叢集管理頁的左側導覽列,選擇組態管理>配置項。
選擇命名空間為kube-system。
找到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、交換器等資訊,您可以根據需要進行更新,更新後的配置可以即時生效(熱更新)。支援更新的配置項如下:
配置項 | 樣本值 | 說明 |
|
| ACS Pod所屬安全性群組。 |
|
| ACS Pod所屬交換器。可配置多個,用半形逗號間隔。 |
|
| ACS Pod所屬VPC。 |
|
| 是否使用PrivateZone進行網域名稱解析。 |
上述配置項均為叢集層級的預設配置項,如果在建立ACS Pod時沒有特別修改和覆蓋某些參數,系統將會採用acs-profile中預先設定的預設配置。
配置Selectors
建立Pod時,系統會按照Selectors去匹配Pod,對於Label能夠匹配上的Pod,會自動追加Annotation和Label,以便生效ACS Pod的功能特性。
Selectors中可以包含多個Selector,在每個Selector中,您必須聲明Selector的name,配置格式如下:
配置項 | 說明 |
| Selector名稱,必填不可為空。 |
| 通過Namespace Label篩選Pod。 |
| 通過 |
| 通過選擇運算子列表描述匹配規則。 有效運算子包括 |
| 通過Pod Label篩選。 |
| 通過 |
| 通過選擇運算子列表描述匹配規則。 有效運算子包括 |
| 要動態追加的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=true和usage=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中至少配置namespaceSelector或objectSelector中的一個。如果兩者同時配置,則Pod需要同時滿足兩種條件才可以成功匹配;如果兩者都不配置,則該effect將作用於叢集內所有的ACS Pod,可能會導致不必要的影響。
如果同時配置了多個Selector,ACS將按照順序匹配。成功匹配某個Selector後,會自動將該Selector中effect聲明的Annotation和Label追加到Pod中,不會覆蓋Pod原有的值。如存在重複的Annotation和Label,作用的優先順序如下:
Pod原有的聲明值。
最先被匹配上的Selector中effect聲明的值。
後續匹配的Selector中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資訊如下圖所示。
