Kubernetes高可用部署之前言
本人参加了华为[21天转型容器实战营]课程,有些感受与大家分享。注:本人适合有Linux基础的人阅读,旨在深刻理解K8S原理。
先来聊聊天K8S本身,然后再来部署高可用的集群,只有认清K8S到底是什么,这样我们才能知道为什么要上K8S,K8S可以为我们带来什么。K8S搜索引擎上有很多陈词烂调,这里我就不重复了。这是我的一些个人心得,不正之处请指教:
1、K8S的运行是采用master/node结构,可以对master和node分别做高可用,我这次采用HAProxy和KeepAlived来实现,篇幅有限,不再赘述这两个软件的作用。
2、K8S的管理采用c/s结构由K8S下的kubectl进制文件来提供,记住:这是“管理”工具,和下面一项提供的几个二进制文件没有必然联系,只是官方提供的管理工具,不对外提供服务,也不是daemon。没有这个集群照样运行,可以利用K8S的REST规则开发类似工具,比如华为云的K8S管理操作很可以在WEB界面完成。
3、K8S是由一组软件组成,到了服务器里面就是多个二进制进程:
A、master软件主要有kube-apierver、kube-controller-manager、kube-scheduler;
B、node软件主要有kubelet和kube-proxy;
FAQ:为什么网上都说这些是服务?
答:这些二进制文件因其作用要一直保持在后台运行,如果你加入配置直接运行二进制文件,在Bash里面用&放到后台运行,效果是一样的。只是为了方便把这些二进制文件放到服务里面可以使用相应软件管理,如CentOS7可以使用systemctl来管理查看这些服务(二进制文件),实际这些服务配置文件XXXX.Service里面可以什么也不用写,我这样说的目的是为了方便大家理解K8S到底是什么,去除像我这样的初学者对网上资料述语造成的神秘感。说到底K8S本身就是五个二进制文件。
4、K8S的使用对服务器是有前提条件的,而这些前提条件很多网文解释并不清楚。让初学的我曾看得云里雾里:
A、K8S默认你的网络是扁平化的,说得直接一点,就是所有的POD要能够互连互通。下面是安装好Docker的网络模型,实际上K8S默认不支持这样的网络,两个POD之间无法通讯。目前的解决方法有两种:a.直接连通,物理网卡和DOCKER网卡处于同一网段如172.17.0.0/16私有地址。量大可以在集群里安装路由协议。b.覆盖网络,目前此类软件也比较多,如Flannel、Open vSwitch、Weave等。目的就是接管Docker网络协议DOCKER0网桥,由这些第三方插件来管理POD网络。
B、所以K8S的运作和管理是要配合第三方工具来完成的。比如K8S的服务进程如何存这些数据,如何实现高可用,如何可视化等,这些都要借助第三方工具来完成。目前学习阶段一般要安装的插件有Etcd数据库来存K8S服务进程的数据,如FLANNEL的网络路由数据。HAproxy+KeepAlived来部署master高可用。
5、所以我们部署k8s的必要软件有:
a.官方组件kube-apiserver:提供对kubectl工具的管理入口。
b.官方组件kube-controller-manager:Node-Controller,ResourceQuota-Controller,Replication-Controller,Endpoint-Controller,Service-Controller,ServerAccount-Controller,Token-Controller,Namespace-Controller,这些控制全靠这个组件了。
c.官方组件kube-scheduler:调试资源使用,一个承上启下的组件,从kube-controller上拉取待调度的POD,然后调试结果写进Etcd,把pod管理权交给了kubelet。
d.官方组件kubelet:master在NODE节点上的代理人,管理本节点资源并定时上服MASTER。
e.官方组件kube-proxy:每个server的endpoint都给这个组件使用,并有一定LB功能,进行对外沟通。
f.etcd和flannel,这两个非官方组件,一个提供集群数据存储,一个负责管理POD网络。
6、其他可用插件如coredns,HAproxy,Keepalived,dashboard,heapster,metrics-server,EFK等在实际生产过程中也会用到。
具体的操作过程,我会写哪儿说到哪儿。以便大家理解每个参数的意义和作用。
本人很少写技术文章,欢迎大家指正。
- 点赞
- 收藏
- 关注作者
评论(0)