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

(主節點)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)

主從節點安裝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

其中,/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

若出現以下報錯,則執行:yum install -y ca-certificates

初始化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

若出現以下錯誤:

根據報錯資訊可知,是因為:/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

若不加這段:–ignore-preflight-errors=Swap,則可能會出現如下報錯:
[ERROR Swap]: running with swap on is not supported. Please disable swap
查看集群搭建結果
kubectl get nodes

由於還沒有進行網路配置,故集群所有節點的狀態為:NotReady
worker節點上面更是會直接報錯:

運行 出現 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

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