通過 Vagrant 一鍵初始化 K8S 集群

起因

去年初我開始系統(tǒng)學習 K8S顷歌,就想能生成一個集群環(huán)境。查看了一下官方文檔邻储,步驟很多赋咽。網(wǎng)上的一些資源已經(jīng)過期或者不可用,再加上各種資源的變更和國內(nèi)不可訪問吨娜。

不得不說脓匿,在家按照官方文檔搭建一個標準的 K8S 集群真是太難了!

所以我就自己構建了一個最小的 K8S 集群環(huán)境宦赠,放在了我的 provisioner 代碼庫里∨阏保現(xiàn)在這個開源代碼庫可以自動一鍵建立一個擁有一個控制節(jié)點和兩個工作節(jié)點的最小K8S集群,可以反復銷毀和啟動勾扭。

過年在家的時間就對相關的腳本進行了完善毡琉,項目地址可參考:https://github.com/wizardbyron/provisioners,本文是對相關腳本的說明妙色。

關于 Provisioner 項目

Provisioners 是我個人用于構建“最小可用集群”的一站式自動化腳本庫桅滋。是我練習構建各種系統(tǒng)工具的一站式腳本收集倉庫。它默認會通過 vagrant啟動三個虛擬機身辨,分別是管理節(jié)點(admin)和兩個工作節(jié)點(node-1和node-2丐谋,最大支持到node-9)。管理節(jié)點的 IP 是192.168.56.10栅表。工作節(jié)點是192.68.56.11~192.168.56.19笋鄙。你可以通過修改Vagrantfile調整數(shù)量师枣。

Provisioners 分為solution(解決方案)和facility(設施)兩個腳本目錄怪瓶。

facility 里面則是單個工具的初始化腳本,包含各個工具的一鍵式初始化腳本践美。

solution 則是利用facility里的工具腳本組合成的解決方案洗贰,包括管理節(jié)點和工作節(jié)點。

此外陨倡,essential里包含了init.sh腳本敛滋,這是用于統(tǒng)一初始化 Linux 節(jié)點的統(tǒng)一基礎腳本。而對于管理節(jié)點和工作節(jié)點的自動化初始配置則在solution目錄里每個解決方案下的admin/setup.shworker/setup.sh里兴革。

Vagrantfile 配置說明

這個 Vagrantfile 的核心配置都寫在了文件的前面绎晃。修改其中的參數(shù)可以改變集群相關配置蜜唾。

SOLUTION = "k8s" # default/devops/k8s
BOXES ={
  "ubuntu" => "ubuntu/focal64",
  "centos" => "centos/7"
}

# 支持BOXES里面列出的 vbox 虛擬機鏡像
DISTRO = "centos" 

# Linux 發(fā)行版軟件鏡像源:空(官方)/tencent(騰訊軟件源)/aliyun(阿里云軟件源)
MIRROR = "aliyun" 

# 最新的 Vagrant 版本強制了 CIDR,我保留了 1-9 的IP庶艾,并且將這個初始IP作為管理節(jié)點IP
ADMIN_IP = "192.168.56.10" 

# 調整工作節(jié)點數(shù)袁余,根據(jù)你的資源增加,一般學習的話兩個夠了咱揍。
NODES = 2 

# 用于登錄 Docker 鏡像倉庫颖榜,默認為docker.io
DOCKER_REGISTRY = "<>"
DOCKER_USERNAME = "<username for docker registry>"
DOCKER_PASSWORD = "<password for docker registry>"

默認控制面的主機名是admin,IP 是192.168.56.10煤裙。工作節(jié)點是node-<數(shù)字>掩完,根據(jù)你的內(nèi)存資源,你可以增加節(jié)點的數(shù)量硼砰。

最后只要運行vagrant up就可以啟動你的集群且蓬,如果因為下載某些東西超時(比如鏡像或者安裝包),可以切換鏡像重新試一下夺刑。

如果虛擬機全部初始化完成缅疟,你可以通過kubectl get nodes看到多個集群。

我一般會在搭建完控制面之后用watch kubectl get ndoes持續(xù)跟蹤集群的搭建情況遍愿。

還是再說一句存淫,在家按照官方文檔搭建一個標準的 K8S 集群真是太難了!

K8S 解決方案配置腳本說明

K8S 解決方案腳本主要分控制面配置和工作節(jié)點配置兩個腳本沼填,每個腳本都需要安裝 kubeadm,kubeletkubectl桅咆。

控制面配置完成以后才可以配置工作節(jié)點,因為需要加入控制面的token等一些信息坞笙。

控制面節(jié)點配置腳本 solution/k8s/admin.sh 說明

控制面安裝要在管理節(jié)點上先通過/facility/k8s/install.sh安裝安裝 kubeadm 再進行通過 kubeadm配置岩饼。

#!/usr/bin/env bash
PATH=$PATH:/home/$(whoami)/.local/bin
export CONTROL_PANEL_IP=$1
echo "CONTROL PANEL IP: $CONTROL_PANEL_IP"

MIRROR="aliyun" # <empty>/aliyun
KUBE_VERSION="1.23.0-0"
sh -c "/vagrant/facility/k8s/install.sh $KUBE_VERSION $MIRROR"
sh -c "/vagrant/facility/k8s/setup-control-panel.sh $CONTROL_PANEL_IP $MIRROR"

參數(shù)說明:

  • CONTROL_PANEL_IP: K8S控制面的IP地址,由外部傳入薛夜。
  • MIRROR: K8S所用的A鏡像籍茧,除了apt源和yum源,還有k8s集群所需要的docker鏡像梯澜,目前僅支持阿里云(唯一提供免費k8s鏡像源)寞冯。如果為空,則會去查找官方鏡像晚伙。
  • KUBE_VERSION: K8S 的版本吮龄,可以指定版本版本。

