?1.環(huán)境規(guī)劃
1.1 集群類型
Kubernetes集群大致分為兩類:一主多從和多主多從。
一主多從:一個Master節(jié)點和多臺Node節(jié)點,搭建簡單,但是有單機故障風險,適合用于測試環(huán)境。
多主多從:多臺Master和多臺Node節(jié)點,搭建麻煩,安全性高,適合用于生產(chǎn)環(huán)境。
為了測試方便,本次搭建的是一主多從類型的集群。
1.2 安裝方式
kubernetes有多種部署方式,目前主流的方式有kubeadm、minikube、二進制包。
① minikube:一個用于快速搭建單節(jié)點的kubernetes工具。
② kubeadm:一個用于快速搭建kubernetes集群的工具。
③ 二進制包:從官網(wǎng)上下載每個組件的二進制包,依次去安裝,此方式對于理解kubernetes組件更加有效。
我們需要安裝kubernetes的集群環(huán)境,但是又不想過于麻煩,所以選擇kubeadm方式。
1.3 主機規(guī)劃
角色 |
IP地址 |
操作系統(tǒng) |
配置 |
Master |
192.168.18.100 |
CentOS7.8+,基礎設施服務器 |
2核CPU,2G內(nèi)存,50G硬盤 |
Node1 |
192.168.18.101 |
CentOS7.8+,基礎設施服務器 |
2核CPU,2G內(nèi)存,50G硬盤 |
Node2 |
192.168.18.102 |
CentOS7.8+,基礎設施服務器 |
2核CPU,2G內(nèi)存,50G硬盤 |
2 環(huán)境搭建
2.1 前言
本次環(huán)境搭建需要三臺CentOS服務器(一主二從),然后在每臺服務器中分別安裝Docker(18.06.3)、kubeadm(1.18.0)、kubectl(1.18.0)和kubelet(1.18.0)。
沒有特殊說明,就是三臺機器都需要執(zhí)行。
2.2 環(huán)境初始化
2.2.1 檢查操作系統(tǒng)的版本
檢查操作系統(tǒng)的版本(要求操作系統(tǒng)的版本至少在7.5以上):
?
cat etc/redhat-release
2.2.2 關閉防火墻和禁止防火墻開機啟動
關閉防火墻:
systemctl stop firewalld
禁止防火墻開機啟動:
systemctl disable firewalld
2.2.3 設置主機名
設置主機名:
hostnamectl set-hostname <hostname>
設置192.168.18.100的主機名:
hostnamectl set-hostname k8s-master
設置192.168.18.101的主機名:
hostnamectl set-hostname k8s-node1
設置192.168.18.102的主機名:
hostnamectl set-hostname k8s-node2
2.2.4 主機名解析
為了方便后面集群節(jié)點間的直接調(diào)用,需要配置一下主機名解析,企業(yè)中推薦使用內(nèi)部的DNS服務器。
?
cat >> /etc/hosts << EOF
192.168.18.100 k8s-master
192.168.18.101 k8s-node1
192.168.18.102 k8s-node2
EOF
2.2.5 時間同步
kubernetes要求集群中的節(jié)點時間必須精確一致,所以在每個節(jié)點上添加時間同步:
yum install ntpdate -y
ntpdate time.windows.com
2.2.6 關閉selinux
查看selinux是否開啟:
getenforce
永久關閉selinux,需要重啟:
sed -i 's/enforcing/disabled/' /etc/selinux/config
臨時關閉selinux,重啟之后,無效:
setenforce 0
2.2.7 關閉swap分區(qū)
永久關閉swap分區(qū),需要重啟:
sed -ri 's/.*swap.*/#&/' /etc/fstab
臨時關閉swap分區(qū),重啟之后,無效::
?
swapoff -a
2.2.8 將橋接的IPv4流量傳遞到iptables的鏈
在每個節(jié)點上將橋接的IPv4流量傳遞到iptables的鏈:
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
EOF
# 加載br_netfilter模塊
modprobe br_netfilter
# 查看是否加載
lsmod | grep br_netfilter
# 生效
sysctl --system
2.2.9 開啟ipvs
在kubernetes中service有兩種代理模型,一種是基于iptables,另一種是基于ipvs的。ipvs的性能要高于iptables的,但是如果要使用它,需要手動載入ipvs模塊。
在每個節(jié)點安裝ipset和ipvsadm:
yum -y install ipset ipvsadm
在所有節(jié)點執(zhí)行如下腳本:
cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
授權、運行、檢查是否加載:
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4
檢查是否加載:
lsmod | grep -e ipvs -e nf_conntrack_ipv4
2.2.10 重啟三臺機器
重啟三臺Linux機器:
reboot
2.3 每個節(jié)點安裝Docker、kubeadm、kubelet和kubectl
2.3.1 安裝Docker
安裝Docker:
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum -y install docker-ce-18.06.3.ce-3.el7
systemctl enable docker && systemctl start docker
docker version
設置Docker鏡像加速器:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": ["https://du3ia00u.mirror.aliyuncs.com"],
"live-restore": true,
"log-driver":"json-file",
"log-opts": {"max-size":"500m", "max-file":"3"},
"storage-driver": "overlay2"
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
2.3.2 添加阿里云的YUM軟件源
由于kubernetes的鏡像源在國外,非常慢,這里切換成國內(nèi)的阿里云鏡像源:
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=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
2.3.3 安裝kubeadm、kubelet和kubectl
由于版本更新頻繁,這里指定版本號部署:
yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0
為了實現(xiàn)Docker使用的cgroup drvier和kubelet使用的cgroup drver一致,建議修改"/etc/sysconfig/kubelet"文件的內(nèi)容:
vim /etc/sysconfig/kubelet
# 修改
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"
設置為開機自啟動即可,由于沒有生成配置文件,集群初始化后自動啟動:
systemctl enable kubelet
2.4 查看k8s所需鏡像
查看k8s所需鏡像:
kubeadm config images list
2.5 部署k8s的Master節(jié)點
部署k8s的Master節(jié)點(192.168.18.100):
# 由于默認拉取鏡像地址k8s.gcr.io國內(nèi)無法訪問,這里需要指定阿里云鏡像倉庫地址
kubeadm init \
--apiserver-advertise-address=192.168.18.100 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.18.0 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16
根據(jù)提示消息,在Master節(jié)點上使用kubectl工具:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
2.6 部署k8s的Node節(jié)點
根據(jù)提示,在192.168.18.101和192.168.18.102上添加如下的命令:
kubeadm join 192.168.18.100:6443 --token jv039y.bh8yetcpo6zeqfyj \
--discovery-token-ca-cert-hash sha256:3c81e535fd4f8ff1752617d7a2d56c3b23779cf9545e530828c0ff6b507e0e26
默認的token有效期為2小時,當過期之后,該token就不能用了,這時可以使用如下的命令創(chuàng)建token:
kubeadm token create --print-join-command
# 生成一個永不過期的token
kubeadm token create --ttl 0 --print-join-command
2.7 部署CNI網(wǎng)絡插件
kubernetes支持多種網(wǎng)絡插件,比如flannel、calico、canal等,任選一種即可,本次選擇flannel
在Master節(jié)點上獲取flannel配置文件(可能會失敗,如果失敗,請下載到本地,然后安裝):
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
使用配置文件啟動flannel:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
查看部署CNI網(wǎng)絡插件進度:
kubectl get pods -n kube-system
再次在Master節(jié)點使用kubectl工具查看節(jié)點狀態(tài):
kubectl get nodes
查看集群健康狀況:文章來源:http://www.zghlxwxcb.cn/news/detail-614283.html
kubectl get cs
文章來源地址http://www.zghlxwxcb.cn/news/detail-614283.html
3 kubernetes中kubectl命令自動補全
yum install -y bash-completion
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)
echo “source <(kubectl completion bash)” >> ~/.bashrc
vim /root/.bashrc
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)
到了這里,關于k8s集群環(huán)境的搭建的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!