機器準備
系統(tǒng)初始配置
添加國內(nèi)鏡像源
軟件安裝、配置
使用kubeadm部署kubernetes
安裝flannel網(wǎng)絡(luò)
一、機器準備
本次試驗準備的機器如下,需要注意的是k8s 要求 CPU 最低為 2 核,否則部署過程過程中會報錯,雖然可以使用"–ignore-preflight-errors=…"參數(shù)忽視,但是這里不建議使用低于2CPU的配置部署k8s

二、系統(tǒng)初始配置
1、關(guān)閉swap:
kubernetes的想法是將實例緊密包裝到盡可能接近100%。 所有的部署應(yīng)該與CPU /內(nèi)存限制固定在一起。 所以如果調(diào)度程序發(fā)送一個pod到一臺機器,它不應(yīng)該使用交換。 設(shè)計者不想交換,因為它會減慢速度,所以關(guān)閉swap主要是為了性能考慮,當然為了一些節(jié)省資源的場景,比如運行容器數(shù)量較多,可添加kubelet參數(shù) --fail-swap-on=false來解決。
swapoff -a
sed-ri's/.*swap.*/#&/'/etc/fstab
2、關(guān)閉所有防火墻
systemctl stop firewalld
systemctl disable firewalld
3、禁用SELINUX
setenforce 0
sed-i's/SELINUX=enforcing/SELINUX=disabled/g'/etc/selinux/config
4、將橋接的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
5、kube-proxy開啟ipvs的前置配置
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
三、添加國內(nèi)鏡像源
1、添加centos8鏡像源
curl http://mirrors.aliyun.com/repo/Centos-8.repo>/etc/yum.repos.d/Centos-8.repo
2、添加k8s源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo[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
3、添加ocker-ce源
curl https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo > /etc/yum.repos.d/docker-ce.repo
sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo
四、軟件安裝、配置
1、升級containerd
cd /opt
wget https://download.docker.com/linux/centos/7/x86_64/edge/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm
yum localinstall? containerd.io-1.2.6-3.3.el7.x86_64.rpm
1、軟件安裝(其中keepalived、haproxy的安裝配置只需要在三臺master節(jié)點上操作)
yum install keepalived haproxy -y
yum install ipset ipvsadm -y
yum install yum-utils device-mapper-persistent-data lvm2 -y
yum install container-selinux -y
yum install docker-ce -y
yum install kubelet kubeadm kubectl -y
2、配置keepalived(三臺master節(jié)點操作)
1)配置keepalived
vim /etc/keepalived/keepalived.conf
清空內(nèi)容后將如下內(nèi)容填寫到配置文件
! Configuration File for keepalived
global_defs {
? notification_email {
? ? root@localhost
? }
? notification_email_from root@k8s.com
? smtp_server 127.0.0.1
? smtp_connect_timeout 30
? router_id keepalived_lvs1
}
vrrp_instance VI_1 {
? ? state MASTER
? ? interface ens35
? ? virtual_router_id 55
? ? priority 100
? ? advert_int 1
? ? authentication {
? ? ? ? auth_type PASS
? ? ? ? auth_pass Kubernetes
? ? }
? ? virtual_ipaddress {
? ? ? ? 10.255.253.88
? ? }
}
注意:
修改interface ens35中的ens35改為服務(wù)模塊節(jié)點實際的網(wǎng)卡名
Master01、Master02、Master03三個節(jié)點的router_id分別改為router_id keepalived_lvs1、router_id keepalived_lvs2、router_id keepalived_lvs3
Master01、Master02、Master03三個節(jié)點中的state分別修改為state MASTER、state BACKUP、state BACKUP
Master01、Master02、Master03三個節(jié)點中的priority 值分別設(shè)置為設(shè)置為100、99、98
將10.255.253.88修改為實際使用的vip
2)啟動服務(wù)
systemctl start keepalived && systemctl enable keepalived && systemctl status keepalived
2、配置haproxy(三臺master節(jié)點操作)
1)配置haproxy
vim /etc/haproxy/haproxy.cfg
清空內(nèi)容后將如下內(nèi)容填寫到配置文件
global
? #設(shè)置日志
? ? log 127.0.0.1 local7 info
? ? #用戶與用戶組
? ? user root
? ? group root
? ? #守護進程啟動
? ? daemon
? ? #最大連接數(shù)
? ? maxconn 4000
#默認配置
defaults
? ? log global
? ? mode http
? ? option httplog
? ? option dontlognull
? ? timeout connect 5000
? ? timeout client 50000
? ? timeout server 50000
listen stats
? ? bind 0.0.0.0:1080
? ? stats enable
? ? stats uri /haproxyadmin
? ? stats auth admin:admin
? ? stats admin if TRUE
frontend localnodes
? ? bind *:6444
? ? mode tcp
? ? option tcplog
? ? default_backend kube_apiserver
? ? timeout client? 1m
backend kube_apiserver
? ? mode tcp
? ? balance roundrobin
? ? option tcp-check
? ? server server1 10.255.253.40:6443 check port 6443 inter 2000 rise 3 fall 3 weight 30
? ? server server2 10.255.253.41:6443 check port 6443 inter 2000 rise 3 fall 3 weight 30
? ? server server3 10.255.253.42:6443 check port 6443 inter 2000 rise 3 fall 3 weight 30
注意:
將10.255.253.40、10.255.253.41、10.255.253.42修改為實際ip地址
2)啟動服務(wù)
systemctl enable haproxy && systemctl start haproxy && systemctl status haproxy
3、配置docker(所有節(jié)點操作)
1)修改docker 的Cgroup Driver為systemd
修改或創(chuàng)建/etc/docker/daemon.json,加入下面的內(nèi)容:
{
"exec-opts":["native.cgroupdriver=systemd"]
}
2)啟動docker、設(shè)置kubelet開機自啟(這里先不要開啟kubelet服務(wù))
systemctl enable docker&& systemctl start docker && systemctl enable kubelet
五、使用kubeadm部署kubernetes
1、打印kubeadm的配置文件(master01節(jié)點操作)
kubeadm config print init-defaults>kubeadm-config.yml
2、編輯kubeadm-config.yml文件(master01節(jié)點操作)
vim kubeadm-config.yml
將advertiseAddress選項中的ip地址改為Master01的地址

