本文介紹自建Kubernetes集群部署VNode來使用ECI的常見問題。
網絡相關問題
鏡像拉取相關問題
Pod調度相關問題
存儲相關問題
日志和監控相關問題
云上服務如何訪問線下IDC的Pod IP?
如果您使用高速通道(專線)來打通線下和云上網絡,則線下IDC和云上服務之間可以通過邊界路由協議BGP相互學習路由規則,IDC可以將Pod IP的路由信息通過BGP廣播給云上服務,實現云上服務可以訪問線下IDC的Pod IP。具體操作,請參見配置BGP。
線下IDC服務如何訪問云上的Pod IP?
如果您使用高速通道(專線)來打通線下和云上網絡,配置BGP后,線下IDC和云上服務之間可以相互學習路由規則,云上的Pod IP的路由信息可以部署CCM實現自動同步。更多關于CCM的信息,請參見Cloud Controller Manager。
自建K8s集群部署CCM后,可以將K8s的Pod IP路由信息同步到VPC路由表。部署CCM時,請注意以下事項:
需要將K8s集群節點的providerID修改為
<region-id>.<ecs-id>
的格式,例如cn-shanghai.i-ankb8zjh2nzchf*******
。確保Pod IP與節點的Pod CIDR相匹配,即該節點上的Pod IP地址均在該節點定義的Pod CIDR網段內。例如:Calico IPAM需要配置為
host-local
才能使Pod IP與節點的Pod CIDR相匹配。Pod CIDR網段可以在節點的spec信息中查看:
spec: podCIDR: 172.23.XX.0/26 podCIDRs: - 172.23.XX.0/26 providerID: cn-shanghai.i-ankb8zjh2nzchfxxxxxxx
內網域名無法解析怎么辦?
問題描述
云上和線下服務由于無法解析內網域名,導致無法進行業務調用,包括:
云上服務無法解析IDC內網域名
IDC服務無法解析云上PrivateZone域名
解決方案
線下IDC和阿里云VPC分別屬于兩套網絡環境,如果部署在線下IDC和云上的服務都需要通過DNS解析進行業務間調用,您可以配置PrivateZone云解析實現云上和線下服務通過內網域名方式實現相互訪問。具體操作,請參見PrivateZone&VPN網關聯動實現云上訪問云下資源。
線下IDC服務如何訪問云上服務?
問題描述
線下IDC服務通過專線無法訪問阿里云服務,例如IDC通過專線無法訪問云數據庫RDS、對象存儲OSS、日志服務SLS等。
解決方案
您可以通過以下兩種方式解決問題,推薦您使用方案一。
方案一
在云上配置云服務域名,邊界路由器VBR將通過邊界路由協議BGP發布路由給線下IDC。具體操作,請參見訪問云服務。
方案二
配置IDC添加靜態路由,將100.64.0.0/10路由到專線。
使用自建的容器鏡像倉庫無法拉取鏡像,怎么辦?
問題描述
使用自建的容器鏡像倉庫無法拉取鏡像,報錯如下:
解決方案
上述問題可能是因為鏡像倉庫使用的自簽發的證書,拉取鏡像時無法通過證書認證導致。在創建Pod時,您可以添加以下Annotation來跳過證書認證:
"k8s.aliyun.com/insecure-registry": "<host-name>"
例如:假設私有鏡像倉庫中的Nginx鏡像的鏈接為test.example.com/test/nginx:apline
,則可以添加"k8s.aliyun.com/insecure-registry": "test.example.com"
的Annotation來跳過證書認證。
如何調度Pod到VNode?
您可以根據業務需要選擇合適的方式將Pod調度到VNode,即在ECI上運行Pod。常用方式如下:
手動調度
通過配置nodeSelector和tolerations、指定nodeName的方式,可以手動將Pod調度到VNode。具體操作,請參見將Pod調度到VNode。
自動調度
部署eci-profile組件后,可以自定義配置Selector,將滿足條件的Pod自動調度到VNode。具體操作,請參見使用eci-profile調度Pod到VNode。
為什么DaemonSet Pod調度到VNode后一直是Pending狀態?
由于VNode不是真實節點,并不支持DaemonSet,因此在創建DaemonSet時,您需要配置反親和性調度策略,禁止DaemonSet Pod調度到VNode上。配置示例如下:
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: type
operator: NotIn
values:
- virtual-kubelet
使用配置Pod Label的方式調度Pod到VNode,為什么調度失?。?/h2>
使用配置Pod Label的方式調度Pod到VNode時,需要確保K8s版本為1.16及以上版本。
掛載NAS目錄超時,怎么辦?
問題原因
由于K8s的工作流程是掛載NAS后按照Pod指定的權限及歸屬,對相應NAS目錄中的文件遞歸執行chmod/chown操作,因此如果NAS目錄中文件較多,且在創建Pod時在安全上下文中配置了文件的權限及歸屬時,會產生NAS Volume掛載超時的問題。
解決方案
配置安全上下文時,將fsGroupChangePolicy配置為OnRootMismatch,實現當NAS中根目錄權限及歸屬與Pod預期匹配時,跳過chmod/chown操作。更多信息,請參見為Pod或容器配置安全上下文。
如何采集日志到阿里云日志服務SLS?
您可以在自建Kubernetes集群上安裝Logtail組件(即安裝alibaba-log-controller組件),以實現采集日志到SLS。在安裝Logtail組件過程中,系統將自動完成以下操作:
創建alibaba-log-configuration ConfigMap,該ConfigMap中包含日志服務配置信息,例如Project等。
(可選)創建AliyunLogConfig CRD資源。
(可選)部署alibaba-log-controller Deployment,用于監聽AliyunLogConfig CRD資源的變更、創建Logtail采集配置。
部署logtail-ds Daemonset,用于采集節點的日志。
具體操作,請參見安裝Logtail組件。
如果您的集群版本較低(例如1.13),請獲取并部署早期版本的日志采集CRD(下載鏈接為alibaba-cloud-log-0.1.1)。如果還有其他問題,請提交工單。
metrics-server報404錯誤,如何處理?
目前VNode支持0.5.x及以下版本的metrics-server,如果出現404報錯,請嘗試降低metrics-server的版本。
從0.6.x版本開始,metrics-server獲取node metrics信息時,由/stats/summary
切換到了/metrics/resource
,VNode暫時不支持/metrics/resource API。
通常情況下,metrics-server的啟動參數如下:
- --cert-dir=/tmp
- --secure-port=4443
- --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
- --kubelet-use-node-status-port
- --kubelet-insecure-tls