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,叢集搭建成功。