W3Cschool
恭喜您成為首批注冊(cè)用戶(hù)
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
FEATURE STATE: Kubernetes v1.11 [beta]
由于云驅(qū)動(dòng)的開(kāi)發(fā)和發(fā)布的步調(diào)與 Kubernetes 項(xiàng)目不同,將服務(wù)提供商專(zhuān)用代碼抽象到 ?cloud-controller-manager
? 二進(jìn)制中有助于云服務(wù)廠(chǎng)商在 Kubernetes 核心代碼之外獨(dú)立進(jìn)行開(kāi)發(fā)。
?cloud-controller-manager
? 可以被鏈接到任何滿(mǎn)足 cloudprovider.Interface 約束的云服務(wù)提供商。為了兼容舊版本,Kubernetes 核心項(xiàng)目中提供的 cloud-controller-manager 使用和 ?kube-controller-manager
? 相同的云服務(wù)類(lèi)庫(kù)。 已經(jīng)在 Kubernetes 核心項(xiàng)目中支持的云服務(wù)提供商預(yù)計(jì)將通過(guò)使用 in-tree 的 cloud-controller-manager 過(guò)渡為非 Kubernetes 核心代碼。
每個(gè)云服務(wù)都有一套各自的需求用于系統(tǒng)平臺(tái)的集成,這不應(yīng)與運(yùn)行 ?kube-controller-manager
? 的需求有太大差異。作為經(jīng)驗(yàn)法則,你需要:
你需要對(duì)集群配置做適當(dāng)?shù)男薷囊猿晒Φ剡\(yùn)行云管理控制器:
kube-apiserver
? 和 ?kube-controller-manager
? 指定 ?--cloud-provider
? 標(biāo)志。 這將保證它們不會(huì)運(yùn)行任何云服務(wù)專(zhuān)用循環(huán)邏輯,這將會(huì)由云管理控制器運(yùn)行。未來(lái)這個(gè)標(biāo)記將被廢棄并去除。
kubelet
?必須使用 ?--cloud-provider=external
? 運(yùn)行。 這是為了保證讓 kubelet 知道在執(zhí)行任何任務(wù)前,它必須被云管理控制器初始化。請(qǐng)記住,設(shè)置集群使用云管理控制器將用多種方式更改集群行為:
--cloud-provider=external
? 的 kubelet 將被添加一個(gè) ?node.cloudprovider.kubernetes.io/uninitialized
? 的污點(diǎn),導(dǎo)致其在初始化過(guò)程中不可調(diào)度(?NoSchedule
?)。 這將標(biāo)記該節(jié)點(diǎn)在能夠正常調(diào)度前,需要外部的控制器進(jìn)行二次初始化。 請(qǐng)注意,如果云管理控制器不可用,集群中的新節(jié)點(diǎn)會(huì)一直處于不可調(diào)度的狀態(tài)。 這個(gè)污點(diǎn)很重要,因?yàn)檎{(diào)度器可能需要關(guān)于節(jié)點(diǎn)的云服務(wù)特定的信息,比如他們的區(qū)域或類(lèi)型 (高端 CPU、GPU 支持、內(nèi)存較大、臨時(shí)實(shí)例等)。
云管理控制器可以實(shí)現(xiàn):
如果當(dāng)前 Kubernetes 內(nèi)核支持你使用的云服務(wù),并且想要采用云管理控制器,請(qǐng)參見(jiàn) kubernetes 內(nèi)核中的云管理控制器。
對(duì)于不在 Kubernetes 核心代碼庫(kù)中的云管理控制器,你可以在云服務(wù)廠(chǎng)商或 SIG 領(lǐng)導(dǎo)者的源中找到對(duì)應(yīng)的項(xiàng)目。
對(duì)于已經(jīng)存在于 Kubernetes 內(nèi)核中的提供商,你可以在集群中將 in-tree 云管理控制器作為守護(hù)進(jìn)程運(yùn)行。請(qǐng)使用如下指南:
# 這是一個(gè)如何將 cloud-controller-manager 安裝為集群中的 Daemonset 的示例。
# 本例假定你的主控節(jié)點(diǎn)可以運(yùn)行 pod 并具有角色 node-role.kubernetes.io/master
# 請(qǐng)注意,這里的 Daemonset 不能直接在你的云上工作,此例只是一個(gè)指導(dǎo)。
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: cloud-controller-manager
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: system:cloud-controller-manager
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: cloud-controller-manager
namespace: kube-system
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
labels:
k8s-app: cloud-controller-manager
name: cloud-controller-manager
namespace: kube-system
spec:
selector:
matchLabels:
k8s-app: cloud-controller-manager
template:
metadata:
labels:
k8s-app: cloud-controller-manager
spec:
serviceAccountName: cloud-controller-manager
containers:
- name: cloud-controller-manager
# 對(duì)于樹(shù)內(nèi)驅(qū)動(dòng),我們使用 k8s.gcr.io/cloud-controller-manager,
# 鏡像可以替換為其他樹(shù)外驅(qū)動(dòng)的鏡像
image: k8s.gcr.io/cloud-controller-manager:v1.8.0
command:
- /usr/local/bin/cloud-controller-manager
- --cloud-provider=[YOUR_CLOUD_PROVIDER] # 在此處添加你自己的云驅(qū)動(dòng)!
- --leader-elect=true
- --use-service-account-credentials
# 這些標(biāo)志因每個(gè)云驅(qū)動(dòng)而異
- --allocate-node-cidrs=true
- --configure-cloud-routes=true
- --cluster-cidr=172.17.0.0/16
tolerations:
# 這一設(shè)置是必需的,為了讓 CCM 可以自行引導(dǎo)
- key: node.cloudprovider.kubernetes.io/uninitialized
value: "true"
effect: NoSchedule
# 這些容忍度使得守護(hù)進(jìn)程能夠在控制平面節(jié)點(diǎn)上運(yùn)行
# 如果你的控制平面節(jié)點(diǎn)不應(yīng)該運(yùn)行 pod,請(qǐng)刪除它們
- key: node-role.kubernetes.io/control-plane
operator: Exists
effect: NoSchedule
- key: node-role.kubernetes.io/master
operator: Exists
effect: NoSchedule
# 這是為了限制 CCM 僅在主節(jié)點(diǎn)上運(yùn)行
# 節(jié)點(diǎn)選擇器可能因你的集群設(shè)置而異
nodeSelector:
node-role.kubernetes.io/master: ""
運(yùn)行云管理控制器會(huì)有一些可能的限制。雖然以后的版本將處理這些限制,但是知道這些生產(chǎn)負(fù)載的限制很重要。
云管理控制器未實(shí)現(xiàn) ?kube-controller-manager
? 中的任何 volume 控制器,因?yàn)楹?nbsp;volume 的集成還需要與 kubelet 協(xié)作。由于我們引入了 CSI (容器存儲(chǔ)接口,container storage interface) 并對(duì)彈性 volume 插件添加了更強(qiáng)大的支持,云管理控制器將添加必要的支持,以使云服務(wù)同 volume 更好的集成。請(qǐng)?jiān)?nbsp;這里 了解更多關(guān)于 out-of-tree CSI volume 插件的信息。
在以前為云服務(wù)提供商提供的架構(gòu)中,我們依賴(lài) kubelet 的本地元數(shù)據(jù)服務(wù)來(lái)獲取關(guān)于它本身的節(jié)點(diǎn)信息。通過(guò)這個(gè)新的架構(gòu),現(xiàn)在我們完全依賴(lài)云管理控制器來(lái)獲取所有節(jié)點(diǎn)的信息。對(duì)于非常大的集群,你需要考慮可能的瓶頸,例如資源需求和 API 速率限制。
云管理控制器的目標(biāo)是將云服務(wù)特性的開(kāi)發(fā)從 Kubernetes 核心項(xiàng)目中解耦。 不幸的是,Kubernetes 項(xiàng)目的許多方面都假設(shè)云服務(wù)提供商的特性同項(xiàng)目緊密結(jié)合。 因此,這種新架構(gòu)的采用可能導(dǎo)致某些場(chǎng)景下,當(dāng)一個(gè)請(qǐng)求需要從云服務(wù)提供商獲取信息時(shí), 在該請(qǐng)求沒(méi)有完成的情況下云管理控制器不能返回那些信息。
Kubelet 中的 TLS 引導(dǎo)特性是一個(gè)很好的例子。 目前,TLS 引導(dǎo)認(rèn)為 kubelet 有能力從云提供商(或本地元數(shù)據(jù)服務(wù))獲取所有的地址類(lèi)型(私有、公用等), 但在被初始化之前,云管理控制器不能設(shè)置節(jié)點(diǎn)地址類(lèi)型,而這需要 kubelet 擁有 TLS 證書(shū)以和 API 服務(wù)器通信。
隨著整個(gè)動(dòng)議的演進(jìn),將來(lái)的發(fā)行版中將作出改變來(lái)解決這些問(wèn)題。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話(huà):173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: