天天看点

k8s集群概念组件简介

作者:散文随风想

一、Kubernetes 集群概述

k8s的全生命周期管理:

在k8s进行管理应用的时候,基本步骤是:创建集群,部署应用,发布应用,扩展应用,更新应用。

-- master:

kubectl: k8s的所有操作都是通过kubectl指令操作的

REST API:k8s对外部服务提供的接口服务,例如图形化界面或者kubectl都会通过REST API接口下发指令来控制k8s

scheduler:调度器,例如创建pod,scheduler可以控制将pod分配到哪个pod节点

controller-manager:检测pod或者node的健康状态,并维持pod的正常运行,如果pod故障,controller-manger会自动修复,例如在启动一个pod副本

kubelet:代理软件,例如在master上对node节点下发的指令,都需要通过kubelet组建来告知各个组件

etcd:数据库,所有配置数据都存放在etcd数据库中

kubeproxy:在所有节点都需要运行kubeproxy,后期通过创建svc来将pod映射到外网,当外部通过svc-ip访问pod的时候就需要通过kubeporxy进行路由转发到pod

-- node:

pod:k8s环境运行的最小单位,一个pod中可以包含一个或多个容器

k8s集群概念组件简介
k8s集群概念组件简介

1.2 Kubernetes 资源

资源 用途
服务(Service) Kubernetes 使用服务在一组 pod 上公开正在运行的应用程序。
ReplicaSet Kubernetes 使用 ReplicaSet 来维护恒定的 pod 号。
Deployment 维护应用程序生命周期的资源对象。

1.3 Kubernetes 构架

Kubernetes 集群包含一个 control plane 和 worker 节点。

Kubernetes 容器可以运行 在各种机器和环境中。

control plane 节点控制和维护集群的状态。

worker 节点运行 Kubernetes 应用程序。

Kubernetes 命名空间用来区分集群中的集群资源。命名空间范围适用于资源对象,如部署、服务和 pod。

不能将命名空间用于集群范围的资源对象,如存储类、节点和持久性卷。

k8s集群概念组件简介

1.4 Kubernetes 概念指南

  • 从一个或多个 worker 节点开始,以运行容器工作负载。
  • 从一个或多个 control plane 节点管理这些工作负载的部署。
  • 将容器嵌套到名为 pod 的部署单元中。使用 pod 可以为容器提供额外的元数据,并可在单个部署实体中对多个容器进行分组。
  • 创建特殊种类的资产。例如,服务由一组 pod 及定义了访问方式的策略来表示。此策略可使容器连接到所需的服务,即便容器没有用于服务的特定 IP 地址。复制控制器(replication controller)是另一种特殊资产,用于指示一次需要运行多少个 pod 副本。您可以使用此功能来自动扩展应用程序,以适应其当前的需求。

1.5 Kubernetes 组件

组件 用途
kube-proxy 在应用组件间负载均衡网络流量。
kube-controller-manager 执行集群级别的功能,如复制组件、追踪工作结点状态、处理结点失败等。Controller Manager组件是由多个控制器组成的,其中很多控制器是按K8s的资源类型划分的,如Replication Manager(管理ReplicationController 资源),ReplicaSet Controller,PersistentVolume controller。
kube-scheduler 排程组件,为用户应用的每一可部署组件分配工作结点。
etcd 一款开源软件。提供可靠的分布式数据存储服务,用于持久化存储K8s集群的配置和状态
kube-apiserver 验证并配置 API 对象的数据。是用户程序(如kubectl)、K8s其它组件之间通信的接口。K8s其它组件之间不直接通信,而是通过API server通信的。例如,只有API server连接了etcd,即其它组件更新K8s集群的状态时,只能通过API server读写etcd中的数据。
kubelet 在节点上运行并读取容器清单。确保定义的容器已启动且正在运行。
kubectl 管理工作结点上的容器。使用 kubectl 命令与 kube-apiserver 进行交互。
节点 节点是 Kubernetes 集群中的物理机器或虚拟机。控制平面(control plane)管理每个节点,并在 Kubernetes 集群中的节点之间调度 pod。
容器运行时 容器运行时在主机操作系统上运行容器。您必须在每个节点上安装容器运行时,以便 pod 能够在该节点上运行。
持久性存储 即便在设备关闭后也存储数据。Kubernetes 使用持久性卷来存储应用程序数据。
container-registry 存储和访问容器镜像。
Pod pod 是 Kubernetes 中的最小逻辑单元。pod 包含一个或多个在 worker 节点上运行的容器。
flannel 开源容器集群子网。

1.6 k8s概念详解

Kubernetes

Kubernetes 是一个开源容器编配引擎,用于自动化容器化应用程序的部署、扩展和管理。

容器

