K8S中文官网:https://kubernetes.io/zh-cn/
红帽学习培训网站:https://www.redhat.com/zh/services/training/do080-deploying-containerized-applications-technical-overview
概述
Kubernetes(也称 k8s 或 “kube”)是一 个开源的容器编排平台,可以自动完成在部署、管理和扩展容器化应用过程中涉及的许多手动操作。
什么是K8S集群
您可以将运行 Linux® 容器的多组主机聚集在一起,由 Kubernetes 帮助您轻松高效地管理这些集群。
Kubernetes 集群可跨本地、公共云、私有云或混合云部署主机。因此,对于要求快速扩展的云原生应用而言(例如借助 Apache Kafka 进行的实时数据流处理),Kubernetes 是理想的托管平台。
在生产环境中(尤其是当您要面向云优化应用开发时)使用 Kubernetes 的主要优势在于,它提供了一个便捷有效的平台,让您可以在物理机和虚拟机(VM)集群上调度和运行容器。
更广泛一点说,它可以帮助您在生产环境中,完全实施并依赖基于容器的基础架构。由于 Kubernetes 的实质在于实现运维任务自动化,所以您可以将其它应用平台或管理系统分配给您的许多相同任务交给容器来执行。
借助 Kubernetes 模式,开发人员可以使用 Kubernetes 作为运行时平台来创建云原生应用。模式是 Kubernetes 开发人员在构建基于容器的应用和服务时所需的工具。
有了 Kubernetes,您可以:
· 跨多个主机编排容器。
·更充分地利用硬件,最大化企业应用运行所需资源的效用。
·控制和自动化应用的部署与更新。
·挂载和添加运行有状态应用所需的存储。
·动态扩展容器化应用及其资源。
·对服务进行声明式管理,保证所部署的应用始终按照您期望的方式运行。
·应用健康检查和自我修复,以及自动放置、自动启动、启动复制和自动扩展。
但是,Kubernetes 需要依赖其它项目来全面提供这些经过编排的服务。增添了其他开源项目后,您就能全面发挥 Kubernetes 的潜力。这些必要的部分包括(还有更多):
·注册表,通过 Docker 注册表等项目实现。
·网络,通过 OpenvSwitch 等项目和智能边缘路由来实现。
·遥测,通过 Kibana、Hawkularz 和 Elastic 等项目实现。
·安全性,通过 LDAP、SELinux、RBAC 和 OAUTH 等项目以及多租户层来实现。
·自动化,通过添加 Ansible playbook 来进行安装和集群生命周期管理。
服务,通过常用应用模式的丰富目录来提供。
简要了解 Linux 容器和容器编排技术在这个点播课程中,您将了解如何实现应用和服务的容器化,如何使用 Docker 对其进行测试,并使用红帽® OpenShift® 在 Kubernetes 集群上部署应用和服务。
与大多数技术一样,特定于 Kubernetes 的语言或可成为有碍入门的绊脚石。为了帮助您更好地了解 Kubernetes,我们在下面来解释一些常用术语。
控制平面(Control Plane)
控制 Kubernetes 节点的进程的集合。所有任务分配都来自于此。
节点(Node)
这些机器负责执行由控制平面分配的请求任务。
容器集(Pod)
部署在单个节点上的一个或多个容器组成的容器组。同一容器集中的所有容器共享同一个 IP 地址、IPC、主机名称及其它资源。容器集会将网络和存储从底层容器中抽象出来。这样,您就能更加轻松地在集群中移动容器。
复制控制器(Replication controller)
用于控制容器集在集群上运行的实例数量。
服务(Service)
将工作定义与容器集分离。Kubernetes 服务代理会自动将服务请求分发到正确的容器集——无论这个容器集会移到集群中的哪个位置,甚至可以被替换掉。
Kubelet
运行在节点上的服务,可读取容器清单(container manifest),确保指定的容器启动并运行。
kubectl
Kubernetes 的命令行配置工具。
我们把一个有效的 Kubernetes 部署称为集群。您可以将 Kubernetes 集群可视化为两个部分:控制平面与计算设备(或称为节点)。
每个节点都是其自己的 Linux® 环境,可以是物理机也可以是虚拟机。每个节点都运行由若干容器组成的容器集。
控制平面负责维护集群的预期状态,例如运行哪个应用以及使用哪个容器镜像。计算机则负责应用和工作负载的实际运行。
Kubernetes 在操作系统(例如,红帽® 企业 Linux®)之上运行,并与节点上运行的容器集交互。
Kubernetes 控制平面接受来自管理员(或 DevOps 团队)的命令,并将这些指令转发给计算机。
此交接将与许多服务协同,以自动决定哪一个节点最适合执行该任务。然后,它将在该节点分配资源,并指派容器集来完成任务请求。
Kubernetes 集群的预期状态定义了应运行哪些应用或其他工作负载、应使用哪些镜像、应提供哪些资源,以及其他配置详情。
就基础架构而言,管理容器的方式基本不变。但您对容器的掌控得到提升,无需对独立的容器或节点实施微观管理,就能更好地控制容器。
您的工作包括配置 Kubernetes,以及定义节点、容器集以及其中的容器。Kubernetes 负责编排这些容器。
您可以自己决定具体在哪里运行 Kubernetes。可以是裸机服务器、虚拟机、公共云提供商、私有云和混合云环境。Kubernetes 的一大优势就是它可以在许多不同类型的基础架构上运行。
了解 Kubernetes 架构的其他组件
Kubernetes 与 Docker 的关系是什么?
Docker 可被用作由 Kubernetes 编排的容器运行时。当 Kubernetes 将容器集调度到节点上时,该节点上的 kubelet 会指示 Docker 启动指定的容器。
然后,kubelet 持续从 Docker 收集这些容器的状态,并将该信息聚合到控制平面中。Docker 将容器拉到该节点上,并且启动和停止这些容器。
将 Kubernetes 与 Docker 搭配使用带来的区别在于,自动化系统要求 Docker 在所有节点上对所有容器执行这些操作,而非要求管理员手动操作。
Docker 可被用作由 Kubernetes 编排的容器运行时。当 Kubernetes 将容器集调度到节点上时,该节点上的 kubelet 会指示 Docker 启动指定的容器。
然后,kubelet 持续从 Docker 收集这些容器的状态,并将该信息聚合到控制平面中。Docker 将容器拉到该节点上,并且启动和停止这些容器。
将 Kubernetes 与 Docker 搭配使用带来的区别在于,自动化系统要求 Docker 在所有节点上对所有容器执行这些操作,而非要求管理员手动操作。
如今,本地 Kubernetes 部署大多在现有虚拟基础架构上运行,同时裸机服务器上的部署变得越来越多。这是数据中心的自然演变。Kubernetes 充当容器化应用的部署和生命周期管理工具,而基础架构资源的管理则要使用另外的工具。
不过,倘若数据中心从一开始便设计为支持容器,并且包括基础架构层,又该如何?
您一开始就有了裸机服务器和软件定义存储,并且由 Kubernetes 进行部署和管理,让基础架构与容器一样享受自我安装、自我扩展和自我修复的好处。这是 Kubernetes 原生基础架构的愿景。
Kubernetes 可以帮助您交付和管理容器化、传统和云原生应用,以及重构为微服务的应用。
为了满足日新月异的业务需求,开发团队需要能够快速构建新的应用和服务。云原生开发模式从容器内微服务开始,不仅可以加快开发速度,同时能够更轻松地转换和优化现有应用。
观看本网络培训课堂系列,获取帮助您在需要构建、运行、部署和现代化应用的企业 Kubernetes 上建立数据平台的专家视角。
生产应用跨越多个容器,而这些容器必须部署到多个服务器主机上。Kubernetes 可以提供所需的编排和管理功能,以便您针对这些工作负载大规模部署容器。
借助 Kubernetes 编排功能,您可以构建跨多个容器的应用服务、跨集群调度、扩展这些容器,并长期持续管理这些容器的健康状况。有了 Kubernetes,您便可切实采取一些措施来提高 IT 安全性。
Kubernetes 还需要与联网、存储、安全性、遥测和其他服务整合,以提供全面的容器基础架构。
一旦把它部署到生产环境和扩展为多个应用,您显然需要许多托管在相同位置的容器来协同提供各种服务。
Linux 容器可为基于微服务的应用提供理想的应用部署单元和独立的执行环境。通过将微服务放入容器,就能更加轻松地编排各种服务(包括存储、网络和安全防护)。
随着这些容器的累积,环境中容器的数量会急剧增加,复杂度也随之增长。
Kubernetes 通过将容器分类组成 “容器集” (pod),解决了容器激增带来的许多常见问题。容器集为分组容器增加了一个抽象层,可帮助您调度工作负载,并为这些容器提供所需的服务,如联网和存储等。
Kubernetes 的其他部分可帮助您在这些容器集之间平衡负载,同时确保运行正确数量的容器,充分支持您的工作负载。
如果能正确实施 Kubernetes,再辅以其他开源项目(例如 Open vSwitch、OAuth 和 SELinux),您就能够轻松编排容器基础架构的各个部分。
现代应用程序的开发流程不同于以往。DevOps 可以加快一个想法从提出到部署的整个过程。
DevOps 的核心在于,在应用的整个生命周期中,都要确保日常运维任务自动化和环境的标准化。容器使得开发、交付和自动化能在一个统一环境中进行,也让应用在开发、测试和生产环境中轻松迁移。
持续集成和持续部署管道(CI/CD)是实施 DevOps 的一大重要成果。CI/CD 可帮助您频繁地向客户交付应用并检验软件质量,而且只需极少的人工干预。
利用 Kubernetes 和 DevOps 方法管理容器生命周期,能够使软件开发和 IT 运维齐头并行,从而助力 CI/CD 管道的顺畅运行。
选用合适的平台并兼顾容器的内部和外部,您就可以充分利用已经实施的文化和流程变革。
Kubernetes 是开源的,因此没有正式的技术支持结构与之相关,至少没有您的业务能够信赖的支持。
如果在生产环境中运行时 Kubernetes 出现实施问题,您一定会感到非常担心,您的客户同样也会担心。
Kubernetes 可以比作汽车发动机。发动机可以单独运转,但当与变速箱、车轴和车轮组合在一起时,它就变成了一辆能行驶的汽车的一部分。只是安装 Kubernetes 还不能得到一个生产级平台。
Kubernetes 需要其他组件才能发挥完整功用。您需要添加身份验证、网络、安全防护、监控、日志管理以及其他工具。