溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

樹(shù)莓派上的K8S集群掛了該怎么辦

發(fā)布時(shí)間:2021-10-09 15:02:19 來(lái)源:億速云 閱讀:254 作者:柒染 欄目:云計(jì)算

這篇文章給大家介紹樹(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)。

 自動(dòng)化傳奇開(kāi)始

在開(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ù)莓派集群:步驟1

樹(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ǔ)卡大約需要一分鐘。

 樹(shù)莓派集群:步驟2

這一步才是真正有趣的開(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)。

 樹(shù)莓派集群:步驟3

成功執(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有什么作用?

  1. 網(wǎng)絡(luò)
    安裝 flannel 和host-gw的配置補(bǔ)丁;
    安裝 metalLB 并將網(wǎng)絡(luò)設(shè)置為 var.network_subnet200–250;

  2. Traefik
    安裝 Traefik 代理,并通過(guò) metalLB 負(fù)載平衡器將其公開(kāi)到您的家庭網(wǎng)絡(luò)。Traefik 儀表板本身可以通過(guò)以下方式訪問(wèn)traefik.local

樹(shù)莓派上的K8S集群掛了該怎么辦

在樹(shù)莓派集群上運(yùn)行的 Traefik 儀表板

Adguard

使用 NFS 安裝具有持久卷聲明的 Adguard DNS 服務(wù);
通過(guò) traefik 公開(kāi)儀表板,并通過(guò)家庭網(wǎng)絡(luò)中的專用IP公開(kāi)服務(wù)本身,如下所示:adguard.local

樹(shù)莓派上的K8S集群掛了該怎么辦

在樹(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ù)莓派上的K8S集群掛了該怎么辦

在樹(shù)莓派集群上運(yùn)行的 Grafana 儀表板

Kubernetes Dashboard
安裝 Kubernetes Dashboard 并通過(guò) traefik 將其公開(kāi)k8s.local

樹(shù)莓派上的K8S集群掛了該怎么辦

在樹(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ò),可以把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

k8s
AI