添加controlPlaneEndpoint配置,其中ip地址為 vip,端口為haproxy映射6443的前端端口6444

添加podSubnet選項,如果使用flannel網(wǎng)絡(luò),則該處為podSubnet: 10.244.0.0/16

將容器鏡像倉庫改為阿里倉庫
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers

將kubeproxy的mode改為ipvs
添加以下內(nèi)容
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs

3、初始化master01節(jié)點
kubeadm init --config=kubeadm-config.yml --upload-certs
4、等master01節(jié)點初始化完成后逐個將Master02、Master03、Node01、Node02加入集群
Master01初始化完成后會出現(xiàn)如下字段、Master02、Master03上執(zhí)行上面的kubeadm join命令加入集群,Node01、Node02節(jié)點使用下面的kubeadm join命令加入集群

5、配置kubctl
mkdir -p $HOME/.kube && sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config && sudo chown $(id -u):$(id -g) $HOME/.kube/config
五、安裝flannel網(wǎng)絡(luò)
1、獲取flannel網(wǎng)絡(luò)的yaml文件
wget? https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
2、部署flannel網(wǎng)絡(luò)
kubectl apply -f kube-flannel.yml
4、等待一段時間后,查看所有pod的狀態(tài)為Running、所有節(jié)點的狀態(tài)是Ready,則集群正常
kubectl get pods -n kube-system
5、鏡像拉取失敗
查看失敗節(jié)點信息
kubectl describe pod kube-flannel-ds-h75b4 -n kube-system


進入Node01手動下載
docker pull quay.io/coreos/flannel:v0.13.1-rc1


kubectl get nodes

至此,高可用架構(gòu)的Kubernetes集群搭建完成。