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