使用 Kubeadm 搭建個(gè)公網(wǎng) k8s 集群(單控制平面集群)

前言

YY:國(guó)慶的時(shí)候趁著阿里云和騰訊云的輕量級(jí)服務(wù)器做促銷一不小心剁了個(gè)手????,2 Cores,4G RAM 還是闊以的兄裂,既然買了,那不能不用呀??,之前一直想著搭建個(gè) k8s 集群玩玩晰奖,本地開發(fā)機(jī)雖然起了個(gè) k8s(拿 Docker Desktop 起的谈撒,不 dei 勁),但就一個(gè) Node匾南,不爽啃匿,對(duì) k8s 的體驗(yàn)不到位??,1024蛆楞,是時(shí)候用起來(lái)了溯乒,折騰一下,順便讓最近浮躁的心冷靜一下豹爹。

這次拿官方的 Kubeadm 耍一下橙数,以阿里云的輕量級(jí)應(yīng)用服務(wù)器為 Control 節(jié)點(diǎn),騰訊云的輕量級(jí)應(yīng)用服務(wù)器為 Worker 節(jié)點(diǎn)帅戒,說干就干灯帮。

Check 一下文檔要求 - 準(zhǔn)備工作

Kubenetes 官方文檔給出了 Kubeadm 起 k8s 集群的幾點(diǎn)要求,在這里微微檢查下兩臺(tái)輕量級(jí)云服務(wù)器:

  • A compatible Linux host. The Kubernetes project provides generic instructions for Linux distributions based on Debian and Red Hat, and those distributions without a package manager.[我們用的 Ubuntu 20.04逻住,那肯定符合 Debian 系的].
  • 2 GB or more of RAM per machine (any less will leave little room for your apps).[4G, 我們很 OK, 但感覺后面會(huì)拉跨].
  • 2 CPUs or more. [正好一臺(tái) 2個(gè) CPU, nice].
  • Full network connectivity between all machines in the cluster (public or private network is fine).[兩臺(tái)輕量級(jí)應(yīng)用服務(wù)器都有公網(wǎng) IP钟哥,那必須互通啊].
  • Unique hostname, MAC address, and product_uuid for every node.[這里得微微 check 一下兩臺(tái)服務(wù)器,cat /sys/class/net/eth0/address 看下 MAC 地址瞎访,sudo cat /sys/class/dmi/id/product_uuid 看下 product_uuid, hostname 看下主機(jī)名腻贰,emmm, correct!]
  • Certain ports are open on your machines. [這里得到阿里云輕量級(jí)服務(wù)器 & 騰訊云的輕量級(jí)應(yīng)用服務(wù)器的防火墻開放下相關(guān) TCP 端口]扒秸。

阿里云輕量級(jí)應(yīng)用服務(wù)器開啟 Control(控制平面)節(jié)點(diǎn)的 TCP 端口播演,這里要對(duì)照下文檔給出的需要開放的端口:

Control Plane Open Ports
Aliyun Control Node

騰訊云輕量級(jí)應(yīng)用服務(wù)器開啟 Worker(工作)節(jié)點(diǎn)的 TCP 端口:

Worker Node Open Ports
Tencent Cloud Worker Node
  • Swap disabled. You MUST disable swap in order for the kubelet to work properly. [為了讓 kubelet 起來(lái),要把 Swap 分區(qū)關(guān)閉伴奥,使用 free -mh 看下 Swap 是否在使用写烤, swapoff -a 關(guān)閉 Swap 分區(qū)].

參考:https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

為什么需要關(guān)閉 Swap 分區(qū),有 dalao 做了分析:http://www.reibang.com/p/6f3268ce642f

  • Letting iptables see bridged traffic.

這里照著文檔拾徙,一波操作下兩臺(tái)服務(wù)器:

sudo modprobe br_netfilter

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system

lsmod | grep br_netfilter
  • Container Runtime Interface(CRI). [這里需要安裝下 Pod 運(yùn)行需要的容器運(yùn)行時(shí)洲炊,我們選擇 Docker].
