Kubernetes入门词汇术语解释


本文介绍Kubernetes的一些基本概念,可以帮助你快速掌握在K8s中实际部署应用最重要的逻辑。
镜像
镜像是一个轻量级,独立的可执行软件包,包含运行应用程序所需的一切 - 代码,运行时,系统库和工具,环境变量和配置文件。

容器
通过运行镜像启动容器。它是镜像的运行时实例。这是镜像在执行时在内存中的变化。
容器是应用层的抽象,它们可以在同一台机器上运行,并与其他容器共享操作系统内核,每个容器作为用户空间中的独立进程运行。

节点
节点是Kubernetes中部署容器的VM或物理机器的表示。每个节点由主组件管理。
Kubernetes本身并不创建节点:它由云提供商在外部创建,或者存在于物理或虚拟机池中。因此,当Kubernetes创建节点时,它会创建一个表示节点的对象。
每个工作节点上的服务包括:

  • 负责运行容器的软件
  • 与Kubernetes Master通信的节点代理程序
  • 反映Kubernetes网络服务的网络代理

集群
集群由至少一个主节点和多个工作节点组成。这些机器运行Kubernetes集群编排系统。一旦运行了Kubernetes集群,就可以在其上部署容器化应用程序。实际应用程序在群集中动态部署。
主服务器是集群的统一端点。与集群的所有交互都是通过Kubernetes API调用完成的,并且主服务器运行Kubernetes API服务器进程来处理这些请求。集群主机负责决定在所有集群节点上运行的内容。因此,每个节点都是从主节点管理的。

Kubernetes
Kubernetes协调节点连接到的所在集群作为单个单元工作。Kubernetes中的抽象允许您将容器化应用程序部署到集群,而无需将它们专门绑定到单个节点计算机上。Kubernetes以更有效的方式自动化跨集群分发和调度应用程序容器。
最终用户可以直接使用Kubernetes API与集群进行交互。Kubernetes可帮助您确保这些容器化应用程序随时随地运行,并帮助他们找到工作所需的资源和工具。

一旦熟悉了基本概念,就应该深入研究更复杂的概念了。我们将使用它们代表我们的Kubernetes配置代码。

Pod
您已熟悉容器这个概念,问题是他们必须在某个地方运行,因为Kubernetes不会直接运行它们。包装一个容器,多个容器但相同镜像甚至多个具有不同镜像的容器的高级结构称为Pod。
您可以将Pod视为具有共享存储(卷)和网络的一个或多个容器的组。它们共享IP地址和端口空间,可以通过localhost找到彼此。但是,它们通常通过Pod IP地址相互通信。
Pod表示部署单元:Kubernetes中的单个应用程序实例,可能包含单个容器或少量紧密耦合且共享资源的容器。Pod基本上是群集上的正在运行的进程。
请注意,在单个Pod中对多个容器进行分组是一个相对高级的用例。您应该仅在容器紧密耦合的特定实例中使用此模式。例如,您可能有一个容器充当共享卷中文件的Web服务器,以及一个单独的“sidecar边车”容器,用于从远程源更新这些文件。

ReplicaSet复制集
每个Pod都用于运行给定应用程序的单个实例。如果要水平扩展应用程序(例如,运行多个实例),则应使用多个Pod,每个实例一个pod。在Kubernetes中,这通常被称为复制。
ReplicaSet 可确保在任何给定时间运行指定数量的pod。它通过根据需要创建和删除Pod来达到其目的,以达到所需的计数。当ReplicaSet需要创建新Pod时,它使用其Pod模板。

部署
部署是一个更高级别的概念,它管理ReplicaSet并为Pod提供声明性更新以及许多其他有用的功能。建议使用部署概念而不是直接使用ReplicaSet复制集概念。
部署是一个对象,可以拥有ReplicaSet并通过声明性的服务器端滚动更新来更新它们及其Pod。虽然ReplicaSet可以独立使用,但今天它们主要被部署用作协调Pod创建,删除和更新的机制。使用“部署”时,您不必担心管理它们创建的副本集。部署自己拥有并管理其ReplicaSet。因此,建议您在需要ReplicaSet时使用“部署”。

最后,是时候解释剩下的概念,最终理解将应用程序部署到生产环境并将其暴露给外部世界所需的一切。

服务
Kubernetes中的服务是一个抽象,它定义了一组逻辑Pod和一个访问它们的策略。服务启用从属Pod之间的松散耦合。服务所针对的Pod集合通常由标签(附加到对象的键/值对以用于分组目的)确定。
尽管每个Pod都具有唯一的IP地址,但如果没有服务,这些IP不会在群集外部公开。默认情况下,pod基本上与世界其他地方隔离。服务允许您的应用程序接收流量。

NodePort节点端口
NodePort 在群集的每个节点上打开特定端口。它在节点的IP地址上的静态端口上公开您的服务。然后,您可以通过请求访问它<NodeIp>:<NodePort>。Kubernetes透明地将NodePort上的传入流量路由到您的容器。
配置NodePort时,您必须说明它打开了哪个端口以及它将所有请求转发到的目标端口。目标端口通常是它公开的容器端口。

Ingress入口
Ingress允许外部流量到您的应用程序。由于Kubernetes在pod和外部世界之间提供隔离,因此如果要与正在运行的pod进行通信,则必须打开通信通道。Ingress是一组路由规则,用于管理外部用户如何访问在Kubernetes集群中运行的服务。
Ingress将集群外部的HTTP和HTTPS路由暴露给集群中的服务。流量路由由Ingress上定义的规则控制。Ingress可以配置为服务提供外部可访问的URL,负载平衡流量,终止SSL,并提供基于名称的虚拟主机。

ClusterIssuer集群发行者
发行者代表一个证书颁发机构,可以从中获取签名的x509证书,例如Let's Encrypt是https的发行者。您将需要至少一个ClusterIssuer才能开始在群集中颁发证书。
当您希望提供从中央机构(例如Letsencrypt或您的内部CA)获取证书并运行单租户群集时,它们特别有用。