您好,登錄后才能下訂單哦!
這篇文章給大家介紹樹(shù)莓派上的K8S集群掛了該怎么辦,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。
昨晚在我的樹(shù)莓派上進(jìn)行更新的時(shí)候,所有節(jié)點(diǎn)突然停止檢測(cè)網(wǎng)絡(luò)接口,并且無(wú)法恢復(fù)!??!
那時(shí)我有兩個(gè)選擇,但都很費(fèi)時(shí):
方法1:提早起床,并按照我自己之前的文章手動(dòng)重建,也許還會(huì)發(fā)現(xiàn)一些改進(jìn)的余地。我已經(jīng)親身試驗(yàn)了很多次:這種方法很容易出錯(cuò),主要是輸入錯(cuò)誤或跳過(guò)一個(gè)或兩個(gè)步驟,然后在接下來(lái)的半個(gè)小時(shí)試圖找出到底發(fā)生了什么事,再抹去一切并從頭開(kāi)始一遍又一遍。
方法2:及早醒悟并從頭開(kāi)始編碼,這樣可以讓我的最終解決方案實(shí)現(xiàn)執(zhí)行一次并永久使用,使整個(gè)集群的重建和生產(chǎn)盡可能容易地進(jìn)行復(fù)制。當(dāng)然,這將意味著更多的停機(jī)時(shí)間。但是,它的好處將是長(zhǎng)期的,這使我不必?fù)?dān)心集群本身,并最終將其視為一個(gè)穩(wěn)定的解決方案,可以向其遷移整個(gè)本地基礎(chǔ)架構(gòu)。
在開(kāi)始任何工作之前,我都非常專注于基礎(chǔ)知識(shí),并提出了在整個(gè)過(guò)程中遵循的一些原則。這樣創(chuàng)建的環(huán)境各部分之間的代碼之間邏輯上有很多分隔,因此親愛(ài)的讀者,您可以更容易地更改代碼或注釋掉整個(gè)文件以禁用此處或此處的少量功能。
原則1:在樹(shù)莓派上設(shè)置 Kubernetes 集群可以分為三個(gè)部分:設(shè)置存儲(chǔ)卡,在系統(tǒng)級(jí)別上進(jìn)行節(jié)點(diǎn)配置,最后擴(kuò)展 Kubernetes 資源。
原則2:在我的舊版 Intel NUC 上運(yùn)行著一個(gè)NFS服務(wù),該服務(wù)已連接到 DROBO 存儲(chǔ)。很適合將它用作所有節(jié)點(diǎn)的永久共享存儲(chǔ)。
原則3: 樹(shù)莓派的集群在我的家庭網(wǎng)絡(luò)中的 VLAN 中運(yùn)行,因此保護(hù)它不是我的優(yōu)先事項(xiàng),所有服務(wù)以及節(jié)點(diǎn)都應(yīng)易于訪問(wèn),而無(wú)需處理 credentials。
要重現(xiàn)結(jié)果(或使其發(fā)揮作用),您將需要:
Mac:當(dāng)我有空安裝Linux VM時(shí),我可能會(huì)在腳本中添加平臺(tái)監(jiān)測(cè)部分
Ansible:我使用的版本為2.10.6
Terraform:用0.13.4編寫(xiě),也適用于0.14.8
Make:任意版本應(yīng)該均可使用
樹(shù)莓派使用存儲(chǔ)卡作為其硬盤驅(qū)動(dòng)器。這可能不是最佳選擇,并且絕對(duì)不會(huì)給您最大的讀寫(xiě)操作速度,但對(duì)于業(yè)余愛(ài)好項(xiàng)目而言,應(yīng)該足夠了。
步驟1需要注意什么?
格式化存儲(chǔ)卡
將存儲(chǔ)卡分為兩個(gè)分區(qū)-1GB +其余存儲(chǔ)卡
將Alpine Linux鏡像復(fù)制到存儲(chǔ)卡上
創(chuàng)建系統(tǒng)覆蓋
系統(tǒng)覆蓋負(fù)責(zé)設(shè)置 Promisc 模式下的 eth0(對(duì)于MetalLB來(lái)說(shuō)是必需的),并配置 SSH 免密登陸。
重要提示:檢查001-prepare-card.sh的來(lái)源,請(qǐng)確保剛才插入的存儲(chǔ)卡實(shí)際上是/dev/disk5,否則可能會(huì)丟失數(shù)據(jù)。
結(jié)果:準(zhǔn)備6張存儲(chǔ)卡大約需要一分鐘。
這一步才是真正有趣的開(kāi)始。我猜你已經(jīng)把存儲(chǔ)卡插入到你的樹(shù)莓派,連接了所有的電纜(網(wǎng)絡(luò)和電源),并允許它們啟動(dòng)?你現(xiàn)在需要獲取你的設(shè)備的 IP 地址——你可以通過(guò)連接屏幕到每一個(gè)設(shè)備并執(zhí)行 ifconfig eth0 或者登錄到你的路由器并檢查來(lái)實(shí)現(xiàn)。用合適的值調(diào)整 pi-hosts.txt。
[masters]pi0 ansible_host=192.168.50.132 # Pi0[workers]pi1 ansible_host=192.168.50.135 # Pi1pi3 ansible_host=192.168.50.60 # Pi3pi4 ansible_host=192.168.50.36 # Pi4pi2 ansible_host=192.168.50.85 # Pi2pi5 ansible_host=192.168.50.230 # Pi5
重要提示:今后很少有事情需要 pi0 主機(jī)名。
將以下內(nèi)容添加到~/.ssh/config,強(qiáng)制將所有pi *主機(jī)作為根連接。
Host pi? User root Hostname %h.local
因?yàn)槲覀円呀?jīng)準(zhǔn)備好了微機(jī),所以我們需要為 Ansible 運(yùn)行做好準(zhǔn)備。使用 001-prepare- anable .sh 腳本可以輕松完成此操作,該腳本將將 ssh 到 pi-hosts 文件中指定的每個(gè)服務(wù)器,為NTP配置 chrony 并安裝 Python 解釋器。
重要提示:您可能需要檢查 rpi.yaml 文件并根據(jù)需要調(diào)整vars部分。
成功執(zhí)行此步驟后,您可以執(zhí)行 ansible-playbook rpi.yaml -f 10 來(lái)運(yùn)行Ansible,該運(yùn)行將按以下順序進(jìn)行:
常見(jiàn)操作:
安裝必要的軟件包
分區(qū)并格式化 RPI 存儲(chǔ)卡
將“更大”的分區(qū)設(shè)置為系統(tǒng)磁盤
添加所有 fstab 條目
提交更改
重新啟動(dòng)樹(shù)莓派以從“permanent”分區(qū)啟動(dòng)
KUBEMASTER:
使用 kubeadm 設(shè)置主節(jié)點(diǎn)
將令牌存儲(chǔ)在本地(在static/token_file中
)
root
在樹(shù)莓派上設(shè)置可以訪問(wèn) kubectl 的用戶
將 Kubernetes 配置保存在本地(在static/kubectl.conf中
)
KUBEWORKER:
將 token 復(fù)制到 worker 節(jié)點(diǎn)
它使 worker 通過(guò) token 文件加入您的主服務(wù)器
將kubectl.conf復(fù)制到 workers 的root用戶
基本操作:
從 Master 上移除污點(diǎn),使其參與工作負(fù)載
在節(jié)點(diǎn)上安裝py3-pip,PyYaml和helm
如果您還在閱讀(恭喜您),您剛剛完成了基本的Kubernetes集群。我相信,這就像執(zhí)行幾個(gè)腳本然后等待它們完成一樣簡(jiǎn)單,而且肯定比手動(dòng)方法更好。
重要提示:您可以任意多次運(yùn)行它。一旦完成,你的存儲(chǔ)卡就不會(huì)重新格式化。
結(jié)果:安裝6節(jié)點(diǎn)的基本 Kubernetes 集群大概需要花費(fèi)幾分鐘,具體的時(shí)間取決于你的網(wǎng)絡(luò)鏈接狀態(tài)。
成功執(zhí)行前兩個(gè)步驟后,您應(yīng)該已經(jīng)準(zhǔn)備好將樹(shù)莓派的集群用于第一個(gè)部署。只需很少的基本設(shè)置步驟即可使其按需運(yùn)行,但是請(qǐng)猜測(cè)一下……它們也被自動(dòng)設(shè)置,并由 Terraform 來(lái)負(fù)責(zé)。
首先讓我們看一下配置:
# Variables used for barebone kubernetes setupnetwork_subnet = "192.168.50"net_hosts = { adguard = "240" adguard_catchall = "249" traefik = "234" torrent_rpc = "245"}nfs_storage = { general = "/media/nfs" torrent = "/mnt/drobo-storage/docker-volumes/torrent" adguard = "/mnt/drobo-storage/docker-volumes/adguard"}# ENV variable: TRAEFIK_API_KEY sets traefik_api_key# ENV variable: GH_USER, GH_PAT for authentication with private containers
您可以看到我正在192.168.50.0/24網(wǎng)絡(luò)中運(yùn)行集群,但是默認(rèn)情況下,MetalLB 將使用地址 200-250 作為網(wǎng)絡(luò)地址池的“end”。當(dāng)我有了我的家庭 torrent 服務(wù)器和來(lái)自Adguard 的 DNS 時(shí),我希望它們具有特定的地址,連同 Traefik 平衡器為儀表板提供“東西”。
重要提示:
nfs_*_path值應(yīng)與您在步驟2中更新的設(shè)置兼容。
確保您的 Kubernetes 配置文件
~/.kube/config更新了
static/kubernetes.conf
的訪問(wèn)細(xì)節(jié),
我正在使用home-k8s作為上下文名稱。
Terraforming有什么作用?
網(wǎng)絡(luò)
安裝 flannel 和host-gw的配置補(bǔ)丁;
安裝 metalLB 并將網(wǎng)絡(luò)設(shè)置為 var.network_subnet200–250;
Traefik
安裝 Traefik 代理,并通過(guò) metalLB 負(fù)載平衡器將其公開(kāi)到您的家庭網(wǎng)絡(luò)。Traefik 儀表板本身可以通過(guò)以下方式訪問(wèn)traefik.local
在樹(shù)莓派集群上運(yùn)行的 Traefik 儀表板
Adguard
使用 NFS 安裝具有持久卷聲明的 Adguard DNS 服務(wù);
通過(guò) traefik 公開(kāi)儀表板,并通過(guò)家庭網(wǎng)絡(luò)中的專用IP公開(kāi)服務(wù)本身,如下所示:adguard.local
在樹(shù)莓派集群上運(yùn)行的 Adguard Home
Prometheus
在所有節(jié)點(diǎn)上安裝和部署 Prometheus 監(jiān)控堆棧和 grafana。更新 Prometheus DaemonSet,從而消除了進(jìn)行卷掛載的必要性。它也通過(guò) traefik 將 grafana 曝光為 grafana.local。默認(rèn)的 grafana 用戶/密碼組合為 admin:admin。Grafana 附帶一個(gè)預(yù)裝的插件 devopsprodigi - kubegrafi -app,我認(rèn)為這是用于集群監(jiān)控的最佳插件。
在樹(shù)莓派集群上運(yùn)行的 Grafana 儀表板
Kubernetes Dashboard
安裝 Kubernetes Dashboard 并通過(guò) traefik 將其公開(kāi)k8s.local
在樹(shù)莓派集群上運(yùn)行的 Kubernetes 儀表板
1.Torrent
使用 Flood Web 界面安裝和部署torrent服務(wù)器(rTorrent)。通過(guò)公開(kāi)儀表板torrent.local。它使用大量的掛載來(lái)存儲(chǔ)數(shù)據(jù)和配置。有一個(gè)將復(fù)制設(shè)置為1的理由:-rTorrent的lock file有問(wèn)題,并且由于它使用共享目錄,因此如果檢測(cè)到lock file件,它就不會(huì)啟動(dòng)。(在我的私有配置中)rTorrent被設(shè)置為監(jiān)聽(tīng)端口23340。
2.備份
由于樹(shù)莓派運(yùn)行在存儲(chǔ)卡上,由于經(jīng)常讀寫(xiě)操作,存儲(chǔ)卡可能會(huì)磨損,所以我決定在NFS中添加etcd的定期備份。它們每天運(yùn)行一次,在t erraform 應(yīng)用的配置下——每個(gè)備份“重量”約為32兆字節(jié)。
為了使操作更簡(jiǎn)單,我創(chuàng)建了 Makefile,該文件應(yīng)該可以幫助您進(jìn)行設(shè)置。您可能需要設(shè)置以下環(huán)境變量。
TRAEFIK_API_KEY // Traefik API keyGH_USER // Github userGH_PAT // Github Personal Access Token
重要提示:Github 證書(shū)現(xiàn)在還沒(méi)有使用,但我計(jì)劃很快添加身份驗(yàn)證,以便從 GHCR 提取私有鏡像。
ADDITIONAL_ARGS=-var 'traefik_api_key=$(TRAEFIK_API_KEY)' -var "github_user=$(GH_USER)" -var "github_pat=$(GH_TOKEN)"apply: cd infrastructure; terraform apply $(ADDITIONAL_ARGS) -auto-approve -var-file ../variables.tfvarsplan: cd infrastructure; terraform plan $(ADDITIONAL_ARGS) -var-file ../variables.tfvarsdestroy: cd infrastructure; terraform destroy $(ADDITIONAL_ARGS) -var-file ../variables.tfvarsdestroy-target: cd infrastructure; terraform destroy $(ADDITIONAL_ARGS) -var-file ../variables.tfvars -target $(TARGET)refresh: cd infrastructure; terraform refresh $(ADDITIONAL_ARGS) -var-file ../variables.tfvarsinit: cd infrastructure; rm -fr .terraform; terraform initimport: cd infrastructure; terraform import $(ADDITIONAL_ARGS) -var-file ../variables.tfvars $(ARGS)lint: terraform fmt -recursive infrastructure/
所有代碼可在 GitHub 上的 lukaszraczylo / rpi-home-cluster-setup 中使用,任何人均可免費(fèi)使用和修改)。我還發(fā)布了具有支持 ARM64 處理器的多體系結(jié)構(gòu)的定制構(gòu)建的 docker 映像(rTorrent和Flood)。
自動(dòng)化可以節(jié)省時(shí)間,節(jié)省精力,而且絕對(duì)可以完成工作。我經(jīng)常清除整個(gè)集群,并使用前面提到的存儲(chǔ)庫(kù)從頭開(kāi)始構(gòu)建,以確保它按預(yù)期工作。我將保持這篇文章和存儲(chǔ)庫(kù)的最新功能和特性。
關(guān)于樹(shù)莓派上的K8S集群掛了該怎么辦就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。