摘要:kubernetes的组件etcd做高可用,官方建议节点数量是3、5、7、9这样的大于1的奇数个节点。必须是奇数个,主要是因为etcd使用raft这个选举算法。
kubernetes的组件etcd做高可用,官方建议节点数量是3、5、7、9这样的大于1的奇数个节点。必须是奇数个,主要是因为etcd使用raft这个选举算法。
kubernetes的角色分成master节点和node节点。
kubernetes的master,是管理端或者叫控制器,主要是维护kubernetes集群的正常运行。
kubernetes 的node,是真正实际上运行业务的服务器。
kubernetes的master节点有api-server组件,api是应用程序编程接口,Application Programming Interface。它是一组预定义的函数、过程、方法或者类的集合,用来实现不同软件组件之间的通信和交互。API-server是应用程序编程背后的处理端,api-server是和kubernetes集群交互的统一入口。一般kubectl和 web ui连接到api-server。web UI是虚线,官方默认没有配置对应的图形化界面,但是可以去安装。kubernetes官方社区开发了一个dashboard,它是一个仪表盘的组件。我们还可以安装第三方的仪表盘组件,比如Rancher。安装完成仪表盘之后,web UI把请求指向了api-server。
Kubectl是kubernetes集成的客户端工具,也就是命令行端工具,所有的命令键入都需要kubectl下发给当前的kubernetes集群,也就是下发给了api-server,api-server是整个kubernetes集群对外访问的入口。
kubernetes集群master节点上有组件scheduler,它是调度器,它也是连接到api-server。
kubernetes集群master节点上的组件replication controller,也就是Control Manager也是要连接到api-server。
api-server是kubernetes集群中所有组件连接的中枢点。api-server把数据存储到后端的etcd,etcd是一个键值对数据库。api-server还使用了restful的范式开发了集群对外暴露的接口。api-server接受请求并且审核请求之后,把数据存放到后端的etcd服务器内部。
Etcd是一个键值对数据库,键值对也就是key-value,它比较容易实现记录当前的集群信息。etcd是CoreOS公司基于golang语言开发的通过RAFT协议开发的键值对数据库,当前kubernetes集群的整个信息都会被保存到etcd数据库中。
Etcd最少有3个节点,可以组成etcd class集群。任何一个节点的损坏,不会将当前的信息丢失,etcd数据库存储当前kubernetes集群的集群配置和信息参数。
通过kubernetes可以把数以千计的物理机组合成一个大的集群,如果想运行一定的应用,只需要向大集群下发请求,它就可以自动帮我们选择位于哪一个节点去部署对应的容器。调度器scheduler去绑定我们要运行的容器和节点之间的关系,对应的节点就会运行我们希望使用的容器。
replication controller,也叫controller manager。可以理解Controller Manager为集群管家,它会尽可能保证我们当前kubernetes集群可用。它会定期检查kubernetes集群的运行状态,检查运行状态是不是和我们预期的相符。
Node里面有kubelet、kube-proxy、pod和Container。以kubernetes运行的云的概念,叫PaaS 平台即服务,它会通过容器的方案去运行业务。容器运行业务,有很多容器管理引擎。比如:docker、containerd、podman。kubelet并不真正去创建容器,它会通过调用接口去创建容器。比如kubelet调用docker、podman,通过它们去实现容器的创建。kubelet做到一种承上启下的作用,kubelet一方面要监听api-server,如果kubelet监听到了容器创建的请求,它会调用docker、containerd或者podman等CRI,也就是容器运行时去完成容器的创建,kubelet承上启下解决容器的创建和删除等问题。
kube-proxy也是去监听api-server,发现当前节点上有没有防火墙规则或者负载均衡规则需要被创建,kube-proxy解决当前节点的网络负载均衡问题。
有了kubelet和kube-proxy这两个组件,node节点就会并入整个kubernetes的管理生态中去,去实际运行我们需要的项目。组件是不可分割的、不可或缺的部分。
kubernetes集群的插件有docker、coredns、Ingress Controller等。docker、containerd、podman都是一类插件,我们统称为CRI容器运行时。
Coredns给我们kubernetes集群内部提供一个私有的域名解析服务。有了coredns,我们在kubernetes集群内部就有私有的域名,就有了除去IP以外的第二种访问方式。除了使用IP访问,我们还可以使用域名访问。
Ingress Controller提供一种七层负载均衡服务。LVS是一种典型的四层负载均衡方案,四层负载均衡在kubernetes官方已经提供了,是service。如果想要实现七层负载均衡的功能,我们需要安装ingress controller去实现,这是kubernetes官方提供好的接口。插件通过官方提供的接口一连接,就可以实现插件的功能。
kubernetes还有一些附件,比如prometheus、Dashboard、Federation。prometheus是普罗米修斯,是一款非常火爆的监控服务器,通过Prometheus可以给kubernetes集群提供一个完美的监控能力。
Dashboard是仪表盘组件。
Federation可以提供一个多kubernetes集群的、跨空间的管理能力。
鼓励的话语:强者,不退缩,更不抱怨。逆境求生,遇强则强!
来源:微生活政事儿