自動目錄
- 1.啟用CentOS-8 cockpit
- 2. 建立master & cluster node之前二台都要做的事
- 3.建立k8s master 遇到的坑
- 4.建立Replication controller複本抄寫控制站
- 5.啟動cluster worker node新增叢集節點
先紀錄一下安裝遇到的坑洞
https://upcloud.com/community/tutorials/install-kubernetes-cluster-centos-8/
這篇雖然是用centos-8,但是用到的套件是for centos-7的
https://blog.johnwu.cc/article/kubernetes-nodes-notready.html
https://ithelp.ithome.com.tw/articles/10193232
https://www.itread01.com/content/1544953530.html
kubenets CNI
https://ithelp.ithome.com.tw/articles/10221034
步驟如下
1.啟用CentOS-8 cockpit
systemctl enable --now cockpit.socket
cockpit 很好用,一定要先開,有web terminal 可以複製貼上
2. 建立master & cluster node之前二台都要做的事
setenforce 0
sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
modprobe br_netfilter
firewall-cmd --add-masquerade --permanent
firewall-cmd --reload
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
echo "br_netfilter" > /etc/modules-load.d/br_netfilter.conf
參照 Oracle container User's guide ,將 br_netfilter模組特別寫入/etc/modules-load.d的目錄中,讓重開機後的作業系統能夠自動載入
https://docs.oracle.com/cd/E52668_01/E88884/html/requirements-network.html
2-1.先把swap關掉,目的是為了提高叢集運作的IO效能
手動關閉
但重新開機又會啟用,可到/etc/fstab把swap分割區直接註解掉,就永久封印了
2-2.使用yum repo來安裝docker-ce
dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
2-3.安裝kubernetes 套件
目前只有支援到el7版本
[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
exclude=kubelet kubeadm kubectl
EOF
3.建立k8s master 遇到的坑
3-1.打開通訊埠
3-2.啟動kubernetes內部通訊網路aka. CNI
很重要!這邊做錯就要重置CNI
這裡一定要加"--apiserver-advertise-address="這個參數,帶的是cluster master servies所在的IP
3-3.將CNI設定檔放到系統指定的位置
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
https://blog.tomy168.com/2019/08/centos-76-kubernetes.html
3-4.啟動位於master節點的Pod服務包
3-5.如何重設CNI
把舊的設定檔清除後,再重新執行
kubeadm init
4.建立Replication controller複本抄寫控制站
4-1.編輯yaml設定檔
kind: ReplicationController
metadata:
name: redis-master
labels:
name: redis-master
spec:
replicas: 1
selector:
name: redis-master
template:
metadata:
labels:
name: redis-master
spec:
containers:
- name: master
image: kubeguide/redis-master
ports:
- containerPort: 6379
4-2.啟動複本抄寫控制
kubectl get pods
4-3.觀察kubernetes log狀況
5.啟動cluster worker node新增叢集節點
按照上面的步驟裝完k8s及docker ce後,節點怎麼都無法加入master控制站
原來是CNI的問題
找到這個參數將預設的network-plugin=cni 刪除,就正常了
/var/lib/kubelet/kubeadm-flags.env
#KUBELET_KUBEADM_ARGS="--network-plugin=cni --pod-infra-container-image=k8s.gcr.io/pause:3.2"
KUBELET_KUBEADM_ARGS="--pod-infra-container-image=k8s.gcr.io/pause:3.2"
改完要重新啟動kubelet
systemctl restart kubelet
修改/etc/fstab將swap永久關閉
vi /etc/fstab
mount -a
free -h
在mster主要節點上查詢運作中的pods及nodes
kubectl get pods
kubectl get nodes
5-1.節點要開啟防火牆的通訊埠號
firewall-cmd --zone=public --permanent --add-port={10250,30000-32767}/tcp
firewall-cmd --reload
5-2.使用kubeadm加入叢集
在上面主節點啟動時用kubeadm init產生的token來加入叢集
需切換成root或使用sudo
sudo kubeadm join 參數 token會過期(24hr)
https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-token/
所以要再到master(control-plane)重新產生節點加入叢集使用的token
kubeadm token create --print-join-command
加上print-join-command會產生完整的指令可以複製貼上到節點終端機執行
節點上必須啟用kubelet及設定docker-ce或cri-o內部網路套件
正確無誤的話,就會出現下列畫面
加上--cri-socket=/var/run/crio/crio.sock 參數是因為第二台ubuntu server當節點我使用cri-o套件管理k8s內部網路
參考這篇
https://tree.rocks/kubernetes-with-multi-server-node-setup-on-ubuntu-server-280066e6b106