Kubernetes(簡稱K8s)是一個開源的容器編排平臺,旨在自動化部署、擴展和管理容器化應用。K8S環境搭建過程比較復雜,涉及到非常多組件安裝和系統配置,本文將會詳細介紹如何在服務器上搭建好Kubernetes集群環境。 |
?
在學習和使用Kubernetes過程中,K8S環境搭建是新手非常頭疼的一環,K8S提供了多種安裝的方式包括Minikube、kubeadm、Rancher、sealos等,目前比較常見的是采用kubeadm和sealos方式進行安裝,sealos相比kubeadm更加適合入門學習者,只需要幾條命令就可以完成整個集群的部署。而Kubeadm適用于生產環境和復雜場景,針對希望有更多個性化定制的用戶,但安裝和維護復雜度較高。本文包含了kubeadm和sealos兩種方式的安裝,作為新手更加推薦使用sealos。
集群環境準備
1、集群環境說明
要求條件:
-
一臺或多臺Linux系統機器,推薦使用的是centos 7.5版本或以上
-
每臺Linux至少有2GB的內存和2個CPU、硬盤30GB
-
所有的機器可以相互ping通
集群結構:
-
kubernetes集群主要包含master(主控節點)和node(工作節點)組成,master和node一般是多對多或者一對多的模式,
-
為了學習使用這里選擇1個master節點和多個node節點(這里一個節點相當于就是一臺Linux系統主機)
部署集群圖如下:
這里為了學習方便,采用了在本地電腦安裝虛擬軟件VMware(當然也可以使用VitualBox),然后再虛擬機VMware中安裝centos,虛擬機安裝centos過程省略,大家可以自行百度搜索相關教程,這里分別這里分別安裝好master、node1、node2虛擬機:
2、配置節點主機名
執行以下命令,依次配置各個節點主機名,這里是為了方便后面服務的訪問
# master節點
[root@localhost ~]# hostnamectl set-hostname master && bash
# node1節點
[root@localhost ~]# hostnamectl set-hostname node1 && bash
# node2節點
[root@localhost?~]#?hostnamectl?set-hostname?node2?&&?bash
3、配置節點網絡
進入VMware -> 設置 ->虛擬網絡編輯器,查看VMnet8對應的子網IP地址:
分別編輯各個節點的網絡配置文件
[root@master?~]#?vim?/etc/sysconfig/network-scripts/ifcfg-ens33
修改以下關鍵項
master節點:
ONBOOT=yes
IPADDR=192.168.10.100
GATEWAY=192.168.10.2
DNS1=114.114.114.114
node1節點:
ONBOOT=yes
IPADDR=192.168.10.101
GATEWAY=192.168.10.2
DNS1=114.114.114.114
node2節點:
ONBOOT=yes
IPADDR=192.168.10.102
GATEWAY=192.168.10.2
DNS1=114.114.114.114
4、修改hosts文件
編輯/etc/hosts文件,配置主機名和IP地址的映射解析,這一步是為了方便節點間的相互訪問,分別在三臺主機下添加以下的配置:???????
192.168.10.100 master
192.168.10.101 node1
192.168.10.102?node2
5、測試虛擬機網絡
通過Xshell ssh工具去連接對應的節點主機(其他的ssh連接工具都可以)
測試各個節點主機是否能夠訪問外網:
測試各個節點主機之間是否能夠相互ping通
集群環境初始化
1、關閉防火墻
在三個節點上分別執行???????
[root@master ~]# systemctl stop firewalld
[root@master?~]#?systemctl?disable?firewalld
2、關閉SELINUX
在三個節點上分別執行???????
# 編輯 /etc/selinux/config 文件,修改SELINUX的值為disable
SELINUX=disabled
注意:生效需要重啟linux
3、關閉swap分區
在三個節點上分別執行???????
# 編輯/etc/fstab 文件,注釋掉 /dev/mapper/centos-swap swap 這一行
#?/dev/mapper/centos-swap?swap
注意:生效需要重啟linux
4、修改內核參數
在三個節點上分別執行???????
# 增加/etc/sysctl.d/kubernetes.conf 文件,添加如下配置:
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
# 重新加載配置
[root@master ~]# sysctl -p
# 加載網橋過濾模塊
[root@master ~]# modprobe br_netfilter
# 查看網橋過濾模塊是否加載成功
[root@master?~]#?lsmod?|?grep?br_netfilter
出現如下結果代表OK:
5、配置時間同步
在三個節點上分別執行
[root@master ~]# systemctl start chronyd
[root@master ~]# systemctl enable chronyd
[root@master?~]#?date
6、加載ipvs模塊
在三個節點上分別執行???????
# 1.安裝ipset和ipvsadm
[root@master ~]# yum install ipset ipvsadm -y
# 2.添加需要加載的模塊寫入腳本文件
[root@master ~]# cat <<EOF> /etc/sysconfig/modules/ipvs.modules
# 將以下腳本內容復制到命令行回車即可
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
# 3.為腳本添加執行權限
[root@master ~]# chmod +x /etc/sysconfig/modules/ipvs.modules
# 4.執行腳本文件
[root@master ~]# /bin/bash /etc/sysconfig/modules/ipvs.modules
# 5.查看對應的模塊是否加載成功
[root@master?~]#?lsmod?|?grep?-e?ip_vs?-e?nf_conntrack_ipv4
以上操作完成之后記得分別重啟Linux主機!!!
sealos方式安裝K8S集群
1、下載sealos
wget?https://github.com/labring/sealos/releases/download/v4.3.7/sealos_4.3.7_linux_amd64.tar.gz
2、解壓賦予權限
tar?zxvf?sealos_4.3.7_linux_amd64.tar.gz?sealos?&&?chmod?+x?sealos?&&?mv?sealos?/usr/bin
3、安裝K8S集群
sealos run labring/kubernetes:v1.25.0 labring/helm:v3.8.2 labring/calico:v3.24.1 \
--masters 192.168.10.100 \
--nodes?192.168.10.101,192.168.10.102?-p?root?
參數說明:
-
--masters master 節點地址列表
-
–nodes node 節點地址列表
-
-p ssh登錄密碼(如果配置了ssh免密則不需要加-p參數)
4、查看連接狀態
在master節點上面執行kubectl get nodes命令查看master和node節點狀態
[root@master?~]#?kubectl?get?nodes
這里會顯示 NotReady ,代表未就緒狀態:
需要等待一會兒,節點狀態會自動被修改為Ready:
kubeadm方式安裝K8S集群
1、安裝Docker
# 1、切換鏡像源
[root@master ~]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
# 2、查看當前鏡像源中支持的docker版本
[root@master ~]# yum list docker-ce --showduplicates
# 3、安裝特定版本的docker-ce
[root@master ~]# yum install --setopt=obsoletes=0 docker-ce-18.06.3.ce-3.el7 -y
# 4、添加一個配置文件
[root@master ~]# mkdir /etc/docker
[root@master ~]# cat <<EOF> /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": ["https://kn0t2bca.mirror.aliyuncs.com"]
}
EOF
# 5、啟動dokcer
[root@master ~]# systemctl restart docker
[root@master?~]#?systemctl?enable?docker
2、安裝Kubernetes組件
???????
# 1、由于kubernetes的鏡像在國外,速度比較慢,這里切換成國內的鏡像源,編輯/etc/yum.repos.d/kubernetes.repo,添加下面的配置
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgchech=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
# 2、安裝kubeadm、kubelet和kubectl
[root@master ~]# yum install --setopt=obsoletes=0 kubeadm-1.17.4-0 kubelet-1.17.4-0 kubectl-1.17.4-0 -y
# 3、配置kubelet的cgroup,編輯/etc/sysconfig/kubelet, 添加下面的配置
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"
# 4、設置kubelet開機自啟
[root@master?~]#?systemctl?enable?kubelet
3、準備集群鏡像???????
# 1、在安裝kubernetes集群之前,必須要提前準備好集群需要的鏡像,所需鏡像可以通過下面命令查看
[root@master ~]# kubeadm config images list
# 2、下載鏡像,此鏡像kubernetes的倉庫中,由于網絡原因,無法連接,下面提供了一種替換方案
images=(
kube-apiserver:v1.17.4
kube-controller-manager:v1.17.4
kube-scheduler:v1.17.4
kube-proxy:v1.17.4
pause:3.1
etcd:3.4.3-0
coredns:1.6.5
)
for imageName in ${images[@]};do
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
done
4、master節點集群初始化
在master節點上面執行kubeadm init命令進行集群初始化???????
# 1、創建集群,這里192.168.119.100 指定為master主機的IP地址,其他的配置不用修改
[root@master ~]# kubeadm init \
--kubernetes-version=v1.17.4 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--apiserver-advertise-address=192.168.119.100
# 2、創建必要文件
[root@master ~]# mkdir -p $HOME/.kube
[root@master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master?~]#?sudo?chown?$(id?-u):$(id?-g)?$HOME/.kube/config
5、node節點連接master節點
在node1和node2節點上分別去連接master節點集群
kubeadm?join?192.168.10.100:6443?--token?c78u0z.tqyd4xh4tc2s084f?????--discovery-token-ca-cert-hash?sha256:783e7453cb11db521a7fc3661caa0ac5cf6c6fb153d7d95d222882af7aae94c7
6、查看連接狀態
在master節點上面執行kubectl get nodes命令查看master和node節點狀態
[root@master?~]#?kubectl?get?nodes
這里會顯示 NotReady ,代表未就緒狀態,我們還需要安裝網絡插件
7、安裝網絡插件
在master節點上安裝網絡插件???????
# 1、下載flannel網絡資源配置文件
[root@master ~]# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 2、啟動flannel網絡
[root@master ~]# kubectl apply -f kube-flannel.yml
# 3、再次查看節點狀態
[root@master?~]#?kubectl?get?nodes
這里啟動flannel網絡之后一般需要等待一會兒,節點狀態會被修改為Ready:
集群環境測試???????
# 1、創建nginx服務
kubectl create deployment nginx --image=nginx:1.14-alpine
# 2、暴露端口
kubectl expose deployment nginx --port=80 --type=NodePort
# 3、查看pod和服務信息
kubectl?get?pod,service
在本地電腦打開瀏覽器測試nginx是否能夠正常訪問: