[精讚] [會員登入]
472

installation and implementation of k8s clusters on CentOS8

k8s入坑

分享此文連結 //n.sfs.tw/15010

分享連結 installation and implementation of k8s clusters on CentOS8@外行中的外行
(文章歡迎轉載,務必尊重版權註明連結來源)
2021-06-23 11:32:33 最後編修
2021-03-15 23:29:37 By jung
 

自動目錄

先紀錄一下安裝遇到的坑洞

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之前二台都要做的事

dnf -y upgrade
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
cat <<EOF > /etc/sysctl.d/k8s.conf
  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

sysctl --system

2-1.先把swap關掉,目的是為了提高叢集運作的IO效能

手動關閉

swapoff -a

但重新開機又會啟用,可到/etc/fstab把swap分割區直接註解掉,就永久封印了

2-2.使用yum repo來安裝docker-ce


dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
//需依照版本修改rpm檔名
dnf install docker-ce --nobest -y
systemctl start docker && systemctl enable docker.service

2-3.安裝kubernetes 套件

目前只有支援到el7版本

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
exclude=kubelet kubeadm kubectl
EOF
dnf upgrade -y
dnf install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
systemctl enable kubelet && systemctl start kubelet

 

3.建立k8s master 遇到的坑

kubeadm config images pull

3-1.打開通訊埠

firewall-cmd --zone=public --permanent --add-port={6443,2379,2380,10250,10251,10252}/tcp
firewall-cmd --zone=public --permanent --add-rich-rule 'rule family=ipv4 source address=192.168.0.20/32 accept'
firewall-cmd --zone=public --permanent --add-rich-rule 'rule family=ipv4 source address=172.17.0.0/16 accept'
firewall-cmd --reload

3-2.啟動kubernetes內部通訊網路aka. CNI

很重要!這邊做錯就要重置CNI 

這裡一定要加"--apiserver-advertise-address="這個參數,帶的是cluster master servies所在的IP

kubeadm init --apiserver-advertise-address=192.168.0.10 --pod-network-cidr 192.168.10.0/16

3-3.將CNI設定檔放到系統指定的位置

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=/etc/kubernetes/admin.conf //啟動kubeadm時,程式提示的方法,用root執行可取代上面三行
 
查到一篇可以改安裝通用的 flannel容器網路介面CNI(Container Network Interface)元件
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服務包

kubectl taint nodes --all node-role.kubernetes.io/master-

3-5.如何重設CNI

kubeadm reset
cd ~/.kube/
rm -rf *

把舊的設定檔清除後,再重新執行

kubeadm init

4.建立Replication controller複本抄寫控制站

4-1.編輯yaml設定檔

vim redis-master-controller.yaml
注意!分節空白間隔一定要有正確階層!否則無法執行!
apiVersion: v1
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.啟動複本抄寫控制

要加 --validate=false 參數
kubectl create -f redis-master-controller.yaml --validate=false
//如果上面都設定正確,執行下列指令就會看到服務已經啟動了
kubectl get rc
kubectl get pods

4-3.觀察kubernetes log狀況

journalctl -f -u kubelet

 

 

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

 

END

你可能感興趣的文章

JIRA instance migration phase1 how to migrate JIRA from centos6 to centos7

測試及處理slow http attack on Apache 2.4.6 at CentOS-7 avoiding and testing slow http attack

如何在ubuntu 18.04上設定一開機就啟動virtualbox某個vm a way to setup ubuntu18.04 for start vm on boot

how to resolve memory allocation issue on proxmox when creating vm, sometimes the log shows fail message of Cannot_allocate_memory

JIRA using gmail as smtp outgoing mail sender 如何設定jira使用gmail信箱送信

wireguard vpn setup and implementation 在UBUNTU20.04LTS server架設wireguard vpn讓ios及android裝置使用

我有話要說

>>

限制:留言最高字數1000字。 限制:未登入訪客,每則留言間隔需超過10分鐘,每日最多5則留言。

訪客留言

[無留言]

隨機好文

更新IDP程式以新增及修正本地管理帳號登入 add locallogin page and function with local authorized account

更新程式取消google recaptcha改用輸入驗證碼 update cnclibs to 0.0.8.6

在新版谷歌協作平台嵌入edimax或lass空氣盒子讀取數值並視覺化 embeeded javascript to read and visualized lass json value on new google site

intellij IDEA git設定說明 whenever using git push fuction in the intellij IDEA

zfs on ubuntu 20.04 how to destroy zfs pool while error message said pool is busy