「K8s 學(xué)習(xí)日記」Kubeadm 部署 kubernetes 集群

在 Vultr 上部署 kubernetest 集群

原文地址 https://elfgzp.cn/2020/04/11/k8s-%E5%AD%A6%E4%B9%A0%E6%97%A5%E8%AE%B0-kubeadm-%E9%83%A8%E7%BD%B2-kubernetes-%E9%9B%86%E7%BE%A4.html

最近在學(xué)習(xí) kubernetest 但是 Google 上有非常多的教程關(guān)于如何部署 kubernetes居暖。

原本是想在自己買的 JDHUAWEIECS 上面部署的三痰,但是折騰了很久無果。無奈還是選用同一個云服務(wù)商提供的 ECS车份,在有 VPC 的條件下部署會更方便亭螟。

ECS 配置選擇

由于只是學(xué)習(xí)边败,筆者就不部署高可用的 k8s 集群了,所以準(zhǔn)備一臺 MasterNode 節(jié)點漠畜。

由于 Master 至少需要 2 個 CPU 核心秀睛。這里選擇了 Vultr2 核 4G 內(nèi)存 配置的 ECS尔当。

2c4g

Node 節(jié)點配置當(dāng)然是內(nèi)存越大越好,當(dāng)然只是處于學(xué)習(xí)的目的蹂安,這里就選擇與 Master 相同的配置椭迎。

國外的云服務(wù)廠商一般是沒有帶寬限制的,一般是按照流量計算的田盈,這個配置有 3T 的流量是肯定夠的畜号。

然后他的收費模式是按小時計算的這個配置 0.03 $ / h 相當(dāng)于 0.21 ¥ / h,也就是每小時兩毛錢允瞧!就算你用一天也就四塊錢简软。

筆者打算在學(xué)習(xí) k8s 的時候在部署兩個實例,不用了直接銷毀述暂,豈不美哉替饿。

新用戶的話還能免費到賬 100 $ ,這里是邀請的連接 Vultr Give $100贸典,要是覺得還不錯的話可以試試视卢,筆者是真的覺得他們的服務(wù)還不錯,所以給他們打個廣告廊驼。

這里選擇兩個 CentOS 7 Without SELinux 的實例据过。

SELinuxLinux 下的一個安全相關(guān)的軟件,為了方便學(xué)習(xí)和部署妒挎,我們直接關(guān)閉它绳锅,所以選擇 Without SELinux 就準(zhǔn)備開始部署了。

注意在 Additional Features 處勾選 Enable Private Networking酝掩,讓 Vultr 為你的服務(wù)器分配內(nèi)網(wǎng) IP鳞芙。

設(shè)置好兩個節(jié)點的 HostName 防止待會節(jié)點名稱沖突。

hostname

Deploy Now 之前將 Servers Qty 增加為 2 期虾,這樣就不用反復(fù)打開部署頁面了原朝,直接部署兩個實例。

別被這 $20.00 /mo 嚇到了镶苞,這是每月 $20喳坠,我們只需要用完了及時銷毀就好,而且新用戶贈送的 100$ 可以用很久了茂蚓。

ECS 環(huán)境配置

部署完成兩個實例后壕鹉,就可以在 Instances 列表找到他們剃幌。 (考慮到?jīng)]有使用過云服務(wù)的讀者,這里筆者講詳細一點晾浴。)

ins2

在點進這個實例可以在 Overview 找到他的登錄賬號密碼负乡,默認用戶是 root

然后在 Settings 可以看到這兩個實例的內(nèi)網(wǎng) IP脊凰。

這里筆者的兩個實例的內(nèi)網(wǎng)如下:

實例 核心數(shù) 內(nèi)存 內(nèi)網(wǎng) IP
Master 2 4G 10.24.96.3
Node 2 4G 10.24.96.4

接下來就正式開始了抖棘,不過 ssh 進入系統(tǒng)后還需要做一些準(zhǔn)備工作。

K8s 部署準(zhǔn)備工作

首先避免不必要的麻煩笙各,先關(guān)閉 CentOS 7 的防火墻钉答,因為本身云服務(wù)廠商會有安全組础芍,我們也可以通過配置安全組來實現(xiàn)網(wǎng)絡(luò)安全防護杈抢。

systemctl disable firewalld && systemctl stop firewalld

若是前面在部署實例的時候沒有選擇 Without SELinux 這里則需要讓容器可以訪問主機文件,需要輸入以下命令仑性。

# 將 SELinux 設(shè)置為 permissive 模式(相當(dāng)于將其禁用)
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

我們還需要關(guān)閉 swap惶楼,至于為什么感興趣可以去搜一下。

swapoff -a

確保在 sysctl 配置中的 net.bridge.bridge-nf-call-iptables 被設(shè)置為 1诊杆。

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

確保已加載了 br_netfilter 模塊歼捐。這可以通過運行 lsmod | grep br_netfilter 來完成。要顯示加載它晨汹,請調(diào)用 modprobe br_netfilter豹储。

modprobe br_netfilter
lsmod | grep br_netfilter

安裝 docker

yum install -y docker
systemctl enable docker && systemctl start docker

筆者已經(jīng)將上述步驟做成了腳本,可以查看 https://gist.github.com/elfgzp/02485648297823060a7d8ddbafebf140#file-vultr_k8s_prepare-sh淘这。
為了快速進入下一步可以執(zhí)行以下命令直接跳過準(zhǔn)備操作剥扣。

curl https://gist.githubusercontent.com/elfgzp/02485648297823060a7d8ddbafebf140/raw/781c2cd7e6dba8f099e2b6b1aba9bb91d9f60fe2/vultr_k8s_prepare.sh | sh

安裝 Kubeadm

接下來的步驟可以完全參考官方文檔來了,官方文檔鏈接铝穷。

# 配置 yum 源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF

# 安裝 kubelet kubeadm kubectl
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

# 啟動 kubelet
systemctl enable --now kubelet

由于 Vultr 是國外的云主機钠怯,所以我們根本不用考慮 Google 的訪問問題,但是如果是國內(nèi)的主機需要將 yum 源的 repo 修改為以下配置曙聂。

cat << EOF > /etc/yum.repos.d/kubernetes.repo
[kuebrnetes]
name=KubernetesRepository
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
EOF

上述操作的腳本晦炊,https://gist.github.com/elfgzp/02485648297823060a7d8ddbafebf140#file-vultr_k8s_install_kubeadm-sh

curl https://gist.githubusercontent.com/elfgzp/02485648297823060a7d8ddbafebf140/raw/#/vultr_k8s_prepare.sh | sh

使用 Kubeadm 創(chuàng)建 k8s 集群

創(chuàng)建 k8s Master 節(jié)點

我們首先要在 Master 的實例上執(zhí)行 kubeadm宁脊。但是我們先使用 kubeadm config print init-defaults 來看看它的默認初始化文件断国。

kubeadm config print init-defaults

當(dāng)然你也可以生成一個配置文件后,指定配置文件進行初始化:

kubeadm config print init-defaults > kubeadm.yaml
# 修改 kubeadm.yml
kubeadm init --config kubeadm.yaml

如果初始化失敗可以執(zhí)行以下命令榆苞,進行重制:

kubeadm reset
rm -rf $HOME/.kube/config
rm -rf /var/lib/cni/
rm -rf /etc/kubernetes/
rm -rf /etc/cni/
ifconfig cni0 down
ip link delete cni0

接下來直接執(zhí)行 kubeadm init 進行初始化并思,國內(nèi)的主機可能需要修改 imageRepository 的配置,來修改 k8s 的鏡像倉庫语稠。

cat <<EOF > kubeadm.yaml
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
apiServer:
    extraArgs:
        runtime-config: "api/all=true"
kubernetesVersion: "v1.18.1"
imageRepository: registry.aliyuncs.com/google_containers
EOF
kubeadm init --config kubeadm.yaml

執(zhí)行完成后宋彼,我們會得到以下輸出:

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

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

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join {你的IP}:6443 --token 3prn7r.iavgjxcmrlh3ust3 \
    --discovery-token-ca-cert-hash sha256:95283a2e81464ba5290bf4aeffc4376b6d708f506fcee278cd2a647f704ed55d

按照他的提示弄砍,我們將 kubectl 的配置放到 $HOME/.kube/config 下,注意每次執(zhí)行完成 kubeadm init 之后输涕,配置文件都會變化音婶,所以需要重新復(fù)制。kubeadm 還會輸出 join 命令的配置信息莱坎,用于 Node 加入集群衣式。

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

如果你們是使用 root 用戶的話,可以直接利用環(huán)境變量指定配置文件:

echo 'export KUBECONFIG=/etc/kubernetes/admin.conf' >> ~/.bashrc
. ~/.bashrc

接下來使用 kubectl get nodes 來查看節(jié)點的狀態(tài):

NAME      STATUS   ROLES    AGE     VERSION
master1   NotReady    master   6m52s   v1.18.1

此時的狀態(tài)為 NotReady 當(dāng)然這個狀態(tài)是對的檐什,因為我們還沒有安裝網(wǎng)絡(luò)插件碴卧。接下來安裝網(wǎng)絡(luò)插件,這里是用的是 Weave 網(wǎng)絡(luò)插件:

kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"

還有其他的網(wǎng)絡(luò)插件可以參考官方文檔乃正,Installing a Pod network add-on住册。

可以通過查看 Pods 狀態(tài)查看是否安裝成功:

kubectl get pods -A
NAMESPACE     NAME                       READY   STATUS    RESTARTS   AGE
kube-system   coredns-66bff467f8-br94l   1/1     Running   0          14m
kube-system   coredns-66bff467f8-pvsfn   1/1     Running   0          14m
kube-system   kube-proxy-b2phr           1/1     Running   0          14m
kube-system   weave-net-8wv4k            2/2     Running   0          2m2s

