cppla带你玩k8s之二(kubernets-ha高可用集群)

栏目: 服务器 · 发布时间: 6年前

内容简介:kubernetes master默认只有1个节点,当master宕机后是无法继续调度的。这里把kubernetes master节点扩展到3个节点,结合keepalived(ip飘移)技术完成高可用kubernetes集群组建,安装过程参考:https://github.com/cookeem/kubeadm-haVIP(virtual ip address)地址HA: 10.10.10.100 (使用keepalived实现)

kubernetes-ha集群介绍

kubernetes master默认只有1个节点,当master宕机后是无法继续调度的。这里把kubernetes master节点扩展到3个节点,结合keepalived(ip飘移)技术完成高可用kubernetes集群组建,安装过程参考:https://github.com/cookeem/kubeadm-ha

VIP(virtual ip address)地址HA: 10.10.10.100 (使用keepalived实现)

# 三个k8s master节点,5个k8s work node。
# 系统均为centos7.6  4核4G,无SWAP,已关闭firewalld和Selinux
vip 			10.10.10.100
node1(master1)		10.10.10.11
node2(master2)		10.10.10.12
node3(master3)		10.10.10.13
node4			10.10.10.14
node5			10.10.10.15

kubernetes-ha集群架构图

cppla带你玩k8s之二(kubernets-ha高可用集群)

kubernetes-ha集群准备过程

kubernetes集群安装准备不再重复,详细参考教程一:https://www.cpp.la/230.html

初始化inventory文件

declare -a IPS=(10.10.10.11 10.10.10.12 10.10.10.13 10.10.10.14 10.10.10.15)
CONFIG_FILE=inventory/cppla/hosts.ini python3 contrib/inventory_builder/inventory.py ${IPS[@]}

调整集群配置

[all]
node1 	 ansible_host=10.10.10.11 ip=10.10.10.11
node2 	 ansible_host=10.10.10.12 ip=10.10.10.12
node3 	 ansible_host=10.10.10.13 ip=10.10.10.13
node4 	 ansible_host=10.10.10.14 ip=10.10.10.14
node5 	 ansible_host=10.10.10.15 ip=10.10.10.15
 
[kube-master]
node1 	 
node2 	 
node3
 
[etcd]
node1 	 
node2 	 
node3 	 
 
[kube-node]
node1 	 
node2 	 
node3 	 
node4 	 
node5 	 
 
[k8s-cluster:children]
kube-master 	 
kube-node 	 
 
[calico-rr]

启动kubernetes集群

ansible-playbook -i inventory/cppla/hosts.ini cluster.yml

验证kubernetes集群是否成功

# 查看kubernetes节点
kubectl get node
# 查看pod分布
kubectl get node
# 查看dashboard的集群内部IP
kubectl get services --all-namespaces
# 查看kubernetes集群信息
kubectl cluster-info
#----------------------------------------
NAME    STATUS   ROLES         AGE     VERSION
node1   Ready    master,node   6m42s   v1.13.2
node2   Ready    master,node   5m58s   v1.13.2
node3   Ready    master,node   5m59s   v1.13.2
node4   Ready    node          5m22s   v1.13.2
node5   Ready    node          5m22s   v1.13.2
#----------------------------------------

所有master节点安装keepalived 和 haproxy

apt/yum install -y keepalived haproxy

所有master节点配置haproxy

# cat /etc/haproxy/haproxy.cfg
global
    log /dev/log    local0
    log /dev/log    local1 notice
    chroot /var/lib/haproxy
    stats socket /var/run/haproxy-admin.sock mode 660 level admin
    stats timeout 30s
    user haproxy
    group haproxy
    daemon
    nbproc 1
 
defaults
    log     global
    timeout connect 5000
    timeout client  10m
    timeout server  10m
 
listen  admin_stats
    bind 0.0.0.0:10080
    mode http
    log 127.0.0.1 local0 err
    stats refresh 30s
    stats uri /status
    stats realm welcome login\ Haproxy
    stats auth admin:123456
    stats hide-version
    stats admin if TRUE
 
listen kube-master
    bind 0.0.0.0:8443
    mode tcp
    option tcplog
    balance source
    server 10.10.10.11 10.10.10.11:6443 check inter 2000 fall 2 rise 2 weight 1
    server 10.10.10.12 10.10.10.12:6443 check inter 2000 fall 2 rise 2 weight 1
    server 10.10.10.13 10.10.10.13:6443 check inter 2000 fall 2 rise 2 weight 1

