1. 程式人生 > 實用技巧 >CentOs7.x 搭建k8s叢集

CentOs7.x 搭建k8s叢集

前言

公司準備將所有應用遷移.NetCore,並部署於k8s。藉此契機來記錄下k8s的學習過程。

一、建立三臺CentOs7.x虛擬機器

192.168.124.201

192.168.124.202

192.168.124.203

二、配置Hosts與靜態ip對映

vim /etc/hosts

192.168.124.201 k8s-master

192.168.124.202 k8s-node1

192.168.124.203 k8s-node2

三、關閉防火牆

systemctl stop firewalld
systemctl disable firewalld

四、關閉SELinux

sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0

五、配置核心引數,將橋接的IPv4流量傳遞倒iptables的鏈

cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

#讓上述命令生效
sysctl --system

六、關閉swap分割槽=>K8S中不支援swap分割槽

vim /etc/fstab

#註釋下面語句
#/dev/mapper/centos-swap swap                    swap    defaults        0 0

#執行以下命令
echo vm.swappiness=0 >> /etc/sysctl.conf
sudo reboot
#驗證Swap行均為o

free -m

7、安裝docker

配置yum 的阿里雲包源

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

檢視所有docker版本

yum list docker-ce --showduplicates | sort -r

本次選擇docker版本 docker-ce-18.06.3

sudo yum install docker-ce-18.06.3.ce

配置開機啟動docker

systemctl start docker 
systemctl enable  docker

8、安裝Kubeadm、kubelet、kubectl

配置阿里雲Yum軟體源

cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

Kubeadm、kubelet、kubectl 三者的版本需要統一

檢視kubelet版本

yum list kubelet --showduplicates | sort -r

選擇 kubelet 版本1.19.2,執行下面命令,安裝指定版本的kubelet、kubeadm、kubectl安裝

yum install -y kubelet-1.19.2-0.x86_64 --nogpgcheck kubeadm-1.19.2-0.x86_64 --nogpgcheck
kubectl-1.19.2-0.x86_64 --nogpgcheck kubernetes-cni-0.8.7 –disableexcludes=kubernetes
systemctl enable kubelet && systemctl start kubelet

下面 9-10的步驟只需要在Master節點執行-------------------------------------------------------------------------------------------------

9、初始化Kubernetes Master

--apiserver-advertise-address 為Master的IP

kubeadm init \
--apiserver-advertise-address=192.168.124.201 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.19.2 \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16

此過程利用kubeadm幫我們去安裝k8s需要的映象以及相關外掛。

初始化成功會有如下提示:

標紅的為node節點加入叢集命令,忘了也可以重新生成。下面再介紹相關命令。

初始化成功後,為順利使用kubectl,執行以下命令:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

執行kubectl get nodes,檢視master節點狀態:

master 狀態為NotReady

通過如下命令檢視kubelet狀態:

journalctl -xef -u kubelet -n 20

提示未安裝cni 網路外掛。

10、安裝flannel網路外掛(CNI)

該映象在國外,有可能出現ImagePullError等錯誤,下面提供幾種方法解決:

首先先檢視該flannel的yml檔案引用了那些映象,把yml下載下來:

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

檢視flannel映象版本

cat kube-flannel.yml |grep image|uniq

可以看到映象版本為image: quay.io/coreos/flannel:v0.13.0-rc2,該映象非常新,如果該映象全網都沒有,那麼就按照下面方法①解決,如果存在,就按照方法②執行。

解決方法:

①如果你自己有阿里雲、騰訊雲等伺服器,那麼直接在自己的伺服器上拉取該映象,下載下來,再在你的虛擬機器還原該映象。

先拉取映象:

docker pull image: quay.io/coreos/flannel:v0.13.0-rc2

將映象儲存為flannel.tar包:

docker save -o flannel.tar quay.io/coreos/flannel:v0.13.0-rc2

通過FTP將flannel.tar傳輸到本地的虛擬機器

通過下面命令載入映象:

docker load -i flannel.tar

檢視本地映象,紅色框所示,所需映象已載入成功:

執行以下命令安裝flannel即可:

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

②修改該yml檔案,將映象版本修改為已有的版本,可在https://github.com/coreos/flannel/releases上檢視flannel相關映象包。

將flannel:v0.12.0-amd64.docker 下載到本地:

修改yml檔案映象源:

sed -i 's/flannel:v0.13.0-rc2/flannel:v0.12.0-amd64/' kube-flannel.yml 

參考①中,傳輸映象到虛擬機器裝載

同樣,執行以下命令安裝flannel即可:

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

輸入命令kubectl get pods -n kube-system,等待所有外掛為running狀態

待所有pod status為Running的時候,再次執行kubectl get nodes:

如上圖所示,master狀態變為,表明Master節點部署成功!

11、部署k8s-node1、k8s-node2叢集

1、在k8s-node1、k8s-node2等兩臺虛擬機器中重複執行上面1-8的步驟,安裝好docker、kubelet、kubectl、kubeadm。

2、node節點加入叢集

在上面第九步初始化master節點成功後,輸出了下面的kubeadm join命令:

該命令就是node加入叢集的命令,分別在k8s-node1、k8s-node2上執行該命令加入叢集。

如果忘記該命令,可以通過以下命令重新生成:

kubeadm token create --print-join-command

3、在master節點執行下面命令檢視叢集狀態:

kubectl get nodes

如上圖所示,所有節點都為ready,叢集搭建成功。