至顶网软件频道消息: Kubernetes已经成为大规模部署容器化应用的一个标准方式。但是,如果Kubernetes能帮助我们驯服庞大而复杂的容器部署,那么有什么能帮助我们去驯服Kubernetes呢?Kubernetes也是很复杂、很混乱且难以管理的。
在Kubernetes发展的过程中,一些难题可能会从内部得到解决。但有些人并没有等待着Kubernetes发展到更易于使用的阶段,而是用他们自己的解决方案来解决生产中运用Kubernetes遇到的许多常见问题。
下面我们就来重点介绍22款以各种方式简化Kubernetes的开源项目和第三方工具——从简化命令行交互到简化应用部署语法,再到与AWS集成,以及为多个集群提供窗口,等等。
现代Web应用或者服务都具有某种形式上的移动界面,Cabin为Kubernetes管理员提供了一个可以从iOS或者安卓智能手机访问的Kubernetes仪表板版本。这个Kubernetes仪表板中提供的许多功能都可以从Cabin启动,包括Helm图表、扩展部署、读取pod日志、访问Kubernetes托管的Web应用。
人都是视觉动物。图形和图表让我们更容易了解全局。考虑到Kubernetes集群的规模和复杂性,可视化也许可以带给我们一些帮助。
Goldpinger是由Bloomberg技术部门开源的一款工具,它运行在Kubernetes集群内,可以显示节点之间的关系交互式地图。状况良好的节点显示为绿色,有问题的节点显示为红色。你只需要单击节点即可获取详细信息,还可以使用Swagger自定义API,提供报告、指标和其他集成。
如果你想将应用部署到Kubernetes,很多应用都会使用Helm图表来指导和自动化该过程。但是,如果你想按原样使用Kubernetes集群并将其部署到其他某个位置呢?
Gravity会对Kubernetes集群、容器注册表以及运行的应用进行快照,称为“应用捆绑包”,这个捆绑包只是一个.tar文件,可以在Kubernetes运行的任何地方对集群进行复制。
Gravity还能确保目标基础设施可以支持与来源相同的行为要求,以及在此之上的Kubernetes运行时要求。Gravity企业版还增加了安全功能,包括基于角色的访问控制,以及跨多个集群同步安全配置的功能。
管理员们喜欢“单一窗口”型工具。K9s就是一款面向Kubernetes集群的全屏CLI UI。它让你能够一目了然地了解运行中的pod、日志和部署情况,快速访问shell。注意一点,你需要在用户和命名空间级别给用户提供Kubernetes读取权限,以便正常使用K9的功能。
大多数容器映像都是构建在容器堆栈外部的系统上的。但有的时候你希望在容器堆栈内构建,例如,在一个运行中的容器内部,或者在Kubernetes集群的某个位置。
Kaniko是在容器环境内进行容器构建的,但不依赖于像Docker这样的容器保护进程。 Kaniko会获取基本的映像,提取文件系统,然后在提取文件系统之上的用户空间中执行所有构建命令,在每个命令完成之后对文件系统进行快照。
请注意,目前Kaniko还无法构建Windows容器。
经常有人抱怨Kubernetes的清单或应用定义太复杂、太冗长,无论是编写代码还是维护起来都是一件很痛苦的事,所以人们不得不求助于第三方工具来解决这些问题。
Kedge就提供了一种更简单、更简洁的语法。你向Kedge提供一个Kubernetes定义文件的简单版本,Kedge就可以把这个简单的定义扩展为完整的Kubernetes版本。与Koki Short(见下文)不同的是,Kedge的声明文件并不使用模块化语法,而是将应用定义归结为常见的快捷方式。
请注意,Kedge最近一次更新版本是在2018年4月。
和Kedge类似,Koki Short是一款改进了应用定义或者Kubernetes清单文件的工具。与Kedge定义一样,Koki Short定义采用缩写语法来描述Kubernetes pod,可以将其转换为完整的语法,然后再转换回来。与Kedge定义不同的是,Koki Short定义也是模块化的,这意味着来自一个Short声明的细节可以在其他声明中重复使用,这样就可以简明扼要地定义多个具有共同元素的pod。
Kops工具是由Kubernetes团队开发的,可以帮助你通过命令行管理Kubernetes集群。Kops支持集群运行在AWS和GCE上,未来还将支持VMware vSphere和其他环境。除了自动化设置和卸载流程之外,Kops还可以帮助实现其他类型的自动化,例如可以生成Terraform配置以允许使用Terraform重新部署集群。
作为面向Kubernetes的高级终端控制台,Kubebox不仅为Kubernetes及其API提供了美观的外表,还可以交互式地显示内存和CPU利用率、pod列表、运行中的日志、以及配置编辑器等。最重要的是,Kubebox是被作为一个独立的应用提供给Linux、Windows和MacOS操作系统的。
大多数Kubernetes管理工具都侧重于易用性、监控、对pod行为的洞察等,但是关于运行Kubernetes相关的成本监控呢?
Kubecost使用实时的Kubernetes指标,以及运行在主流云提供商那里的集群所提供的实际成本信息,来提供每个集群部署的月度成本仪表板,涵盖了按照Kubernetes组件(容器、pod、服务、部署等)分解的内存、CPU、GPU和存储相关成本。
Kubecost还可以追踪“集群之外”各种资源(例如S3存储)的成本,但目前仅限于AWS。成本数据甚至可以共享回Prometheus,这样你就可以使用这些数据以编程的方式更改集群行为了。
数据库一直是很难顺畅地运行在Kubernetes中的。原生的Kubernetes功能集并不能直接解决数据库的很多特定问题。
KubeDB允许管理员创建用于管理数据库的Kubernetes Operator,包括运行备份、克隆、监视、快照和声明性地创建数据库,此外也支持集群,但仅限于某些数据库——例如,支持PostgreSQL,但尚不支持MySQL。
对系统进行压力测试的一种可靠方法,就是随意破解内容。这就是Netflix的Chaos Monkey背后的理论,Chaos Monkey是一种混沌工程工具,可以随机终止生产中运行的虚拟机和容器,以“鼓励”开发人员构建更具弹性的系统。Kube-monkey也是基于相同的思想对Kubernetes集群进行压力测试的,其工作原理就是随机删除指定集群中的pod,可以通过微调在特定的时间窗口内运行。
不,Kube-ps1对于Kubernetes来说不像是第一代索尼PlayStation模拟器那样(拥有相当漂亮的外观),而是Bash的一个简单补充,可以在提示符中显示当前Kubernetes的上下文和命名空间。Kube-shell包含了这一功能以及许多其他功能,但如果你想要的只是更智能的提示,Kube-ps1足以满足你的需求。
Kube-prompt是另一个对Kubernetes CLI进行了较小却非常有用改动的工具,让你可以输入与Kubernetes客户端进行交互式命令会话的数量。Kube-prompt让你不需要键入kubectl为每个命令添加前缀,而是自动为每个命令添加上下文信息。
Kubernetes命令行功能十分强大,但与任何命令行应用一样,从众多选项中做选择可能是非常繁琐的事情。Kube-shell将标准的Kubernetes命令行打包在一个集成的Shell中,这个Shell提供了常用命令的自动完成和自动建议功能,包括Kubernetes服务器提供的建议(例如服务名称),以及更强大的命令历史记录功能、vi样式编辑模式、以及运行关于用户、命名空间、集群和其他特定安装信息的上下文信息。
Pulumi的Kubespy是一个诊断工具,让你可以实时追踪对Kubernetes资源的更改操作,提供了一种文本式的仪表板。例如,你可以在启动时观察pod状态的变化:pod定义被写入Etcd,pod被安排运行在某个节点上,该节点上的Kubelet创建了pod,最后是pod标记为运行中的状态。Kubespy可以独立的二进制文件运行,也可以作为Kubectl插件运行。
Kubernetes通过Ingress服务为集群提供外部负载均衡和网络服务。AWS提供了负载均衡功能,但不会自动将这些服务与Kubernetes相连接。Kubernetes Ingress Controller for AWS解决了这个问题,Ingress Controller自动管理集群中每个Ingress对象的AWS资源,为新的Ingress资源创建负载均衡器,并删除掉已移除资源的负载均衡器,借助AWS CloudFormation确保集群的一致状态。此外它还可以自动管理集群中使用的其他元素,例如SSL证书以及EC2 Auto Scaling Groups。
Kubernetes有一个很有用处的通用监控仪表板,但Kubernetes社区正在尝试其他向Kubernetes管理员呈现数据的方式,Kube-ops-view就是这样一个选择。它提供了多个Kubernetes集群的一览式视图,以图形的方式呈现,让你可以一目了然地看到集群中CPU和内存使用情况以及pod状态。请注意,Kube-ops-view不允许你调用任何命令,仅用于可视化。但Kube-ops-view提供的可视化效果非常好,适合作为运营中心的监控工具。
Skaffold是Google自己的Kubernetes工具之一,可以为Kubernetes应用执行持续的部署。当你修改源代码的时候,Skaffold就能自动检测到,触发构建和部署流程,并在出现错误的时候发出警报。Skaffold完全在客户端运行。Skaffold可以用于现有的CI/CD管道,与其他一些外部构建工具集成——主要是谷歌自己的Bazel。
Stern让你可以从Kubernetes pod及容器中(根据tail命令)生成颜色编码输出。这种快速方法可以将来自多个资源的所有输出组合成让人一目了然读取的单一数据流,并清楚地根据颜色编码进行区分。
Kubetail同样是将来自多个pod的日志聚合到一个流中,对不同的pod和容器进行颜色编码。但是Kubetail是一个Bash脚本,所以只需要一个shell。
Teresa是一个应用部署系统,作为一个简单的PaaS运行在Kubernetes之上。用户可以部署并管理属于他们团队的应用,这打消了信任特定应用的用户的担忧,让他们无需直接面对Kubernetes。
Tilt是由Windmill Engineering开发的,可以实时监控对Dockerfiles的更改,然后将这些更改逐步部署到Kubernetes集群相应容器中。从本质上讲,Tilt让开发人员可以实时地更新集群,只需更新Dockerfile即可。Tilt在集群内进行创建,仅推送对源代码的改动。
好文章,需要你的鼓励
后来广为人知的“云上奥运”这一说法,正是从这一刻起走上历史舞台。云计算这一概念,也随之被越来越多的人所熟知。乘云科技CEO郝凯对此深有感受,因为在2017年春节过后不久,他的公司开始成为阿里云的合作伙伴,加入了滚滚而来的云计算大潮中。同一年,郝凯带领团队也第一次参加了阿里云的“双11”活动,实现了800万元的销售业绩。
随着各行各业数字化变革的不断深入,人类社会正加速迈向智能化。作为智能世界和数字经济的坚实底座,数据中心也迎来了蓬勃发展。面