為了減少您對業務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
通過容器服務管理控制臺
登錄容器計算服務控制臺。
在集群頁面,找到目標集群,單擊集群名稱。
在集群管理頁的左側導航欄,選擇配置管理>配置項。
選擇命名空間為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=testing
Label,則該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: 80
Deployment創建完成后,查看Pod信息如下圖所示。