1. Devops/

Kubernetes(K8S)是什么,有那些特性以及应用场景有那些?

·276 字·2 分钟· loading
devops Kubernetes
demo007x
作者
demo007x

Kubernetes(K8S)是什么,有那些特性以及应用场景有那些?
#

Kubernetes 是一种开源容器管理工具,可自动执行容器部署、容器扩展、解缩放和容器负载均衡(也称为容器编排工具)。它是用Golang编写的,拥有庞大的社区,因为它最初由Google开发,后来捐赠给CNCF(云原生计算基金会)。Kubernetes 可以将“n”个容器分组到一个逻辑单元中,以便轻松管理和部署它们。它与所有云供应商(即公共云、混合云和本地云供应商)完美配合。

img

Kubernetes 是一个开源平台,以集群的形式管理 Docker 容器。除了容器的自动部署和扩展外,它还通过自动重新启动失败的容器并在主机死亡时重新安排它们来提供修复。此功能提高了应用程序的可用性。

Kubernetes 的特点:
#

  1. 自动调度 – Kubernetes 提供了一个高级调度程序来启动集群节点上的容器。它执行资源优化。
  2. 自我修复功能–它提供重新调度,替换和重新启动已失效的容器。
  3. 自动推出和回滚 – 它支持针对容器化应用程序的所需状态进行推出和回滚。
  4. 水平扩展和负载平衡 – Kubernetes 可以根据要求扩展和缩减应用程序。
  5. 资源利用率 – Kubernetes 提供资源利用率监控和优化,确保容器有效利用其资源。
  6. 支持多云和混合云 – Kubernetes 可以部署在不同的云平台上,并跨多个云运行容器化应用程序。
  7. 可扩展性 – Kubernetes 非常可扩展,可以使用自定义插件和控制器进行扩展。
  8. **社区支持-**Kubernetes 拥有一个庞大而活跃的社区,经常更新、错误修复和添加新功能。

Kubernetes Vs Docker:

Kubernetes 码头工人
Kubernetes 是一个开源平台,用于维护和部署一组容器 Docker 是一种工具,用于在轻量级容器中自动部署应用程序,以便应用程序可以在不同的环境中高效工作。
在实践中,Kubernetes 最常与 Docker 一起使用,以更好地控制和植入容器化应用程序。 使用 Docker,多个容器在同一硬件上运行的效率比 Docker 的虚拟机环境要高得多,而且 Docker 的生产力非常高。
应用程序部署为 Pod、部署和服务的组合。 应用以服务的形式部署。
它支持群集中容器的自动缩放。 Docker 不支持自动缩放。
运行状况检查分为两种类型:活动性和就绪性。 运行状况检查仅限于服务。
难以设置和配置。 Docker 的设置和安装非常简单。
它没有广泛的文档,但比Docker少得多。但它确实包括从安装到部署的所有内容。 Docker文档更有效,更广泛,并且具有更多功能,它包括从安装到部署的所有内容,快速入门说明以及更详细的教程。
提供的 Kubernetes 安装比 Docker 相当困难,甚至 Kubernetes 的命令也比 Docker 复杂得多。 Docker安装非常容易,通过使用更少的命令,您可以在虚拟机甚至云中安装Docker。
Azure、buffer、intel、Evernote 和 Shopify Using Kubernetes。 谷歌,亚马逊,ADP,VISA,公民银行和大都会人寿公司使用Docker。

Kubernetes 的架构
#

Kubernetes 遵循客户端-服务器架构,我们将主节点安装在一台机器上,节点安装在单独的 Linux 机器上。它遵循主从模型,该模型使用主节点跨多个 Kubernetes 节点管理 Docker 容器。主节点及其控制节点(工作节点)构成**“Kubernetes集群”。**开发人员可以在 Kubernetes master 的帮助下在 docker 容器中部署应用程序。

Kubernetes 的架构

1. Kubernetes - 主节点组件 –
#

Kubernetes master 负责管理整个集群,协调集群内的所有活动,并与工作节点通信,以保持 Kubernetes 和您的应用程序运行。这是所有管理任务的入口点。当我们在系统上安装 Kubernetes 时,我们将安装 Kubernetes Master 的四个主要组件。Kubernetes Master 节点的组件包括:

  • API 服务器 – API 服务器是用于控制集群的所有 REST 命令的入口点。所有管理任务均由主节点内的 API 服务器完成。如果我们想在 Kubernetes 对象中创建、删除、更新或显示,它必须通过这个 API 服务器。API 服务器验证和配置 API 对象,例如端口、服务、复制、控制器和部署,并负责为每个操作公开 API。我们可以使用名为 kubectl 的工具与这些 API 进行交互。‘kubectl’ 是一个非常小的 Go 语言二进制文件,它基本上与 API 服务器通信以执行我们从命令行发出的任何操作。它是一个命令行界面,用于针对 Kubernetes 集群运行命令。

  • 调度程序 – 它是主服务器中负责分配工作负载的服务。它负责跟踪每个工作节点的工作负载利用率,然后将资源可用且可以接受工作负载的工作负载放置在其上。调度程序负责根据您在配置文件中提到的约束跨可用节点调度 Pod,它会相应地调度这些 Pod。调度程序负责工作负载利用率并将 Pod 分配给新节点。

  • 控制器管理器 – 也称为控制器。它是一个在非终止循环中运行的守护进程,负责收集信息并将其发送到 API 服务器。它通过执行生活方式功能来调节 Kubernetes 集群,例如命名空间创建和生命周期事件垃圾收集、终止的 Pod 垃圾收集、级联删除垃圾收集、节点垃圾收集等等。基本上,如果集群的当前状态不满足所需状态,则控制器会监视集群的所需状态,则控制回路将采取纠正步骤以确保当前状态与所需状态的状态相同。密钥控制器是复制控制器、终结点控制器、命名空间控制器和服务帐户、控制器。因此,通过这种方式,控制器负责整个集群的整体运行状况,确保节点始终启动并运行,并且正确的 Pod 如规范文件中所述运行。

  • etcd – 它是一个分布式键值轻量级数据库。在 Kubernetes 中,它是一个中央数据库,用于在任何时间点存储当前集群状态,也用于存储配置详细信息,例如子网、配置映射等。它是用Go编程语言编写的。

