7.k8s集群高可用

2022-04-10 分类:k8s 阅读(480) 评论(0)

孙富阳, 江湖人称没人称。多年互联网运维工作经验,曾负责过孙布斯大规模集群架构自动化运维管理工作。擅长Web集群架构与自动化运维,曾负责国内某大型博客网站运维工作。

1.etcd的高可用-单节点扩容至3节点

1.所有节点部署etcd服务

[root@k8s-node-1 ~]# yum -y install etcd
[root@k8s-node-2 ~]# yum -y install etcd

2.修改master中etcd配置文件

[root@k8s-master ~]# egrep -v "^#" /etc/etcd/etcd.conf 
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="http://10.0.0.11:2380"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_NAME="node1"  ###主要修改了这个位置
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.0.0.11:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://10.0.0.11:2379"###主要修改了这
重启etcd服务

3.etcd集群其它节点修改配置

[root@k8s-node-2 ~]# grep -Ev '^#' /etc/etcd/etcd.conf 
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_NAME="node2"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.0.0.12:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://10.0.0.12:2379"
ETCD_INITIAL_CLUSTER="node1=http://10.0.0.11:2380,node2=http://10.0.0.12:2380,node3=http://10.0.0.13:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="existing"
[root@k8s-node-2 ~]# grep -Ev '^#' /etc/etcd/etcd.conf 
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_NAME="node3"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.0.0.13:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://10.0.0.13:2379"
ETCD_INITIAL_CLUSTER="node1=http://10.0.0.11:2380,node2=http://10.0.0.12:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="existing"

相关参数说明如下:
	ETCD_DATA_DIR:
		指定ETCD数据库的数据存储目录。
	ETCD_LISTEN_PEER_URLS:
		和集群其它member之间通信的地址,用于监听其他etcd member的url,强烈建议配置IP地址。
	ETCD_LISTEN_CLIENT_URLS:
		对外提供服务的地址。
	ETCD_NAME:
		指定当前的member名称,该名称要求集群唯一。
	ETCD_INITIAL_ADVERTISE_PEER_URLS:
		该节点成员对等URL地址,且会通告群集的其余成员节点。###节点同步数据的地址
	ETCD_ADVERTISE_CLIENT_URLS:         
		此member的客户端URL列表,用于通告群集的其余部分。这些URL可以包含域名。###节点对外提供服务的地址
	ETCD_INITIAL_CLUSTER:
		指定初始化集群时集群中所有节点的信息。后期我们可以在命令行添加相关的member节点哟。
	ETCD_INITIAL_CLUSTER_TOKEN:
		创建集群的 token,这个值每个集群保持唯一。
		此配置可使重新创建集群,即使配置和之前一样,也会再次生成新的集群和节点uuid;
		否则会导致多个集群之间的冲突,造成未知的错误。
	ETCD_INITIAL_CLUSTER_STATE:
		指定集群的初始状态,在一次部署etcd集群时通常我们都会设置为"new"。
		如果将此选项设置为"existing",则etcd将尝试加入现有群集。

4.master中的etcd添加新的etcd节点

###查看member节点并更新节点的peerURLs,如果是localhost其他节点将无法加入集群
[root@k8s-master ~]# etcdctl member update 8e9e05c52164694d http://10.0.0.11:2380
###添加member节点node2
[root@k8s-master ~]# etcdctl member add node2 http://10.0.0.12:2380
这时候检查节点状态发现集群不健康,这是因为node2没有启动
[root@k8s-node-1 ~]# systemctl start etcd.service
再次检查发现已经可以了
###添加member节点node3
重复上述动作即可
特别注意,新添加节点要一个一个的添加,否则容易出问题

5.etcd故障处理

(1)任意选择一个节点手动制作故障,只需执行下面3条命令,则会导致服务无法正常启动
    systemctl stop etcd.service 
    >/var/lib/etcd/default.etcd/member/wal/0000000000000000-0000000000000000.wal 
    systemctl start etcd.service 
    
(2)删除故障节点的数据
    rm -rf /var/lib/etcd/default.etcd/*

(3)将故障节点的member移除(该步骤前后请搭配"etcdctl member list"使用)
etcdctl member remove 3b0d6e690d18dfe1

(4)重新添加故障节点的member(该步骤前后请搭配"etcdctl member list"使用)
etcdctl member add node3 http://10.0.0.13:2380

(5)重新修改etcd的配置文件,只需修改一处并重启服务即可
[root@k8s-master ~]# grep ^ETCD_INITIAL_CLUSTER_STATE /etc/etcd/etcd.conf 
ETCD_INITIAL_CLUSTER_STATE="existing"
systemctl start etcd

2.etcd高可用#初始化安装的时候就以集群部署

初始化的时候只要配置文件写好就行
node1配置文件
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_NAME="k8s-master"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://172.200.1.101:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://172.200.1.101:2379"
ETCD_INITIAL_CLUSTER="node1=http://172.200.1.101:2380,node2=http://172.200.1.102:2380,node3=http://172.200.1.103:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
node2配置文件
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_NAME="k8s-node1"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://172.200.1.102:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://172.200.1.102:2379"
ETCD_INITIAL_CLUSTER="node1=http://172.200.1.101:2380,node2=http://172.200.1.102:2380,node3=http://172.200.1.103:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
node3配置文件
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_NAME="k8s-node2"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://172.200.1.103:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://172.200.1.103:2379"
ETCD_INITIAL_CLUSTER="node1=http://172.200.1.101:2380,node2=http://172.200.1.102:2380,node3=http://172.200.1.103:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"

3.keepalived实现k8s集群master节点高可用

1.keepalived配置文件

#master01配置:
! Configuration File for keepalived

global_defs {
   router_id LVS_DEVEL_11
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.10
    }
}

#master02配置
! Configuration File for keepalived

global_defs {
   router_id LVS_DEVEL_12
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.10
    }
}

systemctl  enable  keepalived
systemctl  start   keepalived

2.所有node节点kubelet,kube-proxy指向api-server的vip

vim /etc/kubernetes/kubelet
KUBELET_API_SERVER="--api-servers=http://10.0.0.10:8080"

vim /etc/kubernetes/config 
KUBE_MASTER="--master=http://10.0.0.10:8080"

systemctl restart kubelet.service kube-proxy.service

评论已关闭

登录

忘记密码 ?

切换登录

注册

鲁ICP备2021019243号-1