k8s集群搭建過程詳解

準備工作

安裝CentOS7虛擬機

安裝Docker

關閉CentOS7自帶的防火牆服務

systemctl disable firewalld
systemctl stop firewalld

修改主機名

vim /etc/hostname
  • k8s-master01(對應主機ip:192.168.91.129)
  • k8s-worker01(對應主機ip:192.168.91.130)
  • k8s-worker02(對應主機ip:192.168.91.131)

配置ip地址

配置3台測試機的/etc/hosts文件(在三台伺服器上同步)
vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.91.129 k8s-master01
192.168.91.130 k8s-worker01
192.168.91.131 k8s-worker02

獲取源文件

(主從節點都需要)wget -O /etc/yum.repos.d/docker-ce.repo //mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
(主從節點都需要)rpm –import rpm-package-key.gpg
0
(主節點)yum repolist
(主節點)新建和編輯repo文件:
vim /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=//mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=//mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg //mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
(主節點)
cd /etc/yum.repos.d
scp CentOS-Base.repo docker-ce.repo kubernetes.repo k8s-worker01:/etc/yum.repos.d/
scp CentOS-Base.repo docker-ce.repo kubernetes.repo k8s-worker02:/etc/yum.repos.d/

安裝Kubernetes

修改/etc/docker/daemon.json
添加:”exec-opts”: [“native.cgroupdriver=systemd”](用於消除安裝k8s集群時的警告)

重啟docker

systemctl daemon-reload
systemctl restart docker

主從節點安裝Kubernetes組件鏡像(指定為v1.17.6版本)

更新快取(主從節點都需要)
yum clean all
yum -y makecache
(若是執行第二步的時候報錯:Cannot find a valid baseurl for repo: base/7/x86_64,則檢查一下網路問題)
驗證源是否可用
  yum list | grep kubeadm(如果提示要驗證yum-key.gpg是否可用,輸入y)
0
主從節點安裝k8s-1.17.6:yum install -y kubelet-1.17.6-0 kubeadm-1.17.6-0 kubectl-1.17.6-0

配置、啟動kubelet並設置開機啟動(主從節點都需要)

查看相關配置:rpm -ql kubelet
0
其中,/etc/kubernetes/manifests 為清單目錄,/etc/sysconfig/kubelet 為配置文件,/usr/lib/systemd/system/kubelet.service 為主程式。
增加配置資訊:
vim /etc/sysconfig/kubelet
  KUBELET_EXTRA_ARGS=”–cgroup-driver=systemd”
  KUBELET_EXTRA_ARGS=”–fail-swap-on=false”(直接關閉交換分區會導致虛擬機記憶體資源緊張,故直接配置忽略swap報錯,這樣在 kubeadm init 的時候,kubelet才能正常運行)
啟動kubelet並設置開機啟動(這裡可以不執行啟動命令,在主節點初始化時/從節點加入集群時會啟動kubelet)
  systemctl enable kubelet

導入k8s及相關docker鏡像

集群初始化鏡像

先手動將集群初始化鏡像文件k8sv1.17.6.tar上傳到各個節點的/root目錄下
進入各個節點tar所在目錄,使用如下命令導入鏡像
docker load -i k8sv1.17.6.tar

集群初始化網路鏡像

先手動將集群網路組件calico(calico3.13.2.tar,一套開源的網路和網路安全方案)上傳到各個節點的/root目錄下,集群所有節點都需要導入

導入calico.yml

k8s集群需要的網路插件為3.13版本,集群所有節點都需要導入
cd /root
0
若出現以下報錯,則執行:yum install -y ca-certificates
0

初始化k8s集群

初始化master節點

kubeadm init –apiserver-advertise-address=192.168.91.129 –kubernetes-version v1.17.6 –service-cidr=10.1.0.0/16 –pod-network-cidr=10.81.0.0/16 –image-repository=registry.aliyuncs.com/google_containers –ignore-preflight-errors=Swap
0
若出現以下錯誤:
0
根據報錯資訊可知,是因為:/proc/sys/net/bridge/bridge-nf-call-iptables 和 /proc/sys/net/ipv4/ip_forward 的內容沒有被設置為1
執行以下兩條命令即可:
echo “1” >/proc/sys/net/bridge/bridge-nf-call-iptables
echo “1” >/proc/sys/net/ipv4/ip_forward
按照提示在master執行如下操作
  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

worker節點加入集群

kubeadm join 192.168.91.129:6443 –token chijon.vjnq37z0titsxbmc –discovery-token-ca-cert-hash sha256:eca67b2c5ae245a6f203bc7de1030828e0f0d9fbdd5e9a640b83ab22a9d39609 –ignore-preflight-errors=Swap
0
 
若不加這段:–ignore-preflight-errors=Swap,則可能會出現如下報錯:
[ERROR Swap]: running with swap on is not supported. Please disable swap

查看集群搭建結果

kubectl get nodes
0
由於還沒有進行網路配置,故集群所有節點的狀態為:NotReady
worker節點上面更是會直接報錯:
0
運行 出現 The connection to the server localhost:8080 was refused – did you specify the right host or port? 的錯誤
  • 出現這個問題的原因是kubectl命令需要使用kubernetes-admin來運行,解決方法如下,將主節點中的【/etc/kubernetes/admin.conf】文件拷貝到從節點相同目錄下,然後配置環境變數
    • echo “export KUBECONFIG=/etc/kubernetes/admin.conf” >> ~/.bash_profile
    • source ~/.bash_profile
  • 如果某個節點的/etc/kubernetes目錄下沒有admin.conf這個配置文件,則直接將主節點上的配置文件複製過去

網路安裝(主從都需要)

cd /root
kubectl apply -f calico.yaml

kubectl命令自動補全

echo “source <(kubectl completion bash)” >> ~/.bash_profilesource ~/.bash_profile

再次查看集群搭建結果

kubectl get nodes
k8s-master01
0
可以看到集群所有節點的狀態為:Ready
若某台虛擬機關機或斷網了,則狀態會變為 NotReady,重啟或聯網之後會自動加入集群,變為 Ready