TKE(Tencent Kubernetes Engine) 是腾讯云提供的容器服务PAAS 平台,基于kubernetes, 集成了腾讯云vpc网络,负载均衡,存储等IAAS 资源,提供容器调度、日志、监控、镜像仓库,Helm编排,自动弹性伸缩,微服务治理,DevOps 等功能,为客户提供完整的企业级容器服务。
在腾讯云上使用容器服务,到底是自建k8s 集群,还是直接使用TKE, 这篇文章从以下几个方面来说明各自的优势和风险。
1. 集群安装和升级
TKE:
通过web页面一键安装,10分钟以内完成安装,提供两种集群管理模式。
- 托管k8s集群,master 节点托管在腾讯云的服务器上,用户只需要购买node节点即可,无需用户自己购买和维护master 节点,适合希望节省资源成本和运维成本的用户。
- 独立Master集群,用户购买Master 节点,灵活配置,可跨可用区,适合希望自主可控master 节点的用户。
自建:
虽然社区提供了kubeadm 这样的工具,但是安装一个高可用的k8s 集群也还是没那么轻松;需要手动创建api-server 的负载均衡,手动安装docker、kubelet、kubectl ,考虑证书过期问题,cni 网络插件选型问题等等。
k8s 1.14 官方文档也有说明:
You should also be aware that setting up HA clusters with kubeadm is still experimental and will be further simplified in future versions. You might encounter issues with upgrading your clusters,
使用kubeadm 安装高可用集群还在实验阶段,在未来的版本中会更简单,你可能在升级集群的过程中也会遇到问题。
2. 网络
TKE:
提供两种网络方案:
1. 全局路由方案
TKE 容器网络和腾讯云VPC 网络打通,容器网络和节点网络在同一平面内,可以实现在任何vpc内容器网络和节点网络互通,容器网络和客户IDC 网络互通,且没有额外的性能开销,性能接近节点网络。
如图:在管理面,TKE 在创建集群时会让让用户选择一个容器网络,如10.0.0.0/16, 安装集群时,给每个node 节点从这个网段中划分一个子网,作为Pod Cidr, Pod 创建时从Pod Cidr 选择IP 。将Pod cidr 和node的对应关系下发到全局路由表里,让容器IP 在vpc 内可路由。
在数据面,容器网络通过cbr0 在同一节点通信,eth0 出节点,在物理宿主机上完成封包、路由及解包,转发给目标pod 所在的虚拟机。
2. vpc-cni 方案
利用腾讯云弹性网卡功能,自研ipamd 及 cni 插件,实现容器直接使用vpc 内的ip 地址。同时也实现了基于StatefulSet 的podip 固定, Pod ip 自定义使用范围等高级特性。适合有历史包袱或者特殊网络安全策略的业务;比如数据库的安全组策略,业务要求只能放通某些ip 或者某个IP 范围。
自建:
- 使用TKE提供的CloudProvidor 插件,和腾讯云vpc 打通
- 使用社区的网络插件,在公有云上,基于路由协议的网络插件(如calico, flannel host-gw)都无法和vpc 的路由打通,所以只能使用隧道模式的网络插件,但隧道模式的网络插件都需要在cvm 上再做一次vxlan 封包,我们做了压力测试,性能损耗大概在30%左右,如图:
测试详情:https://cloud.tencent.com/developer/column/1075
3. 存储
TKE:
支持腾讯云的快存储,文件存储,对象存储;文件存储和块存储目前已经支持手动或者StorageClass 的方式自动创建pv pvc, 对象存储也即将支持。
自建:
自己维护一套存储软件,如ceph, glusterfs 或者通过TKE 提供的csi插件(https://cloud.tencent.com/document/product/457/18545)使用腾讯云块存储。
4. 负载均衡
TKE:
TKE 支持类型为LoadBalancer 的svc, 自动创建4层LB, 支持ingress 的方式暴露7层LB, 给服务暴露公网或者vpc 内网访问。 当然客户习惯使用nginx-ingress 或者treafik-ingress, TKE 也平滑支持。
自建:
使用TKE 提供的servicecontroller 插件,创建类型为LoadBalancer的svc, 使用腾讯云4层LB, 使用nginx 或者 traefik ingress 提供7层LB。
5. 镜像仓库
TKE提供的镜像仓库具有以下特性
- 免费,无镜像数限制
- 可靠,高可用设计,多registry 实例,对接后端对象存储
- 急速,腾讯云云主机上内网访问,p2p 镜像分发也在实现中。
6. 集群运维
TKE 有专门的团队来维护用户集群,从3个方面来说:
1. 集群Master 可用性
- etcd 连接数及延时监控
- master各系统组件实时数据采集. 健康检测. 展示及告警, 及时发现集群潜在问题。
- service/ingress pending状态资源采集及告警
2. 集群节点可用性
- dockerd, kubelet 健康检查 及热重启
- 基于ntp组件(node-problem-detector) 实现节点内存碎片化的监控,主要监测两件事情(cgroup oom和system oom),并且通过event的方式上报给k8s。可以通过kubectl describe node查看到上报的事件。
3. 丰富的集群运维经验
- TKE 团队到目前为止运维了线上几千个集群,版本包含k8s 1.7 到 k8s 1.12, 遇到过各类k8s 问题,可以很快给出合理的解决方案。且有很多问题已经通过产品化规避。
7. 技术支持
- TKE产品及架构师团队定期拜访客户及技术交流
- TKE架构师及研发团队在线问题支持