容器是 worker 节点上以 OCI 兼容容器中运行的应用程序实例和组件。容器是开放容器项目(OCI)兼容镜像的运行时。镜像是二进制应用。worker 节点可以运行多个容器。节点容量与底层资源的内存和 CPU 功能相关,无论它们是云、硬件还是虚拟化。

Pod

pod 是共同部署在同一主机上的一个或多个容器。包含一组有共享资源(如卷和 IP 地址)的容器。pod 也是定义、部署和管理的最小计算单元。

在 OpenShift Container Platform 中,pod 替代了独立的应用程序容器作为最小的可部署单元。

Pod 是 OpenShift Container Platform 中编配的单元。OpenShift Container Platform 在同一个节点上的一个 pod 中调用并运行所有容器。复杂的应用由多个 pod 组成,每个 pod 都有自己的容器。它们与外部进行交互,也在 OpenShift Container Platform 环境中相互交互。

副本集和复制控制器

Kubernetes 副本集和 OpenShift Container Platform 复制控制器,可同时使用,确保在所有时间都有指定数量的 pod 副本在运行。如果 pod 退出或被删除,副本集或复制控制器会启动其他 pod 也保证运行的数量。如果运行的 pod 数量超过了指定值,副本集将根据需要删除以匹配指定的副本数。

部署(Deployment)和部署配置(DeploymentConfig)

OpenShift Container Platform 可以使用 Kubernetes Deployment 对象和 OpenShift Container Platform DeploymentConfig 对象,用户可以选择其中的一个。

Deployment 对象控制应用程序用于 pod的部署,首先从 registry 中获取的容器镜像的名称,并作为 pod 部署到节点上, 并设置要部署的 pod 的副本数,创建副本集来管理该进程。

Deployment 对象可以根据 Deployment 对象版本和各种 rollout 策略来更新部署到 worker 节点上的 pod,以管理应用程序的可用性。

OpenShift Container Platform DeploymentConfig 对象添加了更改触发器的额外功能,这些触发器可以在容器镜像的新版本或其他更改时自动创建 Deployment 对象的新版本。

服务(Service)

Service定义了一组逻辑的 pod 和访问策略,为其他应用程序提供永久内部 IP 地址和主机名,供其他用作 pod 的创建和销毁。

Service层将应用程序组件连接在一起。例如,前端 Web 服务通过与其服务通信连接到数据库实例。服务支持跨应用程序组件简单的内部负载平衡。OpenShift Container Platform 会自动将服务信息注入到正在运行的容器中,以简化发现过程。

路由(Route)

路由是通过为服务提供一个外部可访问主机名(如 www.example.com)来公开服务的方法。每个路由都包含路由名称、服务选择器和可选的安全配置。路由器可以使用定义的路由和由服务标识的端点,提供允许外部客户端到达应用程序的名称。尽管易于部署完整的多层应用程序,但从 OpenShift Container Platform 环境以外的任何位置的流量在没有路由层的情况下无法访问应用程序。

Build

构建 (build) 是将输入参数转换为结果对象的过程。此过程最常用于将输入参数或源代码转换为可运行的镜像。BuildConfig 对象是整个构建过程的定义。OpenShift Container Platform 通过从构建镜像创建容器并将它们推送到集成的 registry 来利用 Kubernetes。

project

OpenShift Container Platform 使用project来允许一组用户或开发人员一起工作,实现一个隔离单位和协作单位。定义资源范围,允许项目管理员和协作者管理资源,并使用配额和限制跟踪用户的资源。

project是带有额外注解的 Kubernetes 命名空间, 是管理常规用户对资源访问的一个中央点。通过project,一组用户可以在与其他用户隔离的前提下组织和管理其内容。用户需要通过管理员获得项目的访问权限。集群管理员也可以允许开发人员创建自己的项目,在这种情况下,用户会自动获得自己项目的访问权限。

每个项目都有自己的一组对象、策略、约束和服务帐户的集合。

项目也称为命名空间(namespaces)。

Operator

Operator 是一个 Kubernetes 原生应用程序。Operator 的目标是将相关的知识融入到软件来实现各种操作。之前,这些知识存在于管理员的头脑中,以及各种 shell 脚本或自动化软件(如 Ansible)中。它们都在您的 Kubernetes 集群之外,很难集成。但是,Operators 改变了这个情况。

Operator 专门用于应用程序的构建。

Operator 是在 Kubernetes 集群内运行、且原生集成了 Kubernetes 概念和 API 的一个软件,可以实施和自动化常见的第 1 天操作,如安装和配置,以及第 2 天活动,如扩展和缩减、重新配置、更新、备份、故障转移以及恢复,Operator称为 Kubernetes 原生应用程序。

使用 Operator 时,应用程序不能被视为原语的集合,如 pod、部署、服务或配置映射。相反,Operator 应被视为单个对象,它公开了对应用程序有意义的选项。