kubeadm安装K8s集群之高可用组件keepalived+nginx及kubeadm部署
系列文章目录
1.kubeadm安装K8s集群之基础环境配置
2.kubeadm安装K8s集群之高可用组件keepalived+nginx及kubeadm部署
3.kubeadm安装K8s集群之master节点加入
4.kubeadm安装K8s集群之worker1节点加入
kubeadm安装K8s集群之高可用组件keepalived+nginx及kubeadm部署
- 1.安装kubeadm、kubectl、kubelet
- 2.安装高可用组件nginx
- 3.安装高可用组件keepalived
1.安装kubeadm、kubectl、kubelet
kubeadm:是用于初始化和管理kubernetes集群的工具,简化集群的创建维护;
kubelet:是每个节点的代理,负责容器的生命周期和节点级别的任务管理;
kubectl:是作为用户的命令行界面,用来与kubernetes集群进行交换,便于管理和操作集群资源;
- 添加kubernetes yum源;
cat > /etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes Repo
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
enabled=1
EOF
- 安装软件包,我这里是安装指定版本1.19.1-0;
yum install -y kubelet-1.19.1-0.x86_64 kubeadm-1.19.1-0.x86_64 kubectl-1.19.1-0.x86_64
- 配置kubelet镜像仓库
默认配置的pause镜像使用 gcr.io 仓库,国内可能无法访问,所以这里配置 Kubelet 使用阿里云的 pause 镜像;
首先获取 Docker cgroups 驱动程序信息
DOCKER_CGROUPS=$(docker info --format '{{.CgroupDriver}}')
echo $DOCKER_CGROUPS
注意:获取Docker cgroups驱动程序信息是为了保证docker和kubelet的cgroup-driver保持一致,如果不一致,在初始化集群时会报错:[kubelet-check] The HTTP call equal to 'curl -sSL http://xxxxxxx:xxx connect: connection refused.
编辑Kubelet配置文件
cat >/etc/sysconfig/kubelet <<EOF
KUBELET_EXTRA_ARGS="--cgroup-driver=${DOCKER_CGROUPS} --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google_containers/pause-amd64:3.1"
EOF
加载配置并将kubelet设置为开机自启;
#加载system系统配置管理文件
systemctl daemon-reload
#设置开机自启并启动,启动肯定是报错,因为kubelet还没有在master进行初始化启动
systemctl enable kubelet && systemctl restart kubelet
2.安装高可用组件nginx
- 启用EPEL仓库后安装 Nginx
yum install -y epel-release
yum install -y nginx
- 加载nginx stream模块
因为需要用到nginx的stream模块,yum安装的nginx默认是没有这个模块的,所以需要手动安装所有mod;
yum -y install nginx-all-modules.noarch
安装成功后/usr/lib64/nginx/modules/目录中会增加以下文件;
ll /usr/lib64/nginx/modules/
- 配置nginx配置文件
首先备份一下默认的nginx.conf文件
cp /etc/nginx/nginx.conf /etc/nginx/nginx.confbak
修改配置文件中的内容执行命令,将以下内容覆盖重定向到配置文件中;
提示:以下内容请根据文件中的注释调整对应的实际情况的内容;
cat >/etc/nginx/nginx.conf <<EOF
#手动将上面安装的nginx stream模块加载进来;
load_module /usr/lib64/nginx/modules/ngx_stream_module.so;
events {worker_connections 1024;
}stream {log_format main '$remote_addr $upstream_addr - [$time_local] $status $upstream_bytes_sent';access_log /var/log/nginx/k8s-access.log main;upstream k8s-apiserver {server 192.168.0.105:6443; # master1 apiserver的ip和端口,请根据实际情况替换该内容;server 192.168.0.106:6443; # master2 apiserver的ip和端口,请根据实际情况替换该内容;}server {listen 16443; # 因nginx与master节点复用,这个监听端口不能是6443,否则会冲突proxy_pass k8s-apiserver;}
}http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;server {listen 80;server_name localhost;location / {root html;index index.html index.htm;}error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}}
}
EOF
将nginx设置为开机自启
systemctl enable nginx && systemctl start nginx && systemctl status nginx
3.安装高可用组件keepalived
通过模拟虚拟路由器的来保证,主服务器出现故障时自动将流量切换到备用服务器,从而保证服务的持续可用,确保服务的连续性和可靠性;
- 安装 Keepalived
yum install -y keepalived
- 修改配置keepalived配置文件
首先备份默认的配置文件
cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.confbak
修改配置文件中的内容执行命令,将以下内容覆盖重定向到配置文件中;
提示:以下内容请根据文件中的注释调整对应的实际情况的内容;
cat > /etc/keepalived/keepalived.conf << EOF
! Configuration File for keepalivedglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_DEVELvrrp_skip_check_adv_addrvrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_script check_nginx { #配置健康检查脚本相关内容script "/etc/keepalived/check_nginx.sh" #配置健康检查脚本路径interval 2weight -20 #健康检查脚本返回的状态码为1,就权重下降20,实现VIP飘移;}
vrrp_instance VI_1 {state MASTERinterface ens32 #ens32:网络接口名称,需要调整为实际对应的名称,可以执行ifconfig查看对应名字;virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111 #可以理解为设置认证的密码,这里可根据情况调整;}virtual_ipaddress {192.168.200.18/24 #vip设置一组虚拟IP地址,可根据实际情况的需要调整,}track_script {check_nginx #设置健康检查}
}
EOF
如图,启动好keepalived的服务后可以输入命令会把vip显示出来,ip addr show
;
编写健康检查脚本check_nginx.sh,这里为了演示随便写的个简单脚本,实际使用环境中不应如此粗糙;
cat > /etc/keepalived/check_nginx.sh << 'EOF'
#!/bin/bash
#这里随便写了一个简单的健康检查脚本,计算nginx的16443端口的数量,如果数量是0就判定为服务不正常;
#16443是上文nginx配置的监听端口,如果上面不是设置的16443这里需要调整为对应的;count=$(ss -antp |grep 16443 |egrep -cv "grep|$$")
if [ "$count" -eq 0 ];thenexit 1
elseexit 0
fi
EOF
- 启动 Keepalived
将keepalived为开机自启动,并开启服务
systemctl enable keepalived && systemctl start keepalived