如果發(fā)現(xiàn) STATUS 不是 Running 可以通過,kubectl logskubectl describe 命令查看詳細的錯誤信息瓮具。

kubectl logs weave-net-8wv4k -n kube-system weave
kubectl logs weave-net-8wv4k -n kube-system weave-npc
kubectl describe pods weave-net-8wv4k -n kube-system 

此時的 Master 節(jié)點狀態(tài)就變?yōu)?Ready 了荧飞。

NAME      STATUS   ROLES    AGE     VERSION
master1   Ready    master   6m52s   v1.18.1

部署 Node 節(jié)點

部署 Node 節(jié)點同樣需要「準(zhǔn)備階段」的工作,這里就不一一講解了名党,直接執(zhí)行腳本:

curl https://gist.githubusercontent.com/elfgzp/02485648297823060a7d8ddbafebf140/raw/781c2cd7e6dba8f099e2b6b1aba9bb91d9f60fe2/vultr_k8s_prepare.sh | sh
curl https://gist.githubusercontent.com/elfgzp/02485648297823060a7d8ddbafebf140/raw/781c2cd7e6dba8f099e2b6b1aba9bb91d9f60fe2/vultr_k8s_install_kubeadm.sh | sh

我們需要執(zhí)行 kubeadmMaster 節(jié)點初始化后輸出的 join 命令叹阔。如果不記得了,可以通過在 Master 執(zhí)行以下命令重新獲得 join 命令传睹。

kubeadm token create --print-join-command
kubeadm join {你的IP}:6443 --token m239ha.ot52q6goyq0pcadx     --discovery-token-ca-cert-hash sha256:95283a2e81464ba5290bf4aeffc4376b6d708f506fcee278cd2a647f704ed55d

若加入時出現(xiàn)問題同樣可以使用 kubeadm rest 來重置耳幢。

kubeadm reset

當(dāng)然 join 命令也是可以提供配置文件的,我們只需要在 Node 上執(zhí)行以下命令就可以生成默認配置文件了欧啤。

kubeadm config print join-defaults > kubeadm-join.yaml
kubeadm join --config kubeadm-join.yaml

然后再次通過 kubectl 查看 nodes 狀態(tài)睛藻,如果希望在 Node 節(jié)點上執(zhí)行的話,需要將 Master 上的 /etc/kubernetes/admin.conf 復(fù)制到 Node 節(jié)點上堂油。

接下來我們驗證 Node 的狀態(tài)為 Ready 則加入成功:

kubectl get nodes
NAME      STATUS   ROLES    AGE     VERSION
master1   Ready    master   6m52s   v1.18.1
node1     Ready    <none>   29s     v1.18.1

總結(jié)

以上就是在 Vultr 上使用 kubeadm 部署 k8s 集群的所有過程啦修档,當(dāng)然也是踩了很多坑。特別是想在不同的云主機上部署府框,最終還是選擇使用同一個云服務(wù)商的 ECS吱窝。

參考文檔

Kubernetes權(quán)威指南:從Docker到Kubernetes實踐全接觸(第4版)

深入剖析Kubernetes

本文由博客一文多發(fā)平臺 OpenWrite 發(fā)布!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末迫靖,一起剝皮案震驚了整個濱河市院峡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌系宜,老刑警劉巖照激,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異盹牧,居然都是意外死亡俩垃,警方通過查閱死者的電腦和手機励幼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來口柳,“玉大人苹粟,你說我怎么就攤上這事≡灸郑” “怎么了嵌削?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長望艺。 經(jīng)常有香客問我苛秕,道長,這世上最難降的妖魔是什么找默? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任艇劫,我火速辦了婚禮,結(jié)果婚禮上啡莉,老公的妹妹穿的比我還像新娘港准。我一直安慰自己旨剥,他們只是感情好咧欣,可當(dāng)我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著轨帜,像睡著了一般魄咕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蚌父,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天哮兰,我揣著相機與錄音,去河邊找鬼苟弛。 笑死喝滞,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的膏秫。 我是一名探鬼主播右遭,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼缤削!你這毒婦竟也來了窘哈?” 一聲冷哼從身側(cè)響起邢疙,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤谅海,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后卫漫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體帅刀,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡让腹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年远剩,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片骇窍。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡民宿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出像鸡,到底是詐尸還是另有隱情活鹰,我是刑警寧澤,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布只估,位于F島的核電站志群,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蛔钙。R本人自食惡果不足惜锌云,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望吁脱。 院中可真熱鬧桑涎,春花似錦、人聲如沸兼贡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽遍希。三九已至等曼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間凿蒜,已是汗流浹背禁谦。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留废封,地道東北人州泊。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像漂洋,于是被迫代替她去往敵國和親遥皂。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,086評論 2 355

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