[精讚] [會員登入]
469

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

你可能感興趣的文章

在windows server建立radius服務使用active directory帳號驗證 setup windows server to add radius service using active directory accounts for authentication

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

在家設定openvpn server on pfsense 在家設定openvpn server on pfsense

在ESXI6.7修改系統時間 how to modify esxi system time setting for good

logrotate執行權限問題 logrotate will failed to execute if selinux policy not setup correctly

setup jira using ssl on apache reverse proxy 設定jira使用https連線

我有話要說

>>

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

訪客留言

[無留言]

隨機好文

debian安裝drupal細節 設定apache2的細節

[NetBeans]如何從git下載專案改建為自己的專案 修改git專案

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

在windows環境下強制刪除無法以檔案總管刪除的檔案或目錄 how to remove directories or files that cannot be deleted by default file manager

在ubuntu18.04桌面版安裝中文注音輸入法 如何在ubuntu桌面使用新酷音注音輸入法