QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

小白也能玩转 Kubernetes 你与大神只差这几步(一)

  • 2019-10-29
  • 本文字数:3643 字

    阅读完需:约 12 分钟

小白也能玩转Kubernetes 你与大神只差这几步(一)

随着 Kubernetes 技术热度的不断提升,大容器时代的序幕已经开启。容器技术日新月异,在企业应用实践中得到了不断的发展,高效的运维、管理和部署都成为云服务的重头戏。而与此同时,Kubernetes 虽然降低了容器的使用门槛,但其本身的技术门槛却并不低,这种矛盾引起了开发者的关注,也成功在 2018 年将 Kubernetes 推到了顶峰。

因文章略长,故分为三篇展开呈现,本篇为第一篇。


6 月 30 日,腾讯云联合 InfoQ 举办的云+社区技术沙龙,以 Kubernetes 上云一键部署、云上大规模计算平台构建、CIS 底层技术实现、Tencent Hub 技术架构与 DevOps 落地实践等五大主题内容,分享容器与 k8s 技术的部署优化与应用实践。本文整理了讲师演讲精彩内容!

Kubernetes 上云一键部署实践

在 2016 年底,腾讯云开始提供全托管 Kubernetes 服务,主要提供了四个方面的功能,第一,一键部署完全隔离的 Kubernetes 服务,用户独享所有结算节点和控制节点,并提供集群的全生命周期管理;第二,为方便 Kubernetes 使用,在控制台进行了界面包装,通过可视化的方式创建负载,避免手工编写代码;第三,提供周边监控能力,与腾讯云监控产品打通,直接在产品界面上使用;第四,在 Kubernetes 集群外还提供了 Docker 镜像仓库、Tencent Hub、CI/CD 等功能,提供一站式应用上云解决方案。

腾讯云容器服务 Kubernetes 组件一览

Kubernetes 的运行需要进行 Master 组件和 Node 组件的初始化。


Master 组件最简单的部署要包括 Kube-apiserver、Kube-contioller-mannager 和 kube-scheduler。Kube-apiserver 是整个集群的集中存储器,其功能包括了所有组件与 Kubernetes 的交互、部分工作负载的存储、部分用户对存储的需求。Kube-controller-manager 主要负工作负载在集群里的运行;Kube-scheduler 主要负责 pod 的调度,如所在的运行机器、调度到集群含 GPU 的节点等调度工作。


集群的 Master 组件部署好后就需要部署一些 Node,主要包括两个组件, 第一个是负责在 Node 上创建 Pod 的 kubelet;第二个则是负责程序在集群配置规则使其能够被自动发现和访问的 kube-proxy。


此外,腾讯云还提供了一些自研组件。第一个组件是 hpa-metrics-server,为了让用户能够使用 Kubernetes 提供的 Pod 横向扩展控制器而研发,其优点在于,除了基于 CPU 和内存扩展之外,还能扩展 pod 出入带宽的指标,方便用户适应更多扩缩容场景。第二个组件是则是 cbs-provisioner,提供了 pod 使用腾讯云 cbs 块存储服务的能力;第三是 ccs-log-collector,主要是负责收集容器里 pod 运行日志。

容器网络

当 Kubernetes 把控制组件搭建起来后,它要求网络提供三点,在 pod 不使用 NAT 的情况下,第一,集群内所有容器之间可以进行通讯;第二,所有的节点和容器之间可以进行通信;第三,为了应对服务发现的需求,降低网络复杂度,要求不能使用 NAT,并实现 Node 和 pod 之间的扁平化网络。



腾讯云 Kubernetes 使用的方案如上,这一方案方案直接使用了 VPC 提供的路由能力 global route。使用 docker bridge 网络模式;pod ip 由 cni 插件分配;pod 可以跨主机访问使用 vpc global route;采用了扁平化网络,主机、容器间实现对等互访。Kubernetes 结点加入到一个集群中触发网络的过程如上图所示,这套过程中 Docker 采用了 bridge 的网络模式,pod IP 直接由 cni 插件分配。

容器存储

这套 Kubernetes 集群中主要集成了腾讯云的块存储服务的 CBS 和 CFS 两个能力。



Kubernetes 将 volume 挂载到 pod 里面时包含的过程如下:首先,Kube-controller-manager 会为 CBS 提供 volume 进行准备。即会先创建一个云盘,然后将创云盘插到对应的主机上,主机上的 Kubelet 会做一个 mount 动作,将设备 mount 到一个 Kubernetes 指定的文件夹,Kubelet 在创建这个 pod 时,会通过 mount 的形式把 mount 到的目录实际挂载到容器的 namespace 里。当 pod 销毁后, volume 不再被需要,就会反向执行,先从主机上把对应的块设备先 umount 掉,再把 detach 掉,然后由 Kube-controller-manager 根据对应的 plugin 设置销毁或保留。


Kubernetes volume 的插件机制主要包括了三种,第一种是早期使用的 In tree volume plugin,需要将代码写在的代码仓库中,会影响正常存储功能的使用和集群稳定性;第二种是 Flex Volume 在扩展性和稳定性上有所增加,能够通过特定接口的二进制文件,实现 mount 和 umount 动作。这种方式的缺陷在于自动性不足且对环境有要求;第三种基于社区 CSI 接口实现的插件,也就是将 Flex volume 的二进制文件工作全部放到了容器里面,让 Kubelet 与对应功能的插件通信,最终实现 mount 和 umount 的动作。

容器日志与监控

在 Kubernetes 里面并没有提供默认的日志方案,资源消耗较大且步骤复杂。腾讯云容器服务的日志收集控制器主要基于 Fluentd + kubernetes CRD(custom resource definition)实现,能够提供可视化配置。



该控制器支持收集容器的标准输出,也支持收集 pod 所在的 Node 上主机文件路径的内容。另外可以通过 LogCollector 监听 Kubernetes-apiserver 资源,生成对应的 Fluentd 的配置文件,触 Fluentd 重载收集日志文件。直接配置 Fluentd 收集 pod 对应的路径规则,根据需求做日志路径,将不同的日志发往不同后端,这样就实现了日志收集。



在监控方面,Kubernetes 里的 pod 性能信息和云监控进行对接,在用户的 Kubernetes 节点上运行 agent,在 kubelet 里内置的 cadvisor 收集 pod 运行性能信息,再去 apiserver 获取 pod 对应的元数据并进行打标签,然后上传到腾讯云监控服务。


另外基于腾讯云存储的监控指标实现 hpa-metrics-server, 再利用 Kubernetes 提供的 HPA 能力会定期获取 pod 当前的入带宽、出带宽等指标熟练,并且根据定义进行扩容和缩容。

CVM 上部署 Kubernetes

在早期,为了实现产品快速上线,同时满足完全隔离的全托管 Kubernetes 服务,Master 组件部署在一台 CVM 并放到用户 VPC 里,用户的 Node 节点直接在 CVM 的机器上,在此基础上做 Kubelte 等参数初始化工作、集群证书配置、默认拉取镜像凭证初始化等工作。



该方案节点均处于用户 VPC 中,通过 Agent 初始化部署整个集群,缺点就算管理困难。通过 SSH 直接登录到客户的 Master 节点进行运维操作,无法编程化,而且容器运维与 Kubernetes 关系离散。

Kubernetes in kubernetes

在此前,每个集群都在 ETCD 里面各自目录,相当于软隔离的措施。但 ETCD 并不是为海量数据存储服务的,因此在线上运行了数万个集群后, ETCD 问题越发密集。因此最终决定了把 Kubernetes 部署在 Kubernetes 里面,通过 Kubernetes API 去管理 Master 组件,包括的 apiserver、kube-controller-manager 和自研组件。这样做就不需要通过 SSH 方式,到每台机器上进行操作,而是直接通过 deployment 提供的滚动升级能力来完成。


这样做的话可以充分利用 Kubernetes 的健康检查和就绪检查等机制实现故障自愈。基于 hpa-metrics-server,可以实现 apiserver 的动态扩容,满足 Kubernetes 集群节点对于 apiserver 性能的需求。



但是基于 CVM 的部署方案,所有的组件都部署在用户的 VPC 里面,如果我们把所有组件部署在 Kubernetes Master 里面,而且不能给每个用户部署一个 Kubernetes 集群。所以腾讯云提供了一个专门的 Kubernetes 集群,运行所有集群的 Master。VPC 提供的弹性网卡能力,直接绑定到运行 apiserver 的 pod 里,去实现和用户 Node 相关的互通。


通过在 Kubernetes 集群里面部署 Kubernetes Master 组件,成功降低了运维成本和 Master 组件的资源消耗。

CIS 底层技术实现

Kubernetes 上云部署实现了运维简化的基础,各种优质工具的开发则进一步丢下了开发者的包袱。对于开发者而言,Docker 应该是非常常见的一种技术。通过 Dockerfile 或者 Docker build 命令打包镜像,通过 Docker pull、Docker push 命令和容器仓库进行对接,最终实现跨平台的运行,Docker Wrong 命令直接把 Docker 镜像运行了起来。


但 Docker 的问题在于管理复杂,需要 Kubernetes 简化编排。可是 Kubernetes 本身却比较复杂,一是安装复杂,组件颇多,需要 master 节点、Node 节点等,还需要诸多软件,如 apiserver、controller-manager、scheduler、Kubelet 等;另外资源也复杂,入门需要一定时间。


腾讯云原来有 TKE 集群,能够帮助用户快速建立 Kubernetes 集群,master 节点和 node 节点都是由腾讯工程师维护,给用户使用带来诸多便利。但是问题在于,当集群节点突发性不够用时,资源受节点限制,扩展需要手动添加节点,至少要几十秒延迟才能完成创建。



其他方法还有,如用 Kubernetes 开源的 CA 与腾讯云弹性伸缩组进行对接,当节点不够用时,可以通过 CA 来扩容一个节点。或者采用 HPA,可以进行 pod 横向伸缩容,但这样做虽然可以解决部分灵活问题,但依然不够。


在这些原因的驱使下,腾讯云 CIS(Container Instance Service)服务就有了需求动力,其本质就是 Serverless Kubemetes 服务,将 Kubernetes 集群交给云厂商管理,而用户只需要关注 Docker 本身即可。


2019-10-29 18:00882

评论

发布
暂无评论
发现更多内容

测试开发名企定向培训训练营即将开营,限时优惠进行中

测试人

软件测试

Copilot的魔法让TiDB离线升级变得轻松愉快

TiDB 社区干货传送门

版本测评 8.x 实践

TiDB性能优化-操作系统

TiDB 社区干货传送门

性能调优

ISO 专家解读 | 什么是 GQL 国际标准图查询语言

悦数图数据库

图数据库

实战干货|Spark 在袋鼠云数栈的深度探索与实践

袋鼠云数栈

spark Spark 源码 spark SQL 离线开发 大数据计算引擎

答辩ppt要包含什么内容?分享2个制作答辩ppt的实用技巧!

彭宏豪95

PPT 大学生 在线白板 办公软件 演示文稿制作软件

TiDB告警推送至企业微信机器人

TiDB 社区干货传送门

监控 集群管理

Operator 安装 TiDB 监控告警

TiDB 社区干货传送门

管理与运维 安装 & 部署 数据库架构选型 7.x 实践

突破数据存储瓶颈!转转业财系统亿级数据存储优化实践

TiDB 社区干货传送门

世界知识产权日:XSKY 以更多架构核心专利,推进 SDS 产业创新创造

XSKY星辰天合

星辰天合 世界知识产权日

什么是IPD项目管理模式?聊聊IPD下的产品研发流程

IPD产品研发管理

产品 项目管理 IPD 产品研发

测试开发名企定向训练营即将启动,限时优惠火热进行中!

霍格沃兹测试开发学社

QCN6274 vs QCA9880: Comparison of SOC and wireless communication chips

wifi6-yiyi

wifi qcn6274

如何构建更稳定高效的TiDB多租户系统

TiDB 社区干货传送门

新版本/特性解读 数据库架构设计 应用适配 HTAP 场景实践 7.x 实践

TiDB的数据自动均衡到底是怎么实现的?

TiDB 社区干货传送门

数据库架构设计 TiKV 底层架构

TiDB 在 CDC 同步下的主备切换

TiDB 社区干货传送门

集群管理 管理与运维 备份 & 恢复 6.x 实践 7.x 实践

PCSD考试说明及课程汇总

TiDB 社区干货传送门

社区活动 OLTP 场景实践 7.x 实践 学习&认证&课程

测试 k8s 安装

TiDB 社区干货传送门

管理与运维 7.x 实践

腾讯会议天籁实验室两项研究成果获深圳人工智能奖

极客天地

万界星空科技MES系统在食品加工行业的应用

万界星空科技

制造业 mes 万界星空科技 食品行业 食品加工

tidb-operator 安装 TiDB 集群

TiDB 社区干货传送门

集群管理 管理与运维 安装 & 部署 数据库架构设计 7.x 实践

一次莽撞的 TiDB 升级故障复盘

TiDB 社区干货传送门

版本升级

马斯克的 xAI 融资 60 亿美元;英伟达收购两家 AI 创企丨 RTE 开发者日报 Vol.193

声网

深入大模型的世界

我是谁

预见预判|AIRIOT智慧交通管理解决方案

AIRIOT

智慧城市交通 智能交通 智慧交通系统

知识图谱算法有哪些

悦数图数据库

小白也能玩转Kubernetes 你与大神只差这几步(一)_语言 & 开发_云加社区_InfoQ精选文章