Kubernetes学习经验——Kubernetes总结
1 摘录1
Kubernetes,又称为k8s(首字母为k,首字母与尾字母之间有8个字符,尾字母为s,所以简称k8s)或者简称为“kube”,是一种可自动实施Linux容器操作的开源平台。它可以帮助用户省去应用容器化过程的许多手动部署和扩展操作。也就是说,您可以将运行Linux容器的多组主机聚集在一起,由Kubernetes帮助您轻松高效地管理这些集群。而且,这些集群可跨公共云、私有云或混合云部署主机。因此,对于要求快速扩展的云原生应用而言(例如借助Apache Kafka进行的实时数据流处理),Kubernetes是理想的托管平台。
Kubernetes最初由Google的工程师开发和设计。Google是最早研发Linux容器技术的企业之一(组建了cgroups),曾公开分享介绍Google如何将一切都运行于容器之中(只是Google云服务背后的技术)。Google每周会启动超过20亿个容器——全都由内部平台Borg支撑。Borg是Kubernetes的前身,多年来开发Borg的经验教训成了影响Kubernetes中许多技术的主要因素。
趣事:Kubernetes徽标的七个轮辐代表着项目最初的名称“九之七项目”(Project Seven of Nine)。
1.1 为什么需要Kubernetes?
真正的生产型应用会涉及多个容器。这些容器必须跨多个服务器主机进行部署。容器安全性需要多层部署,因此可能会比较复杂。但Kubernetes有助于解决这一问题。Kubernetes可以提供所需的编排和管理功能,以便您针对这些工作负载大规模部署容器。借助Kubernetes编排功能,您可以构建跨多个容器的应用服务、跨集群调度、扩展这些容器,并长期持续管理这些容器的健康状况。有了Kubernetes,您便可切实采取一些措施来提供IT安全性。
Kubernetes还需要与联网、存储、安全性、遥测和其它服务整合,以提供全面的容器基础架构。
当然,这取决于您如何在您的环境中使用容器。Linux容器中的基本应用将它们视作高效、快速的虚拟机。一旦把它部署到生产环境或扩展为多个应用,您显然需要许多托管在相同位置的容器来协同提供各种服务。随着这些容器的累计,您运行环境中容器的数量会急剧增加,复杂度也随之增长。
Kubernetes通过将容器分类组成“容器集”(pod),解决了容器增殖带来的许多常见问题,容器集为分组容器增加了一个抽象层,可帮助您调用工作负载,并为这些容器提供所需的联网和存储等服务。Kubernetes的其它部分可帮助您在这些容器集之间达成负载平衡,同时确保运行正确数量的容器,充分支持您的工作负载。
如果能正确实施Kubernetes,再辅以其它开源项目(例如Atomic注册表、OpenvSwitch、heapster、OAuth以及SElinux),您就能够轻松编排容器基础架构的各个部分。
1.2 Kubernetes有哪些应用?
在您的生产环境中(尤其是当您要面向云优化应用开发时)使用Kubernetes的主要优势在于,它提供了一个便捷有效的平台,让您可以在物理机和虚拟机集群上调度和运行容器。更广泛一点说,它可以帮助您在生产环境中,完全实施并依托基于容器的基础架构运营。由于Kubernetes的实质在于实现操作任务自动化,所以您可以将其它应用平台或管理系统分配给您的许多相同任务交给容器来执行。
利用Kubernetes,您能够达成以下目标:
- 跨多台主机进行容器编排。
- 更加充分地利用硬件,最大程序获取运行企业应用所需的资源。
- 有效管控应用部署和更新,并实现自动化操作。
- 挂载和增加存储,用于运行有状态的应用。
- 快速、按需扩展容器化应用及其资源。
- 对服务进行声明式管理,保证所部署的应用始终按照部署的方式运行。
- 利用自动布局、自动重启、自动复制以及自动扩展功能,对应用实施状况检查和自我修复。
但是,Kubernetes需要依赖其它项目来全面提供这些经过编排的服务。因此,借助其它开源项目可以帮助您将Kubernetes的全部功能发挥出来。这些功能包括:
- 注册表,通过Atomic注册表或Docker注册表等项目实现。
- 联网,通过OpenvSwitch和智能边缘路由等项目实现。
- 遥测,通过heapster、kibana、hawkular和elastic等项目实现。
- 安全性,通过LDAP、SElinux、RBAC和OAUTH等项目以及多租户层来实现。
- 自动化,参照Ansible手册进行安装和集群生命周期管理。
- 服务,可通过自带预建版常用应用模式的丰富内容目录来提供。
1.3 Kubernetes相关术语
和其它技术一样,Kubernetes也会采用一些专用的词汇,这可能会对初学者理解和掌握这项技术造成一定的障碍。为了帮助您了解Kubernetes,我们在下面来解释一些常用术语。
主机(Master): 用于控制Kubernetes节点的计算机。所有任务分配都来自于此。
节点(Node): 负责执行请求和所分配任务的计算机。由Kubernetes主机负责对节点进行控制。
容器集(Pod): 被部署在单个节点上的,且包含一个或多个容器的容器组。同一容器集中的所有容器共享同一个IP地址、IPC、主机名称及其它资源。容器集会将网络和存储从底层容器中抽象出来。这样,您就能更加轻松地在集群中移动容器。
复制控制器(Replication controller): 用于控制应在集群某处运行的完全相同的容器集副本数量。
服务(Service): 将工作内容与容器集分离。Kubernetes服务代理会自动将服务请求分发到正确的容器集——无论这个容器集会移到集群中的哪个位置,甚至可以被替换掉。
Kubelet: 运行在节点上的服务,可读取容器清单(container manifest),确保指定的容器启动并运行。
Kubectl: Kubernetes的命令行配置工具。
1.4 如何在基础架构中采用Kubernetes
Kubernetes基于操作系统运行(例如红帽企业Linux),并与在节点上运行的容器集交互。由Kubernetes主机接收管理员(或DevOps团队)发出的命令,然后将这些指令转发给从属的节点。这种移交操作与多种服务同时作用,自动确定哪个节点最适合执行该任务。然后,它将在该节点分配资源,并指派容器集来完成任务请求。
因此,就基础架构而言,管理容器的方式基本没变。但您对容器的掌控力得到提升,无需对独立的容器或节点实施微观管理,就能更好地管理容器。当然,某些工作是必须的,但大部分都是关于分配Kubernetes主机、定义节点以及定义容器集。
1.5 Docker运行状态
Docker技术仍然执行它原本的工作。当Kubernetes将容器集调度到一个节点上时,该节点上的kubelet会发送指令让docker启动指定容器。kubelet随后会不断从docker收集这些容器的状态,并将这些信息汇集至主机。Docker将容器拉至该节点,并按照常规启动和停止这些容器。不同在于,自动化系统要求docker在所有节点上对所有容器执行这些操作,而非要求管理员手动操作。
参考资料
- 1vue和el-table使用经验-如何刷新表格数据10318
- 2three.js加载3D瓦片和3dtiles数据生成交互式地图的开源项目8960
- 3Microsoft Visual C++ Redistributable是什么,有什么作用?6285
- 4uni-app使用经验—vue页面和html页面如何互相调用接口并传参4936
- 5mybatis使用经验——mybatis-spring-boot-starter和mybatis的版本对应关系表(持续更新~)4697
- 6Spring学习经验—@ResponseBody注解的使用说明4358
- 7Druid异常解决经验—java.sql.SQLException url not set3960
- 8如何用批处理命令(bat脚本)启动和停止windows服务3635
- 9nuxt.js项目中如何添加和使用全局变量3565
- 10Intellij IDEA下的版本控制VCS的启用与关闭3557
- 11解决SpringBoot使用maven下载不了jar包的问题3039
- 12linux中解压tar.gz文件报错“gzip: stdin: invalid compressed data--format violated”2833
- 13nuxtjs asyncData使用经验—如何发起多个axios请求并携带参数2830
- 14在Nuxt.js项目的head中引用外部js文件2667
- 15在NVIDIA控制面板设置参数时提示“拒绝访问 无法应用选定的设置到您的系统”的解决方法之一2577