keepalived模式是一主二备

node1 master keepalived配置

  • VIP 所在的接口(interface ${VIP_IF})为 eth0;
  • 使用 killall -0 haproxy 命令检查所在节点的 haproxy 进程是否正常。如果异常则将权重减少(-30),从而触发重新选主过程;
  • router_id、virtual_router_id 用于标识属于该 HA 的 keepalived 实例,如果有多套 keepalived HA,则必须各不相同;
# cat /etc/keepalived/keepalived.conf
### keepalived-master.conf
global_defs {
    router_id lb-master-105
}
 
vrrp_script check-haproxy {
    script "killall -0 haproxy"
    interval 5
    weight -30
}
 
vrrp_instance VI-kube-master {
	unicast_src_ip 10.10.10.11
    unicast_peer {
        10.10.10.12
		10.10.10.13
    }
    state MASTER
    priority 120
    dont_track_primary
    interface eth0
    virtual_router_id 68
    advert_int 3
    track_script {
        check-haproxy
    }
    virtual_ipaddress {
		10.10.10.100/24
    }
}

node2 and node3 backup keepalived配置

  • VIP 所在的接口(interface ${VIP_IF})为 eth0;
  • 使用 killall -0 haproxy 命令检查所在节点的 haproxy 进程是否正常。如果异常则将权重减少(-30),从而触发重新选主过程;
  • router_id、virtual_router_id 用于标识属于该 HA 的 keepalived 实例,如果有多套 keepalived HA,则必须各不相同;
  • priority 的值必须小于 master 的值;
  • node2节点priority设置为110,node2节点priority设置为100,同时注意配置:unicast_src_ip 和 unicast_peer。
# cat /etc/keepalived/keepalived.conf
### keepalived-backup.conf
global_defs {
    router_id lb-backup-105
}
 
vrrp_script check-haproxy {
    script "killall -0 haproxy"
    interval 5
    weight -30
}
 
vrrp_instance VI-kube-master {
	unicast_src_ip 10.10.10.12
    unicast_peer {
		10.10.10.11
		10.10.10.13
    }
    state BACKUP
    priority 110
    dont_track_primary
    interface eth0
    virtual_router_id 68
    advert_int 3
    track_script {
        check-haproxy
    }
    virtual_ipaddress {
        10.10.10.100/24
    }
}

kubernetes-ha-cluster遇到的坑

aws,DigitalOcean等公有云主机默认禁止了UDP组播,所以Keepalived这里推荐采用TCP单播的心跳方式

另外由于公有云都为虚拟机,限制比较严重,已知有网关或其他arp得原因。

  • 建议在局域网或自有IDC测试该集群。
  • 生产环境联系机房,通过网络设置使得Virtual ip这个VIP可以通过内网访问。
# keepalived解释
unicast_src_ip 表示发送VRRP单播报文使用的源IP地址
unicast_peer 表示对端接收VRRP单播报文的IP地址

IP飘移演示

首先在所有master节点启动服务systemctl start haproxy; systemctl start keepalived;

cppla带你玩k8s之二(kubernets-ha高可用集群)

cppla带你玩k8s之二(kubernets-ha高可用集群)

gif动图演示如下cpp.la:

cppla带你玩k8s之二(kubernets-ha高可用集群)

kubernetes-VIP高可用演示

cppla带你玩k8s之二(kubernets-ha高可用集群)

其他参考配置

# for killall command:
apt/yum -y install psmisc
 
# 确认是否开启转发
net.ipv4.ip_forward = 1
# 开启允许绑定非本机的IP【这里没用到】
net.ipv4.ip_nonlocal_bind = 1

以上测试on centos7.6, time:20190125, by:cpp.la


以上所述就是小编给大家介绍的《cppla带你玩k8s之二(kubernets-ha高可用集群)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Web 2.0 Architectures

Web 2.0 Architectures

Duane Nickull、Dion Hinchcliffe、James Governor / O'Reilly / 2009 / USD 34.99

The "Web 2.0" phenomena has become more pervasive than ever before. It is impacting the very fabric of our society and presents opportunities for those with knowledge. The individuals who understand t......一起来看看 《Web 2.0 Architectures》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具