实验准备
实验准备:一个携带harbor仓库的虚拟机server1
server5和server6部署pacemaker和haproxy提供高可用性、负载均衡
server7、8、9部署k8s的master端,内存必须大于2G,cpu核心2个
server10部署k8s的woker端
所有虚拟机
加入地址解析
vim /etc/hosts
高可用、负载均衡
在server5、6上
加入7.6的yum源以及高可用的yum源
[dvd]
name=rhel7.6
baseurl=http://172.25.21.250/rhel7.6
gpgcheck=0
[HighAvailability]
name=HighAvailability
baseurl=http://172.25.21.250/rhel7.6/addons/HighAvailability
gpgcheck=0
安装相关高可用软件和工具
yum install -y pacemaker pcs psmisc policycoreutils-python
设置开机自启动pcsd服务
systemctl enable --now pcsd.service
安装的软件包将创建以及空密码的hacluster用户
passwd hacluster #创建密码
在server5上
在任一节点上,使用pcs群集验证作为hacluster用户进行身份验证:
pcs cluster auth server5 server6
接下来,在同一节点上使用pcs群集设置来生成和同步corosync配置
pcs cluster setup --name mycluster server5 server6
启动集群
pcs cluster start --all
pcs cluster enable --all
查看状态
pcs status
检查配置的有效性,发现有error
要禁用STONITH,请将STONITH enabled cluster选项设置为false
crm_verify -L -V
pcs property set stonith-enabled=false
创建一个vip,并查看配置完的vip
pcs resource create vip ocf:heartbeat:IPaddr2 ip=172.25.21.100 op monitor interval=30s
ip addr
ping 172.25.21.100
安装haproxy,并配置
yum install -y haproxy
vim /etc/haproxy/haproxy.cfg
haproxy监控配置如图
查看端口是否开启
netstat -antlp
查看监控:172.25.21.5/status
测试完后关闭服务
systemctl stop haproxy.service
在server6
yum install -y haproxy
scp server5:/etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg
systemctl restart haproxy.service
查看监控:172.25.21.6/status
在server5
将vip和haproxy加入同一个组,运行在同一节点
pcs resource create haproxy systemd:haproxy op monitor interval=60s
pcs resource group add hagroup vip haproxy
pcs status
k8s
在server7、8、9、10
加入docker的yum源
vim /etc/yum.repos.d/docker.repo
[docker]
name=docker
baseurl=http://172.25.21.250/docker-ce
gpgcheck=0
安装docker
yum install docker-ce -y
设置开机自启动
systemctl enable --now docker
查看docker相关内容
docker info
如果出现这样的警告
vim /etc/sysctl.d/docker.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
sysctl --system
然后再次查看docker info ,警告消除
修改docker相关文件
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://reg.westos.org"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
]
}
重启docker服务
systemctl restart docker
查看docker相关内容
docker info
Cgroup Driver修改为systemd
镜像仓库地址为本地harbor仓库
在server1
将认证文件传给安装docker的主机server7、8、9、10
[root@server1 yum.repos.d]# scp -r /etc/docker/certs.d/ server7:/etc/docker
root@server7's password:
ca.crt 100% 2106 1.3MB/s 00:00
在server7、8、9、10
测试镜像拉取
docker pull busybox
拉取成功,可以从本地镜像仓库拉取
安装ipvm
yum install -y ipvsadm
查看
ipvsadm -L
lsmod |grep ip_vs
swap禁用
swapoff -a
注释掉/etc/fstab文件中的swap定义
vim /etc/fstab
kubeadm部署
先解压kubeadm,进入安装包目录,安装
tar zxf kubeadm-1.21.3.tar.gz
cd packages/
yum install -y *
设置开机自启动kubelet
systemctl enable --now kubelet
在server7
生成一个默认模板
kubeadm config print init-defaults > kubeadm-init.yaml
vim kubeadm-init.yaml
12行修改为本机ip
16行改为本机hostname
24行加入高可用集群的vip和端口
32行私人仓库地址k8s部署相关安装包
33行版本改为1.21.3
36行加入serviceSubnet
serviceSubnet: 10.96.0.0/12
结尾加
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs
预先拉取镜像
kubeadm config images pull --config kubeadm-init.yaml
kubeadm初始化
kubeadm init --config kubeadm-init.yaml --upload-certs
提示这个就部署完成
将初始化完成后,如果是超级用户,你执行
export KUBECONFIG=/etc/kubernetes/admin.conf
vim ~/.bash_profile
export KUBECONFIG=/etc/kubernetes/admin.conf
配置kubectl命令补齐功能:
echo "source <(kubectl completion bash)" >> ~/.bashrc
source ~/.bashrc
查看node和pod状态
kubectl get pod -n kube-system
kubectl get node
发现coredns状态是Pending
安装flannel网络组件
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
vim kube-flannel.yml
-image: flannel:v0.14.0 #设定成自己的仓库公共目录,拉取速度会很快
将type从vxlan改为host-gw
安装flannel
kubectl apply -f kube-flannel.yml
再次查看,ready
在server8、9
从上面server7初始化部署成功后的提示信息,找到join any number of the control-plane node 的命令
显示加入成功
将初始化完成后,如果是超级用户,你执行
export KUBECONFIG=/etc/kubernetes/admin.conf
vim ~/.bash_profile
export KUBECONFIG=/etc/kubernetes/admin.conf
配置kubectl命令补齐功能:
echo "source <(kubectl completion bash)" >> ~/.bashrc
source ~/.bashrc
在server10
从上面server7初始化部署成功后的提示信息,找到join any number of the control-plane node 的命令join any number of worker nodes的命令
加入成功
在server7
查看节点
查看监控
效果展示
在server7 创建一个pod 镜像为myapp:v1
server7和8关机(模拟出现问题)
server9测试 pod还运行
server5关闭pcs(模拟出现问题)
pcs node standby
pcs status
pcs和haproxy转到server6
测试: