每周,K8S技术社区都将为大家带来Kubernetes(K8S)开源社区的最新技术跟踪!Get起来!
高可用 Kubernetes 集群
1.介绍
kubernetes集群高可用方案如下图:
1).etcd 集群高可用的key/value存储系统,用于持久化存储集群中的所有的资源对象,例如集群的node service pod rc namespace
2).kubelet服务监控器,负责监控api-server scheduler controller等服务的运行
3).load balancer,实现了service代理以及软件模式负载均衡器
4).add-on managers 所有附加组件管理器将独立工作,并且每个附加组件尝试保持同步
2.详细步骤
1).启动kubelet服务
在每个节点上,我们将运行一些Kubernetes API的进程。为了确保每个失败时自动 重新启动。为了实现这一点,我们需要安装一个进程监视器kubelet,并启动。
Systemclt start kubelet
systemctl enable kubelet
2).etcd 集群
在master节点将编写好的etcd.yaml 拷贝到/etc/kubernetes/manifests/etcd.yaml下,kubelet进程会监视该目录并启动etcd服务。
etcdctl member list
etcdctl cluster-health
3).启动kubernetes集群
编写hyperkube-apiserver.yaml hypermarket-controller-manager.yaml hyperkube-proxy.yaml hyperkube-scheduler.yaml并拷贝到/etc/kubernetes/manifests/etcd.yaml下,kubelet进程会监视该目录并启动kubernetes集群。
4).负载均衡
应该有3个apiserver都正常工作。 如果设置了网络负载均衡器,您应该能够通过负载均衡器访问集群,并且可以看到apiserver实例之间的流量平衡。使用身份验证,则除了各个节点的IP地址之外,需要重新生成证书以及包括平衡器的IP地址。
对于部署到群集中的pod,kubernetes服务/ dns名称应自动为主服务器提供负载平衡端点。
于API的外部用户(例如kubectl命令行界面,管道或其他客户端),您需要配置它们以与外部负载均衡器的IP地址通信。
5).add-on managers
所有附加管理器将独立工作。 他们每个都将观察附加组件的当前状态,并将尝试将其与磁盘上的文件同步。
集群联邦
kubernetes1.5的fedaration能为多个集群管理service、ingress等少数资源,经过短短几月的开发,用户已经能通过federation管理configmap\daemonset\deployment\ingress\namespace\replicaset\secret\service资源,不知道在这个趋势下kuber-apiserver会不会被federation-apiserver取代作为用户使用的入口服务。
目前用户可以使用replicaset(或未来版本federation中的deployment)跨集群调度相同应用程序的副本。 但用户可能还需要让副本在每个集群中自动独立扩展,通过HPA监控并获取各集群的资源使用情况(如cpu使用率、处理请求的个数、应用程序定义的自定义指标),自动伸缩pod的个数以获得流畅的用户体验。(该功能正在讨论设计方案)kubernets-sig-openstack1.kubernetes已经支持Keystone Trust(v3)和keystone token的使用
kubernetes已经支持OpenStack LBaaS v2:(公司在kubernetes集群中使用OpenStack LBaaS v2时,碰到一个严重的bug:在kubernetes集群中创建多个lb的service后,删除任意一个service,kubenretes会将所有service对应的pool和members删光。)
应用商店
在这个sig中关于“Application Registry”的话题很有意思:尽可能多地利用容器生态系统来构建用于托管应用程序的API。使用接近docker注册表数据模型,使现有系统(如gcr.io/quay.io/distribution)能够轻松实现服务API,并让用户推送和管理他们的应用程序,就像它们用于处理图像一样。通过仪表板/ UI来导航,搜索应用程序和CLI工具,如helm / kpm / etc来推送和拉取。
存储
1.Kubernetes 1.6版本存储方面的开发计划
https://docs.google.com/spreadsheets/d/1t4z5DYKjX2ZDlkTpCnp18icRAQqOE85C1T1r2gqJVck/edit#gid=0
2.Persistent Volume Recycler 从后续版本开始不支持 Recycle 这种回收volume机制。详见:
persistentVolumeReclaimPolicy: Recycle planning to be deprecated
https://github.com/kubernetes/kubernetes/pull/36760
3.StorageClass 版本变为stable
Beta annotation在v1.6版本中还是能正常使用,后面可能会彻底移除。详见:
https://github.com/kubernetes/kubernetes/pull/42128
4.Volume Snapshot in Kubernetes(提议k8s支持快照):
https://groups.google.com/forum/#!topic/kubernetes-sig-storage/D_A7bnGobMw
https://groups.google.com/forum/#!topic/kubernetes-sig-storage/1ijY99PIduo
5.scheduler and storage provision (PV controller) coordination:
https://github.com/kubernetes/kubernetes/issues/43504
6.微软Azure支持StorageClass):
https://github.com/kubernetes/kubernetes/pull/42170
监控
Prometheus是一个时间序列存储的开源的监控系统,Prometheus采用pull的方式拉取数据进行监控,架构图如下:
Prometheus官方提供了常用多样化的exporter,例如:node_exporter可以监控采集主机数据,mysql_exporter可以监控mysql,blackbox_exporter可以提供http、dns、tcp、icmp(ping)等的监控数据采集。数据的采集也支持DNS、Kubernetes、Consul等等的数据来源。
Prometheus数据存储是以时间序列的方式存储在本地磁盘上,目前只支持单节点的存储,不支持多节点分布式存储。
Prometheus和插件alertmanager使用可以为监控系统提供报警服务,通过配置rule规则配置文件,为相应的监控数据配置阀值对监控信息进行报警。
Grafana是一个开源的dashboard工具,支持Graphite,OpenTSDB,Elasticsearch,Cloudwatch,Prometheus,InfluxDB等监控工具,配合Prometheus使用可以实时的显示监控报警数据。
网络
Flannel 不同后端性能对比:
Flannel网络方案有多种backends实现,其中与平台无关的backends有三种:udp, vxlan, host-gw.
下面是一组三种backends的bandwith实验结果,基于openstack环境
-Direct server to server(bare metal): 9.39 GBits/sec
-Direct VM to VM (vlan): 7.74 GBits/sec
-Flannel with host-gw backend (between pods in different hosts): 6.0 GBits/sec
-Flannel with VxLAN backend (between pods in different hosts): 1.71 GBits/sec
-Flannel with UDP backend (between pods in different hosts): 0.385 GBits/sec
测试数据会和具体环境和配置有关系,但从不同的实验数据能得到共同的结论:
udp作为flannel的default backend,性能最差。
host-gw的性能最好,能达到80% native network bandwith。但是host-gw需要running flannel的nodes之间L2层直接连接,否则无法建立route规则。
vxlan同样作为overlay的方案,性能好于udp,因为udp是userspace做封包解包。vxlan是kernel space做封包解包。而且vxlan可以借助特殊的硬件设备达到更好的性能值。
如果cluster nodesL2层直连,推荐使用host-gw,否则推荐vxlan。实现一个 host-gw+vxlan的hybrid方案:
https://github.com/coreos/flannel/issues/519
K8S技术社区当前有两大技术推广平台,K8S技术社区官方网站(www.k8s.cn)和K8S技术社区微信公众平台(kubernetescn),我们欢迎广大K8S技术同好们关注支持,也希望集合K8S技术极客进群交流(筒子们后台留言微信号!),有任何建议或问题都可以随时与我们取得沟通(admin@k8s.cn),感谢支持!