新聞中心
Kubernetes 云管理控制器
FEATURE STATE: Kubernetes v1.11 [beta]

10余年的中方網(wǎng)站建設(shè)經(jīng)驗(yàn),針對設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。全網(wǎng)營銷推廣的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整中方建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)公司從事“中方網(wǎng)站設(shè)計(jì)”,“中方網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
由于云驅(qū)動(dòng)的開發(fā)和發(fā)布的步調(diào)與 Kubernetes 項(xiàng)目不同,將服務(wù)提供商專用代碼抽象到 ?cloud-controller-manager? 二進(jìn)制中有助于云服務(wù)廠商在 Kubernetes 核心代碼之外獨(dú)立進(jìn)行開發(fā)。
?cloud-controller-manager? 可以被鏈接到任何滿足 cloudprovider.Interface 約束的云服務(wù)提供商。為了兼容舊版本,Kubernetes 核心項(xiàng)目中提供的 cloud-controller-manager 使用和 ?kube-controller-manager? 相同的云服務(wù)類庫。 已經(jīng)在 Kubernetes 核心項(xiàng)目中支持的云服務(wù)提供商預(yù)計(jì)將通過使用 in-tree 的 cloud-controller-manager 過渡為非 Kubernetes 核心代碼。
管理
需求
每個(gè)云服務(wù)都有一套各自的需求用于系統(tǒng)平臺(tái)的集成,這不應(yīng)與運(yùn)行 ?kube-controller-manager? 的需求有太大差異。作為經(jīng)驗(yàn)法則,你需要:
- 云服務(wù)認(rèn)證/授權(quán):你的云服務(wù)可能需要使用令牌或者 IAM 規(guī)則以允許對其 API 的訪問
- kubernetes 認(rèn)證/授權(quán):cloud-controller-manager 可能需要 RBAC 規(guī)則以訪問 kubernetes apiserver
- 高可用:類似于 kube-controller-manager,你可能希望通過主節(jié)點(diǎn)選舉(默認(rèn)開啟)配置一個(gè)高可用的云管理控制器。
運(yùn)行云管理控制器
你需要對集群配置做適當(dāng)?shù)男薷囊猿晒Φ剡\(yùn)行云管理控制器:
- 一定不要為 ?
kube-apiserver? 和 ?kube-controller-manager? 指定 ?--cloud-provider? 標(biāo)志。 這將保證它們不會(huì)運(yùn)行任何云服務(wù)專用循環(huán)邏輯,這將會(huì)由云管理控制器運(yùn)行。未來這個(gè)標(biāo)記將被廢棄并去除。 - ?
kubelet?必須使用 ?--cloud-provider=external? 運(yùn)行。 這是為了保證讓 kubelet 知道在執(zhí)行任何任務(wù)前,它必須被云管理控制器初始化。
請記住,設(shè)置集群使用云管理控制器將用多種方式更改集群行為:
- 指定了 ?
--cloud-provider=external? 的 kubelet 將被添加一個(gè) ?node.cloudprovider.kubernetes.io/uninitialized? 的污點(diǎn),導(dǎo)致其在初始化過程中不可調(diào)度(?NoSchedule?)。 這將標(biāo)記該節(jié)點(diǎn)在能夠正常調(diào)度前,需要外部的控制器進(jìn)行二次初始化。 請注意,如果云管理控制器不可用,集群中的新節(jié)點(diǎn)會(huì)一直處于不可調(diào)度的狀態(tài)。 這個(gè)污點(diǎn)很重要,因?yàn)檎{(diào)度器可能需要關(guān)于節(jié)點(diǎn)的云服務(wù)特定的信息,比如他們的區(qū)域或類型 (高端 CPU、GPU 支持、內(nèi)存較大、臨時(shí)實(shí)例等)。 - 集群中節(jié)點(diǎn)的云服務(wù)信息將不再能夠從本地元數(shù)據(jù)中獲取,取而代之的是所有獲取節(jié)點(diǎn)信息的 API 調(diào)用都將通過云管理控制器。這意味著你可以通過限制到 kubelet 云服務(wù) API 的訪問來提升安全性。 在更大的集群中你可能需要考慮云管理控制器是否會(huì)遇到速率限制, 因?yàn)樗F(xiàn)在負(fù)責(zé)集群中幾乎所有到云服務(wù)的 API 調(diào)用。
云管理控制器可以實(shí)現(xiàn):
- 節(jié)點(diǎn)控制器 - 負(fù)責(zé)使用云服務(wù) API 更新 kubernetes 節(jié)點(diǎn)并刪除在云服務(wù)上已經(jīng)刪除的 kubernetes 節(jié)點(diǎn)。
- 服務(wù)控制器 - 負(fù)責(zé)在云服務(wù)上為類型為 LoadBalancer 的 service 提供負(fù)載均衡器。
- 路由控制器 - 負(fù)責(zé)在云服務(wù)上配置網(wǎng)絡(luò)路由。
- 如果你使用的是 out-of-tree 提供商,請按需實(shí)現(xiàn)其余任意特性。
示例
如果當(dāng)前 Kubernetes 內(nèi)核支持你使用的云服務(wù),并且想要采用云管理控制器,請參見 kubernetes 內(nèi)核中的云管理控制器。
對于不在 Kubernetes 核心代碼庫中的云管理控制器,你可以在云服務(wù)廠商或 SIG 領(lǐng)導(dǎo)者的源中找到對應(yīng)的項(xiàng)目。
- DigitalOcean
- keepalived
- Oracle Cloud Infrastructure
- Rancher
對于已經(jīng)存在于 Kubernetes 內(nèi)核中的提供商,你可以在集群中將 in-tree 云管理控制器作為守護(hù)進(jìn)程運(yùn)行。請使用如下指南:
# 這是一個(gè)如何將 cloud-controller-manager 安裝為集群中的 Daemonset 的示例。
# 本例假定你的主控節(jié)點(diǎn)可以運(yùn)行 pod 并具有角色 node-role.kubernetes.io/master
# 請注意,這里的 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
# 對于樹內(nèi)驅(qū)動(dòng),我們使用 k8s.gcr.io/cloud-controller-manager,
# 鏡像可以替換為其他樹外驅(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,請刪除它們
- 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ù)載的限制很重要。
對 Volume 的支持
云管理控制器未實(shí)現(xiàn) ?kube-controller-manager? 中的任何 volume 控制器,因?yàn)楹?nbsp;volume 的集成還需要與 kubelet 協(xié)作。由于我們引入了 CSI (容器存儲(chǔ)接口,container storage interface) 并對彈性 volume 插件添加了更強(qiáng)大的支持,云管理控制器將添加必要的支持,以使云服務(wù)同 volume 更好的集成。請?jiān)?nbsp;這里 了解更多關(guān)于 out-of-tree CSI volume 插件的信息。
可擴(kuò)展性
在以前為云服務(wù)提供商提供的架構(gòu)中,我們依賴 kubelet 的本地元數(shù)據(jù)服務(wù)來獲取關(guān)于它本身的節(jié)點(diǎn)信息。通過這個(gè)新的架構(gòu),現(xiàn)在我們完全依賴云管理控制器來獲取所有節(jié)點(diǎn)的信息。對于非常大的集群,你需要考慮可能的瓶頸,例如資源需求和 API 速率限制。
雞和蛋的問題
云管理控制器的目標(biāo)是將云服務(wù)特性的開發(fā)從 Kubernetes 核心項(xiàng)目中解耦。 不幸的是,Kubernetes 項(xiàng)目的許多方面都假設(shè)云服務(wù)提供商的特性同項(xiàng)目緊密結(jié)合。 因此,這種新架構(gòu)的采用可能導(dǎo)致某些場景下,當(dāng)一個(gè)請求需要從云服務(wù)提供商獲取信息時(shí), 在該請求沒有完成的情況下云管理控制器不能返回那些信息。
Kubelet 中的 TLS 引導(dǎo)特性是一個(gè)很好的例子。 目前,TLS 引導(dǎo)認(rèn)為 kubelet 有能力從云提供商(或本地元數(shù)據(jù)服務(wù))獲取所有的地址類型(私有、公用等), 但在被初始化之前,云管理控制器不能設(shè)置節(jié)點(diǎn)地址類型,而這需要 kubelet 擁有 TLS 證書以和 API 服務(wù)器通信。
隨著整個(gè)動(dòng)議的演進(jìn),將來的發(fā)行版中將作出改變來解決這些問題。
網(wǎng)站題目:創(chuàng)新互聯(lián)kubernetes教程:Kubernetes云管理控制器
網(wǎng)頁地址:http://m.fisionsoft.com.cn/article/cdeigdg.html


咨詢
建站咨詢