2. Kubernetes - 工作节点组件 –
#

Kubernetes 工作节点包含管理容器之间的网络、与主节点通信以及将资源分配给计划的容器所需的所有服务。Kubernetes Worker 节点的组件包括:

  • Kubelet – 它是一个主节点代理,它与主节点通信并在集群中的每个工作节点上执行。它通过 API 服务器获取 Pod 规范,并执行与 Pod 关联的容器,并确保 Pod 中描述的容器正在运行且运行状况良好。如果 kubelet 注意到工作节点上运行的 Pod 有任何问题,那么它会尝试在同一节点上重新启动 pod。如果问题出在工作节点本身,则 Kubernetes 主节点会检测到节点故障,并决定在另一个健康的节点上重新创建 Pod。

  • Kube-Proxy ——它是 Kubernetes 集群中的核心网络组件。它负责维护整个网络配置。Kube-Proxy 维护跨所有节点、Pod 和容器的分布式网络,并将服务暴露在外部世界。它充当单个工作器节点上服务的网络代理和负载均衡器,并管理 TCP 和 UDP 数据包的网络路由。它侦听每个服务终结点创建和删除的 API 服务器,以便为每个服务终结点设置路由,以便您可以访问它。

  • Pod – Pod 是在同一主机上一起部署的一组容器。在 Pod 的帮助下,我们可以一起部署多个依赖容器,以便它充当这些容器的包装器,以便我们可以主要通过 Pod 交互和管理这些容器。

  • Docker – Docker 是一个容器化平台,用于以容器的形式将您的应用程序及其所有依赖项打包在一起,以确保您的应用程序在任何可以开发、测试或生产的环境中无缝运行。Docker 是一种工具,旨在更轻松地使用容器创建、部署和运行应用程序。Docker是世界领先的软件容器平台。它由一家名为Dot cloud的公司于2013年推出。它是用Go语言编写的。Docker推出仅六年,但社区已经从虚拟机转向它。 Docker旨在使开发人员和系统管理员受益,使其成为许多DevOps工具链的一部分。开发人员可以编写代码,而无需担心测试和生产环境。系统管理员不必担心基础架构,因为 Docker 可以轻松扩展和缩减系统数量。Docker在软件开发周期的部署阶段发挥作用。

img

组件插件
#

我们可以借助附加组件在集群中安装功能(例如守护程序、部署等)。此命名空间资源提供集群级功能,使其成为 Kube 系统命名空间资源。

Kubectl 的命令
#

以下是与 Kubernetes 集互的一些常用命令:

要查看集群中所有 Pod 的列表,您可以使用以下命令:

kubectl get pods

若要查看群集中所有节点的列表,可以使用以下命令:

kubectl get nodes

要查看群集中所有服务的列表,可以使用以下命令:

kubectl get services

Kubernetes 的应用
#

  • 微服务架构:Kubernetes 非常适合管理微服务架构,微服务架构涉及将复杂的应用程序分解为可以独立部署和管理的更小的模块化组件。
  • 云原生开发:Kubernetes 是云原生开发的关键组件,它涉及构建旨在在云基础架构上运行并利用云的可扩展性、灵活性和弹性的应用程序。
  • 持续集成和交付:Kubernetes 与 CI/CD 管道很好地集成,可以更轻松地自动化部署过程,并在最短的停机时间内推出新版本的应用程序。
  • 混合和多云部署:Kubernetes 跨不同的云提供商、本地数据中心甚至开发人员笔记本电脑提供一致的部署和管理体验,从而更轻松地构建和管理混合云和多云部署。
  • 高性能计算:Kubernetes 可用于管理高性能计算工作负载,例如科学模拟、机器学习和大数据处理。
  • 边缘计算:Kubernetes 也用于边缘计算应用程序,可用于管理在边缘设备(如物联网设备或网络设备)上运行的容器化应用程序。

Related

《DevOps》工程师的工作职责有哪些?
devops CI/CD
《DevOps》工程师的工作职责有哪些?
成为一名DevOps工程师需要具备那些技能?
运维 devops CI/CD
在当今IT运维的工作中,对DevOps工程师的要求越来越高。在过去 40-45 年中,就业市场对 DevOps 专业人员的需求增加了约 3-4%,并且数量正在迅速增长。同时,DevOps是一项具有挑战性的工作,需要广泛的技能以及该领域的足够经验和深入的知识。难怪DevOps将在未来统治IT世界,如果您期待成为一名DevOps工程师,您可以认为自己走的是朝阳之路!
现代 IT 人一定要知道的 Ansible系列教程:playbook详解(二)
devops
Ansible Playbook 提供了一个可重复、可重用、简单的配置管理和多机部署系统,非常适合部署复杂的应用程序。如果您需要多次使用 Ansible 执行任务,请编写一个 playbook 并将其置于源代码控制之下。然后,您可以使用 playbook 推出新配置或确认远程系统的配置。