每一年都奔走在自己de热爱里

愿你天黑有灯,下雨有伞

K8S( Kubernetes)基础组件及高可用实现方式

一、K8S主要组件

#Master节点:
#kube-apiserver: k8s集群的统一入口,各个组件信息交互都要通过它。以HTTP API提供接口服务,所有对象资源的增删改查和监听操作都交给APIServer处理后再提交给Etcd存储。

#kube-controller-manager:处理集群中常规后台任务,维持副本期望数目。一个资源对应一个控制器,而ControllerManager就是负责管理这些控制器的。

#kube-scheduler:k8s集群的调度器,根据调度算法为Pod选择Node工作节点。

#etcd:分布式键值存储系统,用于保持集群状态,持久化存储k8s集群所有重要信息。可以放在k8s集群内,也可以放在集群外,建议放在集群内方便管理。

#Node节点
#Kubelet:是Master在Node节点上的Agent,直接与容器引擎交互,管理本机运行容器的生命周期,比如创建容器、挂载数据卷、获取容器和节点状态等。kubelet将每个Pod转换成一组组容器。

#Kube-proxy:实现Pod网络代理,维护网络规则,写入规则至IPTABLES、IPVS。负责Pod之间的通信和负载均衡,将指定的流量分发到后端正确的机器上。
#二、K8S集群实现高可用

#k8s的高可用,主要是实现Master节点的高可用。那么我们看看各个组件是如何解决高可用的。

#Kubelet、Kube-proxy:只工作在当前Node节点上,无需高可用。

#etcd:etcd如果是放在集群内部的,在kubeadm1.5之后,对于多Master集群,一个Master节点加入集群后将自动实现集群化扩展。所以集群已经自动实现高可用,无需再人工干预。

#kube-controller-manager:对于多Master集群,这个组件只会有一个正常工作,其它处于休眠挂起状态。当工作节点发生故障时才会唤醒另一个接管。所以集群已经自动实现高可用,无需再人工干预。

#kube-scheduler:与kube-controller-manager情况一样,集群已经自动实现高可用,无需再人工干预。

#kube-apiserver:每个Master节点的kube-apiserver都是独立的,没有竞争关系,访问哪个节点效果都是一样的。

综上所述,只有kube-apiserver需要人工解决。解决方案也很简单,既然APIServer以HTTP API提供接口服务,就可以使用常规的四层或七层的代理实现高可用和负载均衡,如使用Nigix、HAProxy等代理服务器。并且可以更进一步,使用vip和keepalive实现,代理服务器的高可用。然后将集群的访问地址从APIServer的地址改为vip的地址。

 

############Master 高可用的两种方式################
1,Master 的节点堆叠方式,也是Kubenetes的默认方式
2,独立部署etcd集群方式

#Master高可用集群(堆叠式etcd数据存储服务)
#堆叠式集群拓扑

独立部署etcd集群方式:

posted @ 2022-08-24 23:06  一念6  阅读(206)  评论(0编辑  收藏  举报