使用 kubeadm 佈署 Kubernetes
Tags: K8s, Kubernetes, Kubectl, Kubeadm

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

實驗環境

OS: ubuntu 18.04

k8s: 1.19

docker-engine version: 19.03.12

Outline:

Step 1: Delete SWAP (all machine)

(all machine) Step 2: Install docker (all machine)

(all machine) Step 3: Install Kubectl Kubeadm Kubelet (all machine)

(all machine) Step 3–1: Init k8s master

Step 4: Install CNI (master)

(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 pods NAME 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 nodes NAME 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

參考資料: