起因
去年初我開始系統(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.sh
和worker/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
,kubelet
和kubectl
桅咆。
控制面配置完成以后才可以配置工作節(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
,kubelet
和kubectl
的腳本暇检。完全按照官方kubeadm 安裝文檔執(zhí)行产阱。
install.sh
有兩個參數(shù):K8S 版本和安裝包鏡像。安裝包鏡像可以為空块仆,采用默認的packages.k8s.io
或阿里云鏡像源。
install.sh
的執(zhí)行步驟如下:
- 修改 docker 的配置悔据,使用 systemd 來管理容器的 cgroup。
- 配置網(wǎng)絡, 允許 iptables 檢查橋接流量科汗。
- 關閉系統(tǒng)交換區(qū)(swap area)藻烤。
- 自動識別
apt
和yum
并安裝kubeadm
相關軟件包怖亭。
控制面配置腳本 /facility/k8s/setup-control-panel.sh 說明
setup-control-panel.sh
是用來配置控制面的腳本。必須在/facility/k8s/install.sh
安裝之后執(zhí)行坤检。
setup-control-panel.sh
主要做以下幾件事:
- 通過
firewall-cmd
配置k8s 集群所用端口。 - 安裝配置 K8S 等控制面組件:
kube-apiserver
早歇。 - 安裝配置 Pod 網(wǎng)絡插件。支持
calico
和fannel
缺前,默認選擇calico
蛀醉。 - 生成自動加入集群的腳本
join-cluster.sh
并通過8000
端口暴露出來悬襟,讓工作節(jié)點可以啟動后自動加入集群衅码。 - 安裝 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嘹黔!