使用kubernetes1.0构建CaaS

Posted 网易云基础服务

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用kubernetes1.0构建CaaS相关的知识,希望对你有一定的参考价值。

10月25日,网易资深开发工程师方应受邀参加DockOne社区举办的沙龙活动,并带去《使用kubernetes1.0构建CaaS》的技术分享,以下是PPT内容摘要


使用kubernetes1.0构建CaaS

作者介绍:方应

网易杭州研究院资深开发工程师,有多年linux内核经验,对系统、网络、存储等有深刻了解。从LXC开始研究容器技术,对其有比较深入的了解,现致力于网易蜂巢的研发。


kubernetes架构

Master:

apiserver

controller

scheduler

Node:

kubelet(cadvisor)

proxy

Other:

heasper

influxdb

skyDNS


组件详解及实践

1Apiserver


职责


1.处理api请求

2.用户验证和授权

3.资源验证

4.创建各种资源

5.数据持久化,写etcd


使用kubernetes1.0构建CaaS


Apiserver实践


安全


1.认证:密码、token、证书

2.授权:ABAC模式

生成证书推荐使用easyrsa工具:

https://github.com/kubernetes/kubernetes/blob/master/cluster/saltbase/salt/generate-cert/make-ca-cert.sh

使用kubernetes1.0构建CaaS
原生支持通过配置文件配置token的方式来认证,以及配置授权文件,缺点是不能动态生效。

网易蜂巢系统中采用了iaas层的keystone。

使用kubernetes1.0构建CaaS

使用kubernetes1.0构建CaaS

资源


资源限制分为几个层次namespace:ResourceQuota,pod和container:limitRange。

使用kubernetes1.0构建CaaS
使用kubernetes1.0构建CaaS

serviceAccount通过服务端配置的私钥来生成的用于访问kubernetes服务的token,本质是一个secrets,secret安全性比直接存在文件系统中要好。

蜂巢在实际中也采用了secret特性。

使用kubernetes1.0构建CaaS

使用kubernetes1.0构建CaaS


2Controller


职责


1.管理endpoint

2.管理rc

3.管理node,维护健康状态

4.管理namespace

5.为pod调度volume

6.生成serviceAccount token

使用kubernetes1.0构建CaaS

3Scheduler


职责


调度每一个新创建的pod


算法


针对每一个等待调度的pod,分为两个步骤来决定调度到那个node

方法:轮询每个node

1.可不可以调度

2.合不合适调度


使用kubernetes1.0构建CaaS

集群部署实践


集群


Kubernetes目前只能叫做高可靠,通常的做法是部署多套(每一套apiserver、controller、scheduler位于同一台机器),通过一个HA来进行切换,同时只有一套是处于服务状态中,etcd推荐采用集群部署。

使用kubernetes1.0构建CaaS


集群


如果集群使用https,而且希望通过证书来和客户端进行双向认证,apiserver前端可以使用haproxy进行透传。

官方的切换脚本有个小问题,在实际使用中,如果apiserver挂掉不能够正确的切换。

使用kubernetes1.0构建CaaS

这种HA的方式在性能方面显得有些局促,apiserver和scheduler都不能进行水平扩展。


4Node/Kubelet


职责


1.管理pod生命周期

2.管理pod所需volume

3.汇报node健康状态

4.收集pod运行数据

5.资源回收(containers、images)

6.管理pod所需资源

使用kubernetes1.0构建CaaS


5Node/kube-proxy


职责


通过apiserver监听endpoint变更,根据endpoint修改iptables、启动代理线程,将数据流量导入pod。

使用kubernetes1.0构建CaaS

存储实践


除了高可靠,在实际使用docker中,存储、网络、日志、灰度发布、快速扩容等也受到广泛关注。


存储

Kubernetes在存储方面提供了多种选择,gce、aws、iscsi等,使用这些volume可以通过PersistentVolume(pv)、和PersistentVolumeClaim(pvc)来实现。

使用kubernetes1.0构建CaaS使用kubernetes1.0构建CaaS

使用kubernetes1.0构建CaaS使用kubernetes1.0构建CaaS

