写点什么

小白也能玩转 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:00909

评论

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

【深入了解系统性能优化】「实战技术专题」全方面带你透彻探索服务优化技术方案(系统服务调优)

码界西柚

JVM Java虚拟机 技术推荐 技术调优 开发实战

CDH5.11.2 集成 IceBerg(一)

冰心的小屋

数据湖 iceberg

探究直播app源码技术:视频上传功能

山东布谷科技

软件开发 APP开发 源码搭建 app源码 直播APP源码

产品质量管理利器,华为云发布CodeArts Defect缺陷管理服务

平平无奇爱好科技

华为云新一代iPaaS全域融合集成平台全新升级!

YG科技

PixelForce - AI绘画释放产品魅力

原力在线

Python潮流周刊#9:如何在本地部署开源大语言模型?

Python猫

Python

【分布式技术专题】「分布式技术架构」实践见真知,手把手教你如何实现一个属于自己的RPC框架(架构技术引导篇)

码界西柚

RPC 架构分析 分布式服务

是时候了!MySQL 5.7 的下一站,不如试试 TiDB?

PingCAP

MySQL 数据库 TiDB

Nautilus Chain 推出全新 Layer3 DID 公民身份,限量 10 万枚免费发放

西柚子

免费搭建一个有脾气的聊天机器人,1行Python代码就够了!

程序员晚枫

Python 微信 机器人

Nautilus Chain 推出全新 Layer3 DID 公民身份,限量 10 万枚免费发放

BlockChain先知

C++中的exec()函数

芯动大师

让开源项目从易用到好用 | 亚马逊的开源文化

亚马逊云科技 (Amazon Web Services)

开源

CDH5.11.2集成IceBerg(二):Spark3适配

冰心的小屋

spark CDH

es笔记三之term,match,match_phrase 等查询方法介绍

Hunter熊

elasticsearch

亿级日活业务稳如磐石,华为云CodeArts PerfTest发布

平平无奇爱好科技

企业应用可观测性利器!华为云CodeArts APM发布

平平无奇爱好科技

华为云Serverless核心技术与最佳实践

平平无奇爱好科技

RocketMQ 主从复制机制,看这篇就够了

勇哥java实战分享

一文了解PoseiSwap的质押系统

鳄鱼视界

一文了解PoseiSwap的质押系统

股市老人

华为云应用运维管理平台获评中国信通院可观测性评估先进级

YG科技

应用在虚机和容器场景下如何优雅上下线

YG科技

高效联调,可靠发布!华为云推出CodeArts Release发布管理服务

YG科技

2023-07-01:redis过期策略都有哪些?LRU 算法知道吗?

福大大架构师每日一题

redis 福大大架构师每日一题

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