浅谈Kubernetes集群的高可用方案
大小:0.4 MB 人气: 2017-10-11 需要积分:1
标签:容器(21808)
Kubernetes作为容器应用的管理中心,通过对Pod的数量进行监控,并且根据主机或容器失效的状态将新的Pod调度到其他Node上,实现了应用层的高可用性。针对Kubernetes集群,高可用性还应包含以下两个层面的考虑:etcd数据存储的高可用性和Kubernetes Master组件的高可用性。本文节选自龚正等所著的《kubernetes权威指南》。1.etcd高可用性方案
etcd在整个Kubernetes集群中处于中心数据库的地位,为保证Kubernetes集群的高可用性,首先需要保证数据库不是单故障点。一方面,etcd需要以集群的方式进行部署,以实现etcd数据存储的冗余、备份与高可用性;另一方面,etcd存储的数据本身也应考虑使用可靠的存储设备。
etcd集群的部署可以使用静态配置,也可以通过etcd提供的REST API在运行时动态添加、修改或删除集群中的成员。本节将对etcd集群的静态配置进行说明。关于动态修改的操作方法请参考etcd官方文档的说明。
首先,规划一个至少3台服务器(节点)的etcd集群,在每台服务器上安装好etcd。
部署一个由3台服务器组成的etcd集群,其配置如表4.10所示,其集群部署实例如图4.2所示。
图4.2 etcd集群部署实例
然后修改每台服务器上etcd的配置文件/etc/etcd/etcd.conf。
以etcd1为创建集群的实例,需要将其ETCD_INITIAL_CLUSTER_STATE设置为“new”。etcd1的完整配置如下:
# [member]ETCD_NAME=etcd1 #etcd实例名称ETCD_DATA_DIR="/var/lib/etcd/etcd1" #etcd数据保存目录ETCD_LISTEN_PEER_URLS="http://10.0.0.1:2380" #集群内部通信使用的URLETCD_LISTEN_CLIENT_URLS="http://10.0.0.1:2379" #供外部客户端使用的URL…… #[cluster]ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.0.0.1:2380" #广播给集群内其他成员使用的URLETCD_INITIAL_CLUSTER="etcd1=http://10.0.0.1:2380,etcd2=http://10.0.0.2:2380, etcd3=http://10.0.0.3:2380" #初始集群成员列表ETCD_INITIAL_CLUSTER_STATE="new" #初始集群状态,new为新建集群ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster" #集群名称ETCD_ADVERTISE_CLIENT_URLS="http://10.0.0.1:2379" #广播给外部客户端使用的URL
启动etcd1服务器上的etcd服务:
$ systemctl restart etcd
启动完成后,就创建了一个名为etcd-cluster的集群。
etcd2和etcd3为加入etcd-cluster集群的实例,需要将其ETCD_INITIAL_CLUSTER_STATE设置为“exist”。etcd2的完整配置如下(etcd3的配置略):
# [member]ETCD_NAME=etcd2 #etcd实例名称ETCD_DATA_DIR="/var/lib/etcd/etcd2" #etcd数据保存目录ETCD_LISTEN_PEER_URLS="http://10.0.0.2:2380" #集群内部通信使用的URLETCD_LISTEN_CLIENT_URLS="http://10.0.0.2:2379" #供外部客户端使用的URL…… #[cluster]ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.0.0.2:2380" #广播给集群内其他成员使用的URLETCD_INITIAL_CLUSTER="etcd1=http://10.0.0.1:2380,etcd2=http://10.0.0.2:2380,etcd3=http://10.0.0.3:2380" #初始集群成员列表ETCD_INITIAL_CLUSTER_STATE="exist" # existing表示加入已存在的集群ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster" #集群名称ETCD_ADVERTISE_CLIENT_URLS="http://10.0.0.2:2379" #广播给外部客户端使用的URL
启动etcd2和etcd3服务器上的etcd服务:
$ systemctl restart etcd
启动完成后,在任意etcd节点执行etcdctl cluster-health命令来查询集群的运行状态:
$ etcdctl cluster-health clusterishealthy member ce2a822cea30bfca ishealthy member acda82ba1cf790fc ishealthy member eba209cd0012cd2 ishealthy
在任意etcd节点上执行etcdctl member list命令来查询集群的成员列表:
$ etcdctl member list ce2a822cea30bfca: name=default peerURLs=http://10.0.0.1:2380,http://10.0.0.1: 7001clientURLs=http://10.0.0.1:2379,http://10.0.0.1:4001acda82ba1cf790fc: name=default peerURLs=http://10.0.0.2:2380,http://10.0.0.2: 7001clientURLs=http://10.0.0.2:2379,http://10.0.0.2:4001eba209cd40012cd2: name=default peerURLs=http://10.0.0.3:2380,http://10.0.0.3: 7001clientURLs=http://10.0.0.3:2379,http://10.0.0.3:4001
至此,一个etcd集群就创建成功了。
以kube-apiserver为例,将访问etcd集群的参数设置为:
--etcd-servers=http://10.0.0.1:4001,http://10.0.0.2:4001,http://10.0.0.3:4001
在etcd集群成功启动之后,如果需要对集群成员进行修改,则请参考官方文档的详细说明:
对于etcd中需要保存的数据的可靠性,可以考虑使用RAID磁盘阵列、高性能存储设备、NFS网络文件系统,或者使用云服务商提供的网盘系统等来实现。
2. Kubernetes Master组件的高可用性方案
在Kubernetes体系中,Master服务扮演着总控中心的角色,主要的三个服务kube-apiserver、kube-controller-mansger和kube-scheduler通过不断与工作节点上的Kubelet和kube-proxy进行通信来维护整个集群的健康工作状态。如果Master的服务无法访问到某个Node,则会将该Node标记为不可用,不再向其调度新建的Pod。但对Master自身则需要进行额外的监控,使Master不成为集群的单故障点,所以对Master服务也需要进行高可用方式的部署。
以Master的kube-apiserver、kube-controller-mansger和kube-scheduler三个服务作为一个部署单元,类似于etcd集群的典型部署配置。使用至少三台服务器安装Master服务,并且使用Active-Standby-Standby模式,保证任何时候总有一套Master能够正常工作。
所有工作节点上的Kubelet和kube-proxy服务则需要访问Master集群的统一访问入口地址,例如可以使用pacemaker等工具来实现。图4.3展示了一种典型的部署方式。
图4.3 Kubernetes Master高可用部署架构
非常好我支持^.^
(0) 0%
不好我反对
(0) 0%
下载地址
浅谈Kubernetes集群的高可用方案下载
相关电子资料下载
- 开关频率对直流母线电容器的影响 35
- 浅谈法拉电容 37
- 只要封装相同,电容器本身大小就一样吗? 59
- 缓启动电路的工作原理 缓启动电路的作用 32
- MLCC的结构、特点、应用及发展趋势 125
- 万用表使用口诀分享 18
- 焊接机器人能焊压力容器吗 60
- 不同无功补偿设备的性能比较 76
- 三星机电新型多层陶瓷电容器将扩大汽车系统紧凑型高电容解决方案组合 216
- 超级电容是什么? 64