网易蜂巢在kubernetes中集成了网易NBS(云存储),容器则全部运行在SSD上,同时支持挂载基于SSD的云存储。

使用kubernetes1.0构建CaaS

使用kubernetes1.0构建CaaS


网络实践


Kube-proxy


Kube-proxy实际是一个代理,为每一个service创建一个线程,通过iptables将访问服务ip的流量导入这个线程,由其转发至pod。

使用kubernetes1.0构建CaaS

使用kubernetes1.0构建CaaS

如果多个pod在同一个node上,会采用简单的轮询。Kube-proxy在规模大的时候会有性能问题。可以考虑使用haproxy或者其他负载均衡产品。社区也在考虑全用iptables来实现流量转发。

使用kubernetes1.0构建CaaS

使用kubernetes1.0构建CaaS


其他实践


日志


Kubernetes支持flutend到处日志。每个container的日志,kubernetes存储在/var/log/containers下。

如果已经有日志系统,可以通过每个node上运行一个日志收集agent从本地磁盘导出日志。

Kubernetes1.1版本中,引入了新的特性damone,可以在每一个node上创建一个类似的守护进程(pod)。


灰度发布


Kubernetes rollingUpdate可以直接实现灰度发布,失败回滚。其本质是通过两个rc,一个控制旧版本,一个控制新版本,进行乒乓似的减少旧版本的实例,减少新版本的实例。

Kubernetes的label特性也很容易将故障pod下线然后进行故障诊断。同时也能让新旧版本共存进行新版本的检验。


服务发现


根据不同用户的习惯,可以采用不同的方法。Kubernetes本身提供skyDNS来替代老的环境变量让pod内部可以轻易访问到需要的服务。

一些老的系统可能基于有基于其他的一些服务发现机制。进行系统迁移是也可通过一定的策略避免较大的改动


蜂巢提供两种容器使用方式。为其中一种容器分配外网ip,提供ssh,可以进行镜像调优,并支持commit操作。容器故障退出后会自动恢复至上次commit时的环境,其所使用的云存储也会随容器自动迁移。


快速扩容


Kubernetes对于pod级别的快速扩容可以轻松实现,通过rc就可以快速地动态调整业务容器的数量。

但是对于node资源的扩容,需要依赖用户已有的根底。

蜂巢基于原有iaas,采用了多级资源池,能快速的响应用户突发的快速扩容。


性能


Kubernetes目前的架构下,根据官方数据能够支撑100个node,3000个pod。现有系统有很多值得优化的地方。

1.Go语言层面的

2.调度器的轮询机制

3.Master组件的单主模式

4.资源定义数据结构庞大,网络通讯开销较大


蜂巢的实践


蜂巢基于网易IaaS平台,整合了部分后端服务,采用全SSD,万兆网络,灰度发布,提供负载均衡,高性能数据库服务。



(点击可看大图)

点击左下角“阅读原文”即可进入蜂巢官网,目前可以申请免费体验名额!



问 题

一些问题:

1.Rc label重复导致乒乓而死锁

2.直接delete 掉node节点,运行在其上的pod并没有在其他地方重新调度

3.Apiserver在etcd脑裂后不能正常切换


1.调度器在批量的时候会产生延时

2.Master单主

3.水平扩展


马上关注“网易云”,精彩不错过

以上是方应《使用kubernetes1.0构建CaaS》的PPT内容,具体细节请听25日精彩分享,感谢您的关注点击左下角“阅读原文”即可进入蜂巢官网,目前可以申请免费体验名额!


网易云

关注“网易云”了解动态

获取云计算技术干货



以上是关于使用kubernetes1.0构建CaaS的主要内容,如果未能解决你的问题,请参考以下文章

使用自定义构建器使用 Android 创建发布构建

使用自动工具构建系统/在单独的“构建”目录中构建

使用 GraphQL 构建 BFF Demo

使用构建事件停止构建并显示消息

你可以使用ANT构建文件作为Phing构建文件吗?

如何检索在 VSTS 中触发构建时使用的构建参数(使用 REST API)?