本文將簡單介紹如何透過 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
參考資料: