SpringBoot 2.x 實戰(zhàn)仿B站高性能后端項目
時間:2023-04-23 19:12:01 | 來源:網(wǎng)站運(yùn)營
時間:2023-04-23 19:12:01 來源:網(wǎng)站運(yùn)營
SpringBoot 2.x 實戰(zhàn)仿B站高性能后端項目:download:
打開 openYurt 的 README.md,在簡單介紹之后就是 Getting started:
yurtctl convert --provider [minikube|kubeadm|kind] // To convert an existing Kubernetes cluster to an OpenYurt cluster yurtctl revert // To uninstall and revert back to the original cluster settings 復(fù)制代碼
簡單一行命令就可體驗 OpenYurt 了,感覺非常方便。
稍等!為什么是 convert/revert 而不是 install/uninstall ?
這個命令對集群做了什么?
看來,在執(zhí)行它之前有必要搞清楚它到底做了什么。
yurtctl convert 到底做了些什么?
核心流程
跟隨 openYurt 源代碼(詳情請見文末相關(guān)鏈接),梳理了 convert 的核心流程:
可見 1、2 并沒有什么特別,只是常規(guī)的服務(wù)部署。
3,則是對原有 k8s 系統(tǒng)組件的操作,需要特別注意。
4,節(jié)點轉(zhuǎn)換看著也并不復(fù)雜,卻對邊緣至關(guān)重要。****
disable nodelifecycle controller 做了什么
工作內(nèi)容:
1. 查詢控制面節(jié)點 2. 創(chuàng)建 job,通過 nodeName: {{.nodeName}}
確保 job 的 pod 調(diào)度到對應(yīng) node 上執(zhí)行(通過 nsenter 的方式執(zhí)行,修改宿主機(jī)上文件)。 3. sed -i 's/--controllers=/--controllers=-nodelifecycle,/g' /etc/kubernetes/manifests/kube-controller-manager.yaml 查看 kube-controller-manager.yaml
... containers: - command: - kube-controller-manager - --allocate-node-cidrs=true ... - --controllers=-nodelifecycle,*,bootstrapsigner,tokencleaner ... 復(fù)制代碼
可見,上面的一系列操作最終就是修改了 kube-controller-manager 的啟動命令。
查看 kube-controller-manager 啟動參數(shù)說明:
--controllers 代表需要開啟的controller列表/
可見,sed 命令就是去掉了 nodelifecycle 這個 controller。
那,nodelifecycle controller 是做什么的?
簡單來說:
1. 不斷監(jiān)聽,kubelet 上報上來的 node 信息2. 如果某個 node 狀態(tài)異常,或者說長時間沒有上報等2.1 驅(qū)逐這個 node 節(jié)點或者其他 ---> 導(dǎo)致上面的 pod 被重新調(diào)度 可見,對于處于弱網(wǎng)環(huán)境的邊緣節(jié)點,很容易就命中異常狀態(tài),導(dǎo)致 node 被驅(qū)逐,pod 被重新調(diào)度。
所以這里把它去掉了。使用 yurt-controller-manager 來代替它。
即使節(jié)點心跳丟失,處于自治模式的節(jié)點中的 pod 也不會從 APIServer 中驅(qū)逐。
注:這里自治模式的節(jié)點,指的就是邊緣節(jié)點。我們通常會通過加 annotation 的方式把節(jié)點標(biāo)記為自治節(jié)點。
節(jié)點轉(zhuǎn)換是怎么實現(xiàn)的,云端節(jié)點和邊緣節(jié)點有什么差異?
同樣,是通過跑 job 的方式,在目標(biāo)宿主機(jī)上下文中執(zhí)行相關(guān)操作。
不過,相比于暴力使用 nsenter,這里用了更加優(yōu)雅的方式。通過將宿主機(jī)根路徑 volume 掛載到容器里的方式。