Kubernetes

Kubernetes 部署与实战

Kubernetes 的官方定义为:Kubernetes is an open-source system for automating deployment, scaling, and management of containerized applications.It groups containers that make up an application into logical units for easy management and discovery.

Kubernetes [koo-ber-nay'-tice] 是支持多种底层容器虚拟化技术的分布式容器编排架构,具有完备的功能用于支撑分布式系统以及微服务架构,同时具备超强的横向扩容能力;它提供了自动化容器的部署和复制,随时扩展或收缩容器规模,将容器组织成组,并且提供容器间的负载均衡,提供容器弹性等特性。Kubernetes 是 Google 基于 Borg 开源的容器编排调度引擎,作为 CNCF(Cloud Native Computing Foundation)最重要的组件之一,它的目标不仅仅是一个编排系统,而是提供一个规范,可以让你来描述集群的架构,定义服务的最终状态;以正确的方式使用 Kubernetes 可帮助 DevOps 即服务团队自动扩展应用程序并以零停机时间进行更新。Kubernetes 作为云原生应用的基石,相当于一个云操作系统,其重要性不言而喻。

功能特性

功能

  • 服务发现和负载平衡:Kubernetes 可以使用 DNS 名称或使用自己的 IP 地址暴露容器。如果容器的流量很高,Kubernetes 能够负载均衡并分配网络流量,以便部署稳定。

  • 存储编排: Kubernetes 允许您自动安装您选择的存储系统,例如本地存储,公共云提供商等。

  • 自动部署和回滚:您可以使用 Kubernetes 描述已部署容器的所需状态,并且可以以受控速率将实际状态更改为所需状态。例如,您可以自动化 Kubernetes 为您的部署创建新容器,删除现有容器并将所有资源用于新容器。

  • 自动装箱:Kubernetes 允许您指定每个容器需要多少 CPU 和内存(RAM)。当容器指定了资源请求时,Kubernetes 可以更好地决定管理容器的资源。

  • 自我修复:Kubernetes 重新启动失败的容器,替换容器,杀死不响应用户定义的运行状况检查的容器,并且在它们准备好服务之前不会将它们通告给客户端。

  • 密钥和配置管理:Kubernetes 允许您存储和管理敏感信息,例如密码,OAuth 令牌和 ssh 密钥。您可以部署和更新机密和应用程序配置,而无需重建容器映像,也不会在堆栈配置中暴露机密。

优势

  • 它的速度很快:在不停机的情况下持续部署新功能时,Kubernetes 是一个完美的选择。Kubernetes 的目标是以恒定的正常运行时间更新应用程序。它的速度通过您每小时可以运送的许多功能来衡量,同时保持可用的服务。

  • 遵循不可变基础架构的原则:以传统方式,如果多个更新出现任何问题,您就没有任何记录显示您部署了多少更新以及发生了哪个错误。在不可变基础结构中,如果您希望更新任何应用程序,则需要使用新标记构建容器映像并进行部署,从而使用旧映像版本终止旧容器。通过这种方式,您将获得一份记录,并了解您所做的事情以及是否有任何错误; 您可以轻松回滚到上一个图像。

  • 提供声明性配置:用户可以知道系统应该处于什么状态以避免错误。作为传统工具的源代码控制,单元测试等不能与命令式配置一起使用,但可以与声明性配置一起使用。

  • 大规模部署和更新软件:由于 Kubernetes 具有不可变的声明性,因此扩展很容易。Kubernetes 提供了一些用于扩展目的的有用功能:

    • 水平基础架构缩放:在单个服务器级别执行操作以应用水平缩放。可以毫不费力地添加或分离 atest 服务器。

    • 自动扩展:根据 CPU 资源或其他应用程序指标的使用情况,您可以更改正在运行的容器数

    • 手动缩放:您可以通过命令或界面手动缩放正在运行的容器的数量

    • 复制控制器:复制控制器确保群集在运行条件下具有指定数量的等效窗格。如果存在太多 Pod,则复制控制器可以删除额外的 Pod,反之亦然。

  • 处理应用程序的可用性:Kubernetes 检查节点和容器的运行状况,并在由于错误导致的盒中崩溃时提供自我修复和自动替换。此外,它在多个 Pod 之间分配负载,以便在意外流量期间快速平衡资源。

  • 存储卷:在 Kubernetes 中,数据在容器之间共享,但如果 Pod 被杀死,则会自动删除卷。此外,数据是远程存储的,因此如果将 Pod 移动到另一个节点,数据将保留,直到用户删除为止。

不足

  • 初始过程需要时间:创建新进程时,您必须等待应用程序开始,然后才能供用户使用。如果要迁移到 Kubernetes,则需要对代码库进行修改,以使启动过程更有效,这样用户就不会有糟糕的体验。

  • 迁移到无状态需要付出很多努力:如果您的应用程序是群集或无状态的,则不会配置额外的 Pod,并且必须在应用程序中重新配置。

  • 安装过程繁琐:如果您不使用 Azure,Google 或 Amazon 等任何云提供商,则很难在群集上设置 Kubernetes;不过在有 Rancher 这样的工具辅助下,安装效率也有了大幅度的提高。

链接