使用 Kubeadm 佈署 K8S 集群

黃馨平
Jackycsie
Published in
6 min readSep 15, 2020

本文將簡單介紹如何透過 kubeadm 手動安裝 k8s 集群,因為 k8s 本身的教學文件時在寫得太好了,所以其實也可以去官網看,這裡是順便紀錄我本身碰到的坑。

實驗環境

  • OS: ubuntu 18.04
  • k8s: 1.19
  • docker-engine version: 19.03.12

Outline:

  • Step 1: Delete SWAP (all machine)
  • Step 2: Install docker (all machine)
  • Step 3: Install Kubectl Kubeadm Kubelet (all machine)
  • Step 3–1: Init k8s master
  • Step 4: Install CNI (master)
  • Step 5: Apply cluster node (all node)

Step 1: Delete SWAP

在安裝 k8s 前,必須把所有 node 的 swap disable 。

$ sudo swapoff -a
$ sudo vim /etc/fstab
# /swapfile ... ...

Step 2: Install docker

在所有的 node 的中 install docker

Step 3: Install Kubectl Kubeadm Kubelet

首先在所有節點安裝下面指令

安裝完後,確認版本

$ kubectl version
$ kubeadm version
$ kubelet version
{Major:"1", Minor:"19", GitVersion:"v1.19.1".....

控制版本

# 將 kubelet kubeadm kubectl mark 起來,不要讓 Node 自己升級。
$ sudo apt-mark hold kubelet kubeadm kubectl
$ kubeadm config images pull

Step 3–1 : 在 master 中初始化 kubeadm

kubeadm init

接著會出現 Your Kubernetes control-plane has initialized successfully! 以及可以加入其他節點的 command 。

$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 下面的命令是透過 kubeadm 將其他的 node 加入到 k8s 的集群中
$ kubeadm join 172.16.96.13:6443 \
— token 6bxsn0.1baqaetwjzwqbvii \
— discovery-token-ca-cert-hash \
sha256:b66de07029fb42d7a17d0cf01bbea5953445892ab5d9870afadfdab6b76f5bc5

現在下 command,Status 會顯示 NotReady ,因為還沒安裝 CNI。

$ kubectl get nodes NAME       STATUS     ROLES    AGE     VERSION
master NotReady master 14m v1.19.1

看一下目前現有的 pods 有哪些。

$ kubectl -n kube-system get podsNAME                             READY   STATUS    RESTARTS   AGE
coredns-f9fd979d6-9dx84 0/1 Pending 0 2m53s
coredns-f9fd979d6-xqcg9 0/1 Pending 0 2m52s
etcd-master 1/1 Running 0 2m51s
kube-apiserver-master 1/1 Running 0 2m51s
kube-controller-manager-master 1/1 Running 0 2m51s
kube-proxy-5gsgw 1/1 Running 0 2m53s
kube-scheduler-master 1/1 Running 0 2m50s

Step 4: Install CNI

接著安裝 CNI ,我所使用的是 Calico 因為這是官方建議的

$ curl https://docs.projectcalico.org/manifests/calico.yaml -O
$ kubectl apply -f calico.yaml
$ kubectl -n kube-system get pod -w
$ kubectl get nodesNAME STATUS ROLES AGE VERSION
master Ready master 15m v1.19.1

Step 5: Apply cluster node

在每一個 node 打上剛剛 kubeadm init 後出現的 command 。

$ kubeadm join 172.16.96.13:6443 \
— token 6bxsn0.1baqaetwjzwqbvii \
— discovery-token-ca-cert-hash \
sha256:b66de07029fb42d7a17d0cf01bbea5953445892ab5d9870afadfdab6b76f5bc5
# 如果 token 不見得話,可以使用
$ kubeadm token list
# 另外若是 token 過期的時候,就可以使用
$ kubeadm token create --print-join-command
# 使用下面指令就可以得知所有 node 已被加入到集群中。
$ kubectl get nodes
master Ready master 61m v1.19.1
node-001 Ready <none> 51m v1.19.1
node-002 Ready <none> 47m v1.19.1
node-003 Ready <none> 47m v1.19.1
node-004 Ready <none> 46m v1.19.1
node-005 Ready <none> 46m v1.19.1
node-006 Ready <none> 46m v1.19.1
node-007 Ready <none> 46m v1.19.1
node-008 Ready <none> 46m v1.19.1
node-009 Ready <none> 46m v1.19.1
node-010 Ready <none> 46m v1.19.1
node-011 Ready <none> 46m v1.19.1

最後可以使用下面 command 看一下目前有的元件服務細節。

$ kubectl -n kube-system get all

刪除 Kubenetes cluster

$ kubeadm reset
$ sudo apt-get purge kubeadm kubectl kubelet kubernetes-cni kube*
$ sudo apt-get autoremove
$ sudo rm -rf ~/.kube

參考資料:

--

--

黃馨平
Jackycsie

閱讀本是尋常事,繁華靜處遇知音