apt-get update
apt-get install -y apt-transport-https \
    software-properties-common \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
apt-get update
apt-get install -y docker-ce docker-ce-cli containerd.io

安裝完畢還需要將 Docker 的 cgroup driver 替換為 systemd,確保與 Kubeneters 使用的一致尼啡。

cat>>/etc/docker/daemon.json<<EOF
{
  "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF

systemctl daemon-reload
systemctl restart docker

安裝 kubeadm, kubelet, kubectl

上面檢查工作如果很順利的話暂衡,接下來(lái)就可以準(zhǔn)備 kubeadm, kubelet, kubectl 安裝了,不過我們還得給 apt 添加 Kubenetest 軟件源崖瞭,官方文檔中使用的如軟件源是 Google 域名下的狂巢,國(guó)內(nèi)云服務(wù)器訪問會(huì)有問題(懂得都懂了??),這里使用國(guó)內(nèi)得源书聚,這里兩臺(tái)服務(wù)器都操作一下:

# 1唧领、添加 GPG Key
sudo curl -fsSL http://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
# 2代态、添加 k8s 軟件源
sudo add-apt-repository "deb http://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main"
3、update 一下
apt-get update

上面執(zhí)行沒有問題的話疹吃,就可以開始安裝 kubelet kubeadm kubectl了:

sudo apt-get install -y kubelet kubeadm kubectl

# 查看安裝的版本, apt install apt-show-versions
apt-show-versions kubectl kubelet kubeadm
# 讓 kubelet 開機(jī)啟動(dòng)
sudo systemctl start kubelet
sudo systemctl enable kubelet
  • kubeadm: 引導(dǎo)啟動(dòng) Kubernate 集群的命令行工具。
  • kubelet: 在群集中的所有計(jì)算機(jī)上運(yùn)行的組件, 并用來(lái)執(zhí)行如啟動(dòng) Pods 和 Containers 等操作西雀。
  • kubectl: 用于操作運(yùn)行中的集群的命令行工具萨驶。

初始化集群

為了能夠讓集群初始化更快,我們可以先預(yù)拉取集群初始化依賴的鏡像艇肴,emmm腔呜,官方文檔給出的又是 Google 的網(wǎng)址,這里我們基于 GitHub -> AliyunContainerService/k8s-for-docker-desktop 項(xiàng)目做鏡像的快速拉取再悼。確保相關(guān)鏡像版本與 kubelet 保持一致(這里是 v1.22.2), kubeadm config images list --kubernetes-version v1.22.2 可查看需要哪些鏡像核畴。

git clone https://github.com/AliyunContainerService/k8s-for-docker-desktop.git && cd k8s-for-docker-desktop

rm -f images.properties
# 調(diào)整鏡像版本
cat>>images.properties<<EOF
k8s.gcr.io/pause:3.5=registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.5
k8s.gcr.io/kube-controller-manager:v1.22.2=registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.22.2
k8s.gcr.io/kube-scheduler:v1.22.2=registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.22.2
k8s.gcr.io/kube-proxy:v1.22.2=registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.22.2
k8s.gcr.io/kube-apiserver:v1.22.2=registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.22.2
k8s.gcr.io/etcd:3.5.0-0=registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.0-0
k8s.gcr.io/coredns/coredns:v1.8.4=registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.8.4
quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.26.1=registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:0.26.1
EOF
# 拉取鏡像
./load_images.sh

初始化控制平面節(jié)點(diǎn)(Control Plane Node(s))

控制(Control)節(jié)點(diǎn) {阿里云輕量級(jí)應(yīng)用服務(wù)器} 的鏡像預(yù)拉取完畢后,可執(zhí)行如下命令進(jìn)行初始化操作:

# api server IPv4 地址使用公網(wǎng) IP
kubeadm init \
  --pod-network-cidr=10.244.0.0/16 \
  --kubernetes-version v1.22.2
  # --apiserver-advertise-address 120.79.73.159

為當(dāng)前 root 用戶生成 kubeconfig:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

安裝 CNI(Container Network Interface) -> Flannel

curl --insecure -sfL https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml | kubectl apply -f -

查看節(jié)點(diǎn)狀況冲九,emmm谤草,Ready 沒毛病

root@iZwz92a65mqaa8zwy83dpnZ:~/k8s-for-docker-desktop# kubectl get nodes
NAME                      STATUS   ROLES                  AGE    VERSION
izwz92a65mqaa8zwy8   Ready    control-plane,master   4m6s   v1.22.2

添加工作節(jié)點(diǎn)(Worker Node(s))

接下來(lái)我們將 Worker 節(jié)點(diǎn)加入到集群中,由于我們?cè)诔跏蓟刂破矫嫠诘闹鞴?jié)點(diǎn)時(shí)并沒有指定公網(wǎng) IP莺奸,所以這里先做個(gè) IP 轉(zhuǎn)發(fā)丑孩,讓 Worker 節(jié)點(diǎn)能夠和控制平面節(jié)點(diǎn)間進(jìn)行通信。

