協助改善此頁面
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
想要為此使用者指南做出貢獻? 捲動至此頁面底部,然後選取編輯此頁面 GitHub。您的貢獻將幫助我們的使用者指南更適合每個人。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
CNI 為混合節點設定
Amazon EKS混合節點的容器網路界面 (CNIs) 支援 Cilium 和 Calico。您必須CNI為混合節點安裝 ,才能準備好為工作負載提供服務。在CNI執行 Not Ready
之前,混合節點會顯示 狀態。您可以使用您選擇的工具CNIs來管理這些項目,例如 Helm。Amazon 與混合節點VPCCNI不相容,且 VPC CNI 設定eks.amazonaws.com/compute-type: hybrid
標籤的抗親和性。
版本相容性
下表代表 Cilium 和 Calico 版本,這些版本針對 Amazon 中支援的每個 Kubernetes 版本相容和驗證EKS。
Kubernetes 版本 | Cilium 版本 | Calico 版本 |
---|---|---|
1.31 |
1.16.x |
3.29.x |
1.30 |
1.16.x |
3.29.x |
1.29 |
1.16.x |
3.29.x |
1.28 |
1.16.x |
3.29.x |
1.27 |
1.16.x |
3.29.x |
1.26 |
1.16.x |
3.29.x |
1.25 |
1.16.x |
3.29.x |
支援的功能
AWS 支援 Cilium 和 Calico 的下列功能,可與混合節點搭配使用。如果您計劃使用 AWS 支援範圍以外的功能,我們建議您取得外掛程式的商業支援,或擁有內部專業知識來故障診斷,並為CNI外掛程式專案提供修正。
功能 | Cilium | Calico |
---|---|---|
Kubernetes 網路一致性 |
是 |
是 |
控制平面到節點的連線 |
是 |
是 |
控制平面到 Pod 連線 |
是 |
是 |
生命週期管理 |
安裝、升級、刪除 |
安裝、升級、刪除 |
網路模式 |
VXLAN |
VXLAN |
IP 地址管理 (IPAM) |
叢集範圍 (Cilium IPAM) |
Calico IPAM |
IP 系列 |
IPv4 |
IPv4 |
BGP |
是 (鈰控制平面) |
是 |
在混合節點上安裝 Cilium
-
請確定您已在CLI命令列環境中安裝 lm。如需安裝說明,請參閱 Helm 文件
。 -
安裝 Cilium Helm 儲存庫。
helm repo add cilium https://helm.cilium.io/
-
建立名為 的 yaml 檔案
cilium-values.yaml
。如果您已設定至少一個遠端 Pod 網路,請CIDRs為您的 設定相同的 PodclusterPoolIPv4PodCIDRList
。在叢集上部署 CiliumclusterPoolIPv4PodCIDRList
之後,您不應該變更 。您可以clusterPoolIPv4MaskSize
根據每個節點所需的 Pod 來設定 ,請參閱 Cilium 文件中的擴展叢集集區。如需 Cilium 的 Helm 值完整清單,請參閱 Cilium 文件中的 Helm 參考 。下列範例會將所有 Cilium 元件設定為僅在混合節點上執行,因為它們具有 eks.amazonaws.com/compute-type: hybrid
標籤。根據預設,Cilium 會偽裝所有 Pod 流量的來源 IP 地址,並將叢集移至節點的 IP 地址。這可讓 Cilium 與已設定遠端 Pod 網路的 Amazon EKS叢集,以及未設定遠端 Pod 網路的叢集一起執行。如果您停用 Cilium 部署的偽裝,則必須使用遠端 Pod 網路設定 Amazon EKS叢集,並且必須使用內部部署網路公告 Pod 地址。如果您是在混合節點上執行 Webhook,則必須使用遠端 Pod 網路設定叢集,並且必須使用內部部署網路公告您的 Pod 地址。
使用 公告內部部署網路 Pod 地址的常見方式。 BGP若要BGP搭配 Cilium 使用 ,您必須設定
bgpControlPlane.enabled: true
。如需 Cilium BGP支援的詳細資訊,請參閱 Cilium 文件中的 Cilium BGP控制平面。 affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: In values: - hybrid ipam: mode: cluster-pool operator: clusterPoolIPv4MaskSize: 25 clusterPoolIPv4PodCIDRList: - POD_CIDR operator: unmanagedPodWatcher: restart: false
-
在叢集上安裝 Cilium。將 取代
CILIUM_VERSION
為您想要的 Cilium 版本。建議您為 Cilium 次要版本執行最新的修補程式版本。您可以在 Cilium 文件的穩定版本區段中找到指定次要 Cilium 版本的最新修補程式版本。如果您要BGP為部署啟用 ,請在下面的命令中新增 --set bgpControlPlane.enabled=true
旗標。如果您使用特定的 kubeconfig 檔案,請使用--kubeconfig
旗標搭配 Helm 安裝命令。helm install cilium cilium/cilium \ --version
CILIUM_VERSION
\ --namespace kube-system \ --values cilium-values.yaml -
您可以使用下列命令確認您的 Cilium 安裝成功。您應該會在每個混合節點上看到
cilium-operator
部署和cilium-agent
執行的 。此外,您的混合節點現在應該具有狀態Ready
。如需如何BGP設定 Cilium 的詳細資訊,請繼續下一個步驟。kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE cilium-jjjn8 1/1 Running 0 11m cilium-operator-d4f4d7fcb-sc5xn 1/1 Running 0 11m
kubectl get nodes
NAME STATUS ROLES AGE VERSION mi-04a2cf999b7112233 Ready <none> 19m v1.31.0-eks-a737599
-
若要BGP搭配 Cilium 使用 ,以內部部署網路公告您的 Pod 地址,您必須已搭配 安裝 Cilium
bgpControlPlane.enabled: true
。若要在 Cilium BGP中設定 ,請先建立名為 的檔案cilium-bgp-cluster.yaml
,並將CiliumBGPClusterConfig
peerAddress 設定為您要對等的現場部署路由器 IP。peerASN
根據您的內部部署路由器組態來設定localASN
和 。apiVersion: cilium.io/v2alpha1 kind: CiliumBGPClusterConfig metadata: name: cilium-bgp spec: nodeSelector: matchExpressions: - key: eks.amazonaws.com/compute-type operator: In values: - hybrid bgpInstances: - name: "rack0" localASN: ONPREM_ROUTER_ASN peers: - name: "onprem-router" peerASN: PEER_ASN peerAddress: ONPREM_ROUTER_IP peerConfigRef: name: "cilium-peer"
-
將 Cilium BGP叢集組態套用至叢集。
kubectl apply -f cilium-bgp-cluster.yaml
-
CiliumBGPPeerConfig
資源用於定義BGP對等組態。多個對等可以共用相同的組態,並提供常見CiliumBGPPeerConfig
資源的參考。建立名為 的檔案cilium-bgp-peer.yaml
,以設定內部部署網路的對等組態。如需組態選項的完整清單,請參閱 Cilium 文件中的BGP對等組態。 apiVersion: cilium.io/v2alpha1 kind: CiliumBGPPeerConfig metadata: name: cilium-peer spec: timers: holdTimeSeconds: 30 keepAliveTimeSeconds: 10 gracefulRestart: enabled: true restartTimeSeconds: 120 families: - afi: ipv4 safi: unicast advertisements: matchLabels: advertise: "bgp"
-
將 Cilium BGP 對等組態套用至叢集。
kubectl apply -f cilium-bgp-peer.yaml
-
CiliumBGPAdvertisement
資源用於定義與其相關聯的各種廣告類型和屬性。建立名為 的檔案,cilium-bgp-advertisement.yaml
並使用所需的設定來設定CiliumBGPAdvertisement
資源。apiVersion: cilium.io/v2alpha1 kind: CiliumBGPAdvertisement metadata: name: bgp-advertisements labels: advertise: bgp spec: advertisements: - advertisementType: "PodCIDR" - advertisementType: "Service" service: addresses: - ClusterIP - ExternalIP - LoadBalancerIP
-
將 Cilium BGP 公告組態套用至您的叢集。
kubectl apply -f cilium-bgp-advertisement.yaml
您可以使用
cilium bgp peers
命令來確認BGP互連與 Cilium CLI搭配使用。您應該會在環境的輸出中看到正確的值,工作階段狀態為 established
。如需故障診斷的詳細資訊,請參閱 Cilium 文件中的故障診斷和操作指南。
升級混合節點上的 Cilium
升級 Cilium 部署之前,請仔細檢閱 Cilium 升級文件
-
請確定您已
helm
CLI在命令列環境中安裝 。如需安裝說明,請參閱 Helm 文件。 -
安裝 Cilium Helm 儲存庫。
helm repo add cilium https://helm.cilium.io/
-
執行 Cilium 升級飛行前檢查。將 取代
CILIUM_VERSION
為目標 Cilium 版本。建議您為 Cilium 次要版本執行最新的修補程式版本。您可以在 Cilium 文件的穩定版本區段中找到指定次要 Cilium 版本的最新修補程式版本。 helm install cilium-preflight cilium/cilium --version CILIUM_VERSION \ --namespace=kube-system \ --set preflight.enabled=true \ --set agent=false \ --set operator.enabled=false
-
套用 之後
cilium-preflight.yaml
,請確定 Pod READY 的數量與執行的 Cilium Pod 數量相同。kubectl get ds -n kube-system | sed -n '1p;/cilium/p'
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE cilium 2 2 2 2 2 <none> 1h20m cilium-pre-flight-check 2 2 2 2 2 <none> 7m15s
-
一旦 Pod READY 數量相等,請確定 Cilium 飛行前部署也標示為 READY 1/1。如果顯示 READY 0/1,請參閱CNP驗證
區段並解決部署的問題,然後再繼續升級。 kubectl get deployment -n kube-system cilium-pre-flight-check -w
NAME READY UP-TO-DATE AVAILABLE AGE cilium-pre-flight-check 1/1 1 0 12s
-
刪除飛行前
helm uninstall cilium-preflight --namespace kube-system
-
在正常叢集操作期間,所有 Cilium 元件都應執行相同的版本。下列步驟說明如何將所有元件從一個穩定版本升級至較新穩定版本。從一個次要版本升級至另一個次要版本時,建議先升級至現有 Cilium 次要版本的最新修補程式版本。為了將中斷降至最低, upgradeCompatibility 選項應設定為已安裝在此叢集中的初始 Cilium 版本。
在執行 helm 升級命令之前,請將部署的值保留在 中,
cilium-values.yaml
或為您的設定使用--set
命令列選項。升級操作會覆寫 Cilium ConfigMap,因此升級時必須傳遞您的組態值。如果您使用的是 BGP,建議您使用--set bgpControlPlane=true
命令列選項,而不是在您的值檔案中提供此資訊。helm upgrade cilium cilium/cilium --version CILIUM_VERSION \ --namespace kube-system \ --set upgradeCompatibility=1.X \ -f cilium-values.yaml
-
(選用) 如果您因為問題而需要復原升級,請執行下列命令。
helm history cilium --namespace kube-system helm rollback cilium [REVISION] --namespace kube-system
從混合節點刪除 Cilium
-
執行下列命令,從叢集解除安裝所有 Cilium 元件。請注意,解除安裝 CNI可能會影響節點和 Pod 的運作狀態,不應在生產叢集上執行。
helm uninstall cilium --namespace kube-system
從CNI叢集移除 時,根據預設不會移除 Cilium 設定的介面和路由,如需詳細資訊,請參閱GitHub 問題
。 -
若要清除磁碟上組態檔案和資源,如果您使用標準組態目錄,您可以移除檔案,如 Cilium 儲存庫中的
cni-uninstall.sh
指令碼所示 GitHub。 -
若要從叢集中移除 Cilium Custom Resource Definitions (CRDs),您可以執行下列命令。
kubectl get crds -oname | grep "cilium" | xargs kubectl delete
在混合節點上安裝 Calico
-
請確定您已在CLI命令列環境中安裝 lm。如需安裝說明,請參閱 Helm 文件
。 -
安裝 Cilium Helm 儲存庫。
helm repo add projectcalico https://docs.tigera.io/calico/charts
-
建立名為 的 yaml 檔案
calico-values.yaml
,以設定 Calico 與混合節點上執行的親和性。如需不同 Calico 網路模式的詳細資訊,請參閱 Calico 文件中的判斷最佳網路選項。 -
POD_CIDR
將 取代為 Pod CIDR的範圍。如果您已使用遠端 Pod 網路設定 Amazon EKS叢集,POD_CIDR
則您為 Calico 指定的 應與遠端 Pod 網路相同。例如:10.100.0.0/24
。 -
CIDR_SIZE
將 取代為您想要配置給每個節點的CIDR區段大小。例如,25
對於 /25 區段大小。如需 CIDRblockSize
和變更 的詳細資訊blockSize
,請參閱 Calico 文件中的變更 IP 集區區塊大小。 -
在下面的範例中,
natOutgoing
已啟用,bgp
已停用。在此組態中,Calico 可以在已設定遠端 Pod 網路的 Amazon EKS叢集上執行,也可以在未設定遠端 Pod 網路的叢集上執行。如果您已將natOutgoing
設為停用,則必須使用遠端 Pod 網路設定叢集,且您的內部部署網路必須能夠正確路由目的地為 Pod 的流量CIDRs。使用 公告內部部署網路 Pod 地址的常見方式。 BGP若要BGP搭配 Calico 使用 ,您必須啟用bgp
。以下範例會將所有 Calico 元件設定為僅在混合節點上執行,因為它們具有eks.amazonaws.com/compute-type: hybrid
標籤。如果您是在混合節點上執行 Webhook,則必須使用遠端 Pod 網路設定叢集,並且必須使用內部部署網路公告您的 Pod 地址。以下範例會設定controlPlaneReplicas: 1
,如果您有多個混合節點且想要以高可用性的方式執行 Calico 控制平面元件,請增加 值。installation: enabled: true cni: type: Calico ipam: type: Calico calicoNetwork: bgp: Disabled ipPools: - cidr: POD_CIDR blockSize: CIDR_SIZE encapsulation: VXLAN natOutgoing: Enabled nodeSelector: eks.amazonaws.com/compute-type == "hybrid" controlPlaneReplicas: 1 controlPlaneNodeSelector: eks.amazonaws.com/compute-type: hybrid calicoNodeDaemonSet: spec: template: spec: nodeSelector: eks.amazonaws.com/compute-type: hybrid csiNodeDriverDaemonSet: spec: template: spec: nodeSelector: eks.amazonaws.com/compute-type: hybrid calicoKubeControllersDeployment: spec: template: spec: nodeSelector: eks.amazonaws.com/compute-type: hybrid typhaDeployment: spec: template: spec: nodeSelector: eks.amazonaws.com/compute-type: hybrid
-
-
在叢集上安裝 Calico。
CALICO_VERSION
將 取代為您想要的 Calico 版本 (例如 3.29.0),請參閱 Calico 版本以尋找 Calico 次要版本的最新修補程式版本。建議執行 Calico 次要版本的最新修補程式版本。如果您使用特定 kubeconfig
檔案,請使用--kubeconfig
旗標。helm install calico projectcalico/tigera-operator \ --version
CALICO_VERSION
\ --namespace kube-system \ -f calico-values.yaml -
您可以使用下列命令確認您的 Calico 安裝成功。您應該會看到
tigera-operator
部署、在每個混合節點上執行的calico-node
代理程式,以及calico-apiserver
、csi-node-driver
和calico-kube-controllers
部署。此外,您的混合節點現在應該具有狀態Ready
。如果您使用的是natOutgoing: Disabled
,則在您向內部部署網路公告 Pod 地址之前,所有 Calico 元件都無法成功啟動。如需如何BGP為 Calico 設定 的資訊,請繼續下一個步驟。kubectl get pods -A
NAMESPACE NAME READY STATUS RESTARTS AGE calico-apiserver calico-apiserver-6c77bb6d46-2n8mq 1/1 Running 0 69s calico-system calico-kube-controllers-7c5f8556b5-7h267 1/1 Running 0 68s calico-system calico-node-s5nnk 1/1 Running 0 68s calico-system calico-typha-6487cc9d8c-wc5jm 1/1 Running 0 69s calico-system csi-node-driver-cv42d 2/2 Running 0 68s kube-system coredns-7bb495d866-2lc9v 1/1 Running 0 6m27s kube-system coredns-7bb495d866-2t8ln 1/1 Running 0 157m kube-system kube-proxy-lxzxh 1/1 Running 0 18m kube-system tigera-operator-f8bc97d4c-28b4d 1/1 Running 0 90s
kubectl get nodes
NAME STATUS ROLES AGE VERSION mi-0c6ec2f6f79176565 Ready <none> 5h13m v1.31.0-eks-a737599
-
如果您安裝的 Calico 沒有 BGP,請略過此步驟。若要設定 BGP,請使用
calico-bgp.yaml
BGPPeer
組態和 建立名為 的檔案BGPConfiguration
。請務必區分BGPPeer
和BGPConfiguration
。BGPPeer
是BGP已啟用 的路由器或遠端資源,Calico 叢集中的節點將與之對等。BGPPeer
組態asNumber
中的 類似於 Cilium 設定peerASN
。BGPConfiguration
會套用至每個 Calico 節點,而asNumber
的BGPConfiguration
相當於 Cilium 設定localASN
。將以下範例中LOCAL_ASN
的ONPREM_ROUTER_ASN
、ONPREM_ROUTER_IP
和 取代為現場部署環境的值。此keepOriginalNextHop: true
設定用於確保每個節點僅公告其擁有CIDR的 Pod 網路。apiVersion: projectcalico.org/v3 kind: BGPPeer metadata: name: calico-hybrid-nodes spec: peerIP:
ONPREM_ROUTER_IP
asNumber:ONPREM_ROUTER_ASN
keepOriginalNextHop: true --- apiVersion: projectcalico.org/v3 kind: BGPConfiguration metadata: name: default spec: nodeToNodeMeshEnabled: false asNumber:LOCAL_ASN
-
將 檔案套用至您的叢集。
kubectl apply -f calico-bgp.yaml
-
確認 Calico Pod 執行時使用以下命令。
kubectl get pods -n calico-system -w
NAMESPACE NAME READY STATUS RESTARTS AGE calico-apiserver calico-apiserver-598bf99b6c-2vltk 1/1 Running 0 3h24m calico-system calico-kube-controllers-75f84bbfd6-zwmnx 1/1 Running 31 (59m ago) 3h20m calico-system calico-node-9b2pg 1/1 Running 0 5h17m calico-system calico-typha-7d55c76584-kxtnq 1/1 Running 0 5h18m calico-system csi-node-driver-dmnmm 2/2 Running 0 5h18m kube-system coredns-7bb495d866-dtn4z 1/1 Running 0 6h23m kube-system coredns-7bb495d866-mk7j4 1/1 Running 0 6h19m kube-system kube-proxy-vms28 1/1 Running 0 6h12m kube-system tigera-operator-55f9d9d565-jj9bg 1/1 Running 0 73m
如果您在這些步驟期間遇到問題,請參閱 Calico 文件中的疑難排解指引
在混合節點上升級 Calico
升級您的 Calico 部署之前,請仔細檢閱 Calico 升級文件
-
下載您要升級之 Calico 版本的運算子資訊清單。
CALICO_VERSION
將 取代為您升級到的版本,例如v3.29.0
。請務必v
在 major.minor.patch 前面加上 。kubectl apply --server-side --force-conflicts \ -f https://raw.githubusercontent.com/projectcalico/calico/
CALICO_VERSION
/manifests/operator-crds.yaml -
執行
helm upgrade
以升級您的 Calico 部署。將 CALICO_VERSION 取代為您升級到的版本,例如v3.29.0
。從您用來安裝 Calico 的組態值建立calico-values.yaml
檔案。helm upgrade calico projectcalico/tigera-operator \ --version
CALICO_VERSION
\ --namespace kube-system \ -f calico-values.yaml
從混合節點刪除 Calico
-
執行下列命令,從您的叢集解除安裝 Calico 元件。請注意,解除安裝 CNI可能會影響節點和 Pod 的運作狀態,不應在生產叢集上執行。如果您將 Calico 安裝在 命名空間中,而不是在下面的命令中
kube-system
變更命名空間。helm uninstall calico --namespace kube-system
請注意,從叢集移除 時,根據預設不會移除 Calico CNI 設定的介面和路由。
-
若要清除磁碟上組態檔案和資源,請從
/opt/cni
和/etc/cni
目錄中移除 Calico 檔案。 -
若要CRDs從叢集中移除 Calico,請執行下列命令。
kubectl get crds -oname | grep "calico" | xargs kubectl delete
kubectl get crds -oname | grep "tigera" | xargs kubectl delete