Kubernetes系统精讲 Go语言实战K8S集群可视化学习笔记
Kubernetes系统精讲 Go语言实战K8S集群可视化
Kubernetes介绍
Kubernetes是一个强大但复杂的工具,乍一看可能很难。
在本文中,我们将对其进行分解,解释其核心功能、支持工具和独特功能。最后,我们将逐步介绍如何使用Kubernetes创建基本程序所需的所有实现。
对于那些正在考虑从事DevOps职业的人来说,这是一个很好的教程。
在Docker 作为高级容器引擎快速发展的同时,Google也开始将自身在容器技术及集群方面的积累贡献出来。在Google内部,容器技术已经应用了很多年,Borg系统运行管理着成千上万的容器应用,在它的支持下,无论是谷歌搜索、Gmail还是谷歌地图,可以轻而易举地从庞大的数据中心中获取技术资源来支撑服务运行。
Borg是集群的管理器,在它的系统中,运行着众多集群,而每个集群可由成千上万的服务器联接组成,Borg每时每刻都在处理来自众多应用程序所提交的成百上千的Job, 对这些Job进行接收、调度、启动、停止、重启和监控。
Borg提供了3大好处:
1)隐藏资源管理和错误处理,用户仅需要关注应用的开发。
2) 服务高可用、高可靠。
3) 可将负载运行在由成千上万的机器联合而成的集群中。
作为Google的竞争技术优势,Borg理所当然的被视为商业秘密隐藏起来,但当Tiwtter的工程师精心打造出属于自己的Borg系统(Mesos)时, Google也审时度势地推出了来源于自身技术理论的新的开源工具。
2014年6月,谷歌云计算专家埃里克·布鲁尔(Eric Brewer)在旧金山的发布会为这款新的开源工具揭牌,它的名字Kubernetes在希腊语中意思是船长或领航员,这也恰好与它在容器集群管理中的作用吻合,即作为装载了集装箱(Container)的众多货船的指挥者,负担着全局调度和运行监控的职责。
虽然Google推出Kubernetes的目的之一是推广其周边的计算引擎(Google Compute Engine)和谷歌应用引擎(Google App Engine)。但Kubernetes的出现能让更多的互联网企业可以享受到连接众多计算机成为集群资源池的好处。
Kubernetes对计算资源进行了更高层次的抽象,通过将容器进行细致的组合,将最终的应用服务交给用户。Kubernetes在模型建立之初就考虑了容器跨机连接的要求,支持多种网络解决方案,同时在Service层次构建集群范围的SDN网络。其目的是将服务发现和负载均衡放置到容器可达的范围,这种透明的方式便利了各个服务间的通信,并为微服务架构的实践提供了平台基础。而在Pod层次上,作为Kubernetes可操作的最小对象,其特征更是对微服务架构的原生支持。
Kubernetes项目来源于Borg,可以说是集结了Borg设计思想的精华,并且吸收了Borg系统中的经验和教训。
Kubernetes作为容器集群管理工具,于2015年7月22日迭代到 v 1.0并正式对外公布,这意味着这个开源容器编排系统可以正式在生产环境使用。与此同时,谷歌联合Linux基金会及其他合作伙伴共同成立了CNCF基金会( Cloud Native Computing Foundation),并将Kuberentes 作为首个编入CNCF管理体系的开源项目,助力容器技术生态的发展进步。Kubernetes项目凝结了Google过去十年间在生产环境的经验和教训,从Borg的多任务Alloc资源块到Kubernetes的多副本Pod,从Borg的Cell集群管理,到Kubernetes设计理念中的联邦集群,在Docker等高级引擎带动容器技术兴起和大众化的同时,为容器集群管理提供独了到见解和新思路。
二、kubernetes的特点
可移植:支持公有云,私有云,混合云,多重云(multi-cloud)
可扩展::模块化, 插件化, 可挂载, 可组合
自动化: 自动部署,自动重启,自动复制,自动伸缩/扩展,自我修复
服务发现和负载均衡
Kubernetes一个核心的特点就是自动化,能够自主的管理容器来保证云平台中的容器按照用户的期望状态运行着(比如用户想让apache一直运行,用户不需要关心怎么去做,Kubernetes会自动去监控,然后去重启,新建,总之,让apache一直提供服务),管理员可以加载一个微型服务,让规划器来找到合适的位置,同时,Kubernetes也系统提升工具以及人性化方面,让用户能够方便的部署自己的应用(就像canary deployments)。
现在Kubernetes着重于不间断的服务状态(比如web服务器或者缓存服务器)和原生云平台应用(Nosql),在不久的将来会支持各种生产云平台中的各种服务,例如,分批,工作流,以及传统数据库。
所有Kubernetes中的资源,比如Pod,都通过一个叫URI的东西来区分,这个URI有一个UID,URI的重要组成部分是:对象的类型(比如pod),对象的名字,对象的命名空间,对于特殊的对象类型,在同一个命名空间内,所有的名字都是不同的,在对象只提供名称,不提供命名空间的情况下,这种情况是假定是默认的命名空间。UID是时间和空间上的唯一。
K8S集群可视化工具
Goldpinger:可视化Kubernetes集群
人类是视觉生物。图形和图表使我们更容易理解全局。考虑到Kubernetes集群的范围和复杂性,可以使用可以获得的所有视觉帮助。
彭博社的技术部门开源的这个有趣的名字叫Goldpinger的工具很简单,它在Kubernetes集群中运行,并显示节点之间关系的交互式地图。健康的节点显示为绿色,不健康的节点显示为红色。只需单击一个节点以获取详细信息。可以使用Swagger自定义API,以引入其他报告,指标或其他集成。
K9s:全屏Kubernetes CLI UI
管理员喜欢“单一窗格”实用程序。K9s是Kubernetes集群的全屏CLI UI。它可以快速查看正在运行的Pod,日志和部署的视图,并可以快速访问Shell。请注意,将需要授予用户Kubernetes在用户和名称空间级别的读取特权,以使K9正常工作。
Kops:Kubernetes集群的命令行操作
Kops由Kubernetes团队开发,可让命令行管理Kubernetes集群。它支持在AWS和GCE上运行的集群,以及正在运行的VMware vSphere和其他环境。除了自动进行设置和拆卸过程外,Kops还可以帮助进行其他类型的自动化。例如,它可以生成Terraform配置,以允许使用Terraform重新部署群集。
Kubebox:Kubernetes的终端控制台
Kubebox是Kubernetes的高级终端控制台,不仅为Kubernetes及其API提供了shell。它提供内存和CPU利用率,窗格列表,运行日志和配置编辑器的交互式显示。最重要的是,它可以作为适用于Linux,Windows和MacOS的独立应用程序使用。
Kube-applier
作为Kubernetes服务运行,Kube应用程序从Git存储库中获取Kubernetes集群的声明性配置文件,并将其应用于集群中的Pod。每当对定义文件进行更改时,都会将它们从存储库中提取并应用于相关的广告连播。本质上,适用于Kube的应用程序类似于Google的Skaffold,但它用于管理整个Kubernetes集群而不是单个应用程序。
Kube-applier可以按计划或按需应用配置更改。它会在每次运行时记录其行为,并提供与Prometheus兼容的指标,因此您不必担心它如何影响集群行为。
Kube-ps1:Smart Kubernetes命令提示符
不,Kube-ps1并不是适用于Kubernetes的第一代Sony PlayStation模拟器(尽管那很漂亮)。这是对Bash的简单补充,可在提示中显示当前的Kubernetes上下文和名称空间。Kube-shell包括此功能以及许多其他功能,但是如果只想提供更智能的提示,Kube-ps1几乎不会带来任何开销。
Kube-prompt:交互式Kubernetes客户端
对Kubernetes CLI的另一种最小但有用的修改,Kube-prompt允许输入相当于与Kubernetes客户端的交互式命令会话的内容。Kube提示不必键入kubectl来为每个命令添加前缀,并为每个命令提供带有上下文信息的自动完成功能。
Kubespy:Kubernetes资源的实时监控
Pulumi的Kubespy是一种诊断工具,可实时跟踪对Kubernetes资源的更改,从而提供了一种实时的文本视图仪表板。例如,可以在启动时查看Pod状态的变化:将Pod定义写入Etcd,将Pod计划在节点上运行,在该节点上的Kubelet创建Pod,最后将Pod标记为正在运行。Kubespy可以作为独立的二进制文件运行,也可以作为Kubectl的插件运行。
Kubeval:验证Kubernetes配置
Kubernetes系统精讲 Go语言实战K8S集群可视化
Kubernetes的YAML配置文件本来应该是人类可读的,但这并不总是意味着它们可以被人类验证。很容易错过逗号或胖手指的名字,直到为时已晚才发现它。最好使用Kubeval。Kubeval在本地使用或集成到CI/CD流水线中,接受Kubernetes YAML配置定义并报告其有效性。它可以产生JSON或TAP格式的输出,甚至可以解析Helm图表配置中引用的源模板,而无需其他提示。
Kube-ops-view:多个Kubernetes集群的仪表板
Kubernetes有一个有用的仪表板,可用于通用监控,但是Kubernetes社区正在尝试其他方法,以向Kubernetes管理员有用地呈现数据。Kube-ops-view是这样的一种实验。它提供了以图形方式呈现的多个Kubernetes集群的概览视图,因此可以一目了然地看到集群中整个CPU和内存使用率以及Pod的状态。请注意,它不允许调用任何命令;仅用于可视化。但是,它提供的可视化效果惊人且高效,是为运营中心中的大屏监控所生。
Rio:Kubernetes的应用程序部署引擎
Rio是Rancher Labs的一个项目,它在Kubernetes中实现了常见的应用程序部署模式,例如从Git和A/B持续交付或蓝/绿部署。每次提交提交时,Rio都可以部署新版本的应用程序,从而有助于管理DNS,HTTPS和服务网格等复杂性。
Stern和Kubetail:Kubernetes的日志尾矿
通过Stern,可以从Kubernetes中的容器和容器中生成颜色编码的输出(按照tail命令)。这是一种将来自多个资源的所有输出传输到单个流中的快速方法,一目了然。同时,可以一目了然地(颜色编码)来区分流。
Kubetail同样将来自多个Pod的日志聚合到单个流中,并对不同Pod和容器进行颜色编码。但是Kubetail是Bash脚本,因此只需要一个shell。