7.k8s集群高可用
孙富阳, 江湖人称没人称。多年互联网运维工作经验,曾负责过孙布斯大规模集群架构自动化运维管理工作。擅长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
未经允许不得转载:孙某某的运维之路 » 7.k8s集群高可用
评论已关闭