1. 程式人生 > >Kubespray免FQ安裝k8s叢集

Kubespray免FQ安裝k8s叢集

簡述

筆者在學習使用 kubespray 在多臺伺服器部署k8s叢集時,被偉大的長城防火牆虐得遍體鱗傷。原本30分鐘內可以完成的工作,可能在牆內花個幾天時間,解決了被牆的問題,已經喪失了大半的興趣和信心,有人可能直接就放棄,這學習成本之高,實乃牆內IT學習者的悲哀。好了,言歸正傳,在消沉了一兩天之後,在網上一些資料的幫助下,我解決了這個問題,這裡分享出來,希望能幫助到你,讓你能順利地完成部署。

  • 說明:標題中“不科學上網”指的是伺服器不需要科學上網,實際操作有些步驟還是需要在自己的本地機器上通過VPN等手段下載一些牆外的資源,我相信這對讀者來說應該不是什麼問題

問題和解決方案

如上所述,部署中遇到的問題來自於兩方面:
1. k8s 所依賴的各元件的 docker 映象,在官方的kubespray中,依賴的部分核心映象託管於谷歌雲的 docker 倉庫(gcr.io)中,該地址是被牆的
2. 一部分通過 HTTP 下載的依賴,位於 storage.googe.com 和 dl.google.com 上,也是被牆的

經過查詢資料,我得出了以下解決方案:
1. 針對問題(1),我從官方的 kubespray 庫中通過全文查詢,找到了名稱空間為 gcr.io(包括 k8s.gcr.io 等相關名稱空間)的 docker 映象的宣告,總共約 14 處,並通過 docker 中央倉庫 docker hub 的 Automated Build 功能,在自己的名稱空間 waychan23 下,構建了依賴的所有 docker 映象;同時,我 fork 了 kubespray,並將上述找到的 docker 映象宣告,一一對應修改成了自己在 docker hub 上的映象名;
2. 針對問題(2),同樣,我從官方的 kubespray 中,全文搜尋,找到了 google 相關域名的 HTTP 資源宣告,並在本地機器通過(本地機器FQ) VPN 下載,並上傳至自己在阿里雲 OSS 的空間下;同時,在我 fork 的 kubespray 中相關的 HTTP 資源宣告改成對應的阿里雲OSS資源地址;

經過了上述的操作,我順利地完成了在阿里雲3臺ECS上部署k8s叢集的任務。

上述操作看似簡單,實則需要花上1-2天的時間,好在讀者可以直接使用筆者修改過的 kubespray,相信能幫你更快地實現部署。

筆者 fork 的 kubespray 庫位於:waychan23/kubespray,筆者docker hub名稱空間下的映象是公開的,讀者可以直接使用,而 HTTP 的資源我沒有對外開放 OSS 的讀取許可權,所以,讀者還需要自行替換成自己的HTTP檔案服務地址,好在工作量不大,只有5處左右(後續筆者會抽空上傳到百度雲盤上)。