iptables -t nat -A OUTPUT -d <初始化控制平面節(jié)點(diǎn)得到的 IP> -j DNAT --to-destination <阿里云輕量級(jí)服務(wù)器公網(wǎng) IP>

然后我們將 Worker 節(jié)點(diǎn) join 進(jìn)集群中:

kubeadm join <初始化控制平面節(jié)點(diǎn)得到的 IP>:6443 --token 4zicbp.d1wertghxdgcgz6y --discovery-token-ca-cert-hash sha256:1912dbf415da652f97b9fa728cb85dd338e17b24ee338ec48b073c8fa8sdfgth

順利的話??灭贷,那么結(jié)果如下:

worker join

然后到控制節(jié)點(diǎn)看下集群節(jié)點(diǎn)狀態(tài)温学,順利的話結(jié)果如下??:

root@iZwz92a65mqdpnZ:~/k8s-for-docker-desktop# kubectl get nodes
NAME                      STATUS   ROLES                  AGE    VERSION
izwz92a65mqaa8zwy83dpnz   Ready    control-plane,master   48m    v1.22.2
vm-8-4-ubuntu             Ready    <none>                 8m9s   v1.22.2

參考

本文由博客群發(fā)一文多發(fā)等運(yùn)營(yíng)工具平臺(tái) OpenWrite 發(fā)布

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市甚疟,隨后出現(xiàn)的幾起案子仗岖,更是在濱河造成了極大的恐慌,老刑警劉巖览妖,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件轧拄,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡讽膏,警方通過查閱死者的電腦和手機(jī)紧帕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)桅打,“玉大人是嗜,你說我怎么就攤上這事⊥ξ玻” “怎么了鹅搪?”我有些...
    開封第一講書人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)遭铺。 經(jīng)常有香客問我丽柿,道長(zhǎng)恢准,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任甫题,我火速辦了婚禮馁筐,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘坠非。我一直安慰自己敏沉,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開白布炎码。 她就那樣靜靜地躺著盟迟,像睡著了一般。 火紅的嫁衣襯著肌膚如雪潦闲。 梳的紋絲不亂的頭發(fā)上攒菠,一...
    開封第一講書人閱讀 52,262評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音歉闰,去河邊找鬼辖众。 笑死,一個(gè)胖子當(dāng)著我的面吹牛和敬,可吹牛的內(nèi)容都是我干的赵辕。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼概龄,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼还惠!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起私杜,我...
    開封第一講書人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蚕键,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后衰粹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體锣光,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年铝耻,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了誊爹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡瓢捉,死狀恐怖频丘,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情泡态,我是刑警寧澤搂漠,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站某弦,受9級(jí)特大地震影響桐汤,放射性物質(zhì)發(fā)生泄漏而克。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一怔毛、第九天 我趴在偏房一處隱蔽的房頂上張望员萍。 院中可真熱鬧,春花似錦拣度、人聲如沸碎绎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至映穗,卻和暖如春窖张,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蚁滋。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工宿接, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人辕录。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓睦霎,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親走诞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子副女,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

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