工作節(jié)點腳本配置腳本 /solution/k8s/node.sh 說明

工作節(jié)點配置腳本和控制面配置腳本類似咆疗,都是先通過/facility/k8s/install.sh安裝kubeadm漓帚,然后才進行配置。只是工作節(jié)點要在控制面配置完之后啟動午磁。

#!/usr/bin/env bash
PATH=$PATH:/home/$(whoami)/.local/bin
export CONTROL_PANEL_IP=$1
echo "CONTROL PANEL IP: $CONTROL_PANEL_IP"

MIRROR="aliyun" # <empty>/aliyun
KUBE_VERSION="1.23.0-0"

sh -c "/vagrant/facility/k8s/install.sh $KUBE_VERSION $MIRROR"
sh -c "/vagrant/facility/k8s/setup-worker-node.sh $CONTROL_PANEL_IP"

參數(shù)說明:

  • CONTROL_PANEL_IP: K8S控制面的IP地址尝抖,由外部傳入毡们。
  • MIRROR: K8S所用的A鏡像,除了apt源和yum源昧辽,還有k8s集群所需要的docker鏡像漏隐,目前僅支持阿里云(唯一提供免費k8s鏡像源)。如果為空奴迅,則會去查找官方鏡像青责。
  • KUBE_VERSION: K8S 的版本,可以指定版本取具,但要和控制面的版本一致脖隶,否則會出問題。

K8S facility 腳本說明

K8S facility 腳本包括三個腳本:

初始安裝腳本 /facility/k8s/install.sh 說明

install.sh是初始化 linux 配置并安裝 kubeadm,kubeletkubectl 的腳本暇检。完全按照官方kubeadm 安裝文檔執(zhí)行产阱。

install.sh有兩個參數(shù):K8S 版本和安裝包鏡像。安裝包鏡像可以為空块仆,采用默認的packages.k8s.io或阿里云鏡像源。

install.sh的執(zhí)行步驟如下:

  1. 修改 docker 的配置悔据,使用 systemd 來管理容器的 cgroup。
  2. 配置網(wǎng)絡, 允許 iptables 檢查橋接流量科汗。
  3. 關閉系統(tǒng)交換區(qū)(swap area)藻烤。
  4. 自動識別aptyum并安裝kubeadm相關軟件包怖亭。

控制面配置腳本 /facility/k8s/setup-control-panel.sh 說明

setup-control-panel.sh是用來配置控制面的腳本。必須在/facility/k8s/install.sh安裝之后執(zhí)行坤检。

setup-control-panel.sh主要做以下幾件事:

  1. 通過firewall-cmd配置k8s 集群所用端口。
  2. 安裝配置 K8S 等控制面組件:kube-apiserver早歇。
  3. 安裝配置 Pod 網(wǎng)絡插件。支持calicofannel缺前,默認選擇calico蛀醉。
  4. 生成自動加入集群的腳本join-cluster.sh并通過8000端口暴露出來悬襟,讓工作節(jié)點可以啟動后自動加入集群衅码。
  5. 安裝 helm。

工作節(jié)點配置腳本 /facility/k8s/setup-work-node.sh 說明

setup-work-node.sh的腳本比較簡單脊岳,除了通過firewall-cmd打開所需端口以外逝段,就是下載并執(zhí)行控制面上的加入集群腳本垛玻。

從 MVP 開始

由于目前這是最小可用集群,如果你想增加自定義腳本可以在facility里自動化安裝增加并且在solution自動化配置奶躯。

下一步可能會減少參數(shù)配置帚桩,盡量用內(nèi)部的 DNS 服務取代 IP 的配置。

歡迎來https://github.com/wizardbyron/provisioners提 Issue 和 PR嘹黔!

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末账嚎,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子儡蔓,更是在濱河造成了極大的恐慌郭蕉,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件喂江,死亡現(xiàn)場離奇詭異召锈,居然都是意外死亡,警方通過查閱死者的電腦和手機获询,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門低淡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來熟掂,“玉大人,你說我怎么就攤上這事〗渖担” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵匪燕,是天一觀的道長摸吠。 經(jīng)常有香客問我,道長较解,這世上最難降的妖魔是什么畜疾? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮印衔,結果婚禮上啡捶,老公的妹妹穿的比我還像新娘。我一直安慰自己奸焙,他們只是感情好瞎暑,可當我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著与帆,像睡著了一般了赌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上玄糟,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天勿她,我揣著相機與錄音,去河邊找鬼阵翎。 笑死之剧,一個胖子當著我的面吹牛背稼,可吹牛的內(nèi)容都是我干的玻蝌。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼疆前,長吁一口氣:“原來是場噩夢啊……” “哼竹椒!你這毒婦竟也來了?” 一聲冷哼從身側響起胸完,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤赊窥,失蹤者是張志新(化名)和其女友劉穎狸页,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體址遇,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡倔约,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年浸剩,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绢要。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡重罪,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情勾栗,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布砸讳,位于F島的核電站界牡,受9級特大地震影響,放射性物質發(fā)生泄漏常遂。R本人自食惡果不足惜挽荠,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望漠另。 院中可真熱鬧跃赚,春花似錦、人聲如沸满败。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽米同。三九已至摔竿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間熬苍,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工婿脸, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留柄驻,地道東北人。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓抑钟,卻偏偏與公主長得像野哭,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蛔溃,可洞房花燭夜當晚...
    茶點故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內(nèi)容