• 沒有找到結果。

云容器引擎(Cloud Container Engine,简称CCE)提供高度可扩展的、高性能的企业 级Kubernetes集群,支持运行Docker容器。借助云容器引擎,您可以在华为云上轻松 部署、管理和扩展容器化应用程序。

云容器引擎提供Kubernetes原生API,支持使用kubectl,且提供图形化控制台,让您 能够拥有完整的端到端使用体验,使用云容器引擎前,建议您先了解相关的基本概 念。

集群(Cluster)

集群指容器运行所需要的云资源组合,关联了若干云服务器节点、负载均衡等云资 源。您可以理解为集群是“同一个子网中一个或多个弹性云服务器(又称:节点)”

通过相关技术组合而成的计算机群体,为容器运行提供了计算资源池。

节点(Node)

每一个节点对应一台服务器(可以是虚拟机实例或者物理服务器),容器应用运行在 节点上。节点上运行着Agent代理程序(kubelet),用于管理节点上运行的容器实 例。集群中的节点数量可以伸缩。

节点池(NodePool)

节点池是集群中具有相同配置的一组节点,一个节点池包含一个节点或多个节点。

虚拟私有云(VPC)

虚拟私有云是通过逻辑方式进行网络隔离,提供安全、隔离的网络环境。您可以在 VPC中定义与传统网络无差别的虚拟网络,同时提供弹性IP、安全组等高级网络服务。

安全组

安全组是一个逻辑上的分组,为同一个VPC内具有相同安全保护需求并相互信任的弹 性云服务器提供访问策略。安全组创建后,用户可以在安全组中定义各种访问规则,

当弹性云服务器加入该安全组后,即受到这些访问规则的保护。

详细介绍请参见安全组。

集群、虚拟私有云、安全组和节点的关系

如图11-1,同一个Region下可以有多个虚拟私有云(VPC)。虚拟私有云由一个个子 网组成,子网与子网之间的网络交互通过子网网关完成,而集群就是建立在某个子网 中。因此,存在以下三种场景:

● 不同集群可以创建在不同的虚拟私有云中。

● 不同集群可以创建在同一个子网中。

● 不同集群可以创建在不同的子网中。

11-1 集群、VPC、安全组和节点的关系

实例(Pod)

实例(Pod)是 Kubernetes 部署应用或服务的最小的基本单位。一个Pod 封装多个应 用容器(也可以只有一个容器)、存储资源、一个独立的网络 IP 以及管理控制容器运 行方式的策略选项。

11-2 实例(Pod)

容器(Container)

一个通过 Docker 镜像创建的运行实例,一个节点可运行多个容器。容器的实质是进 程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。

11-3 实例 Pod、容器 Container、节点 Node 的关系

工作负载

工作负载是在Kubernetes上运行的应用程序。无论您的工作负载是单个组件还是协同 工作的多个组件,您都可以在Kubernetes上的一组Pod中运行它。在Kubernetes中,

工作负载是对一组Pod的抽象模型,用于描述业务的运行载体,包括Deployment、

Statefulset、Daemonset、Job、CronJob等多种类型。

● 无状态工作负载:即kubernetes中的“Deployment”,无状态工作负载支持弹性 伸缩与滚动升级,适用于实例完全独立、功能相同的场景,如:nginx、

wordpress等。

● 有状态工作负载:即kubernetes中的“StatefulSet”,有状态工作负载支持实例 有序部署和删除,支持持久化存储,适用于实例间存在互访的场景,如ETCD、

mysql-HA等。

● 创建守护进程集:即kubernetes中的“DaemonSet”,守护进程集确保全部(或 者某些)节点都运行一个Pod实例,支持实例动态添加到新节点,适用于实例在每 个节点上都需要运行的场景,如ceph、fluentd、Prometheus Node Exporter等。

● 普通任务:即kubernetes中的“Job”,普通任务是一次性运行的短任务,部署完 成后即可执行。使用场景为在创建工作负载前,执行普通任务,将镜像上传至镜 像仓库。

● 定时任务:即kubernetes中的“CronJob”,定时任务是按照指定时间周期运行的 短任务。使用场景为在某个固定时间点,为所有运行中的节点做时间同步。

11-4 工作负载与 Pod 的关系

编排模板

编排模板包含了一组容器服务的定义和其相互关联,可以用于多容器应用的部署和管 理。

镜像(Image)

Docker镜像是一个模板,是容器应用打包的标准格式,用于创建Docker容器。或者 说,Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资 源、配置等文件外,还包含了一些为运行时准备的配置参数(如匿名卷、环境变量、

用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。在部署容器 化应用时可以指定镜像,镜像可以来自于 Docker Hub、华为云容器镜像服务或者用户 的私有 Registry。例如一个Docker镜像可以包含一个完整的Ubuntu操作系统环境,里 面仅安装了用户需要的应用程序及其依赖文件。

镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停 止、删除、暂停等。

11-5 镜像、容器、工作负载的关系

命名空间(Namespace)

命名空间是对一组资源和对象的抽象整合。在同一个集群内可创建不同的命名空间,

不同命名空间中的数据彼此隔离。使得它们既可以共享同一个集群的服务,也能够互 不干扰。例如:

● 可以将开发环境、测试环境的业务分别放在不同的命名空间。

● 常见的pods,services,replication controllers和deployments等都是属于某一个 namespace的(默认是default),而node,persistentVolumes等则不属于任何 namespace。

服务(Service)

Service是将运行在一组 Pods 上的应用程序公开为网络服务的抽象方法。

使用Kubernetes,您无需修改应用程序即可使用不熟悉的服务发现机制。 Kubernetes 为Pods提供自己的IP地址和一组Pod的单个DNS名称,并且可以在它们之间进行负载平 衡。

Kubernetes允许指定一个需要的类型的Service,类型 的取值以及行为如下:

● ClusterIP:集群内访问。通过集群的内部 IP 暴露服务,选择该值,服务只能够在 集群内部可以访问,这也是默认的 ServiceType。

● NodePort:节点访问。通过每个Node上的 IP 和静态端口(NodePort)暴露服 务。NodePort服务会路由到ClusterIP服务,这个ClusterIP服务会自动创建。通过 请求 <NodeIP>:<NodePort>,可以从集群的外部访问一个 NodePort 服务。

● LoadBalancer:负载均衡。使用云提供商的负载均衡器,可以向外部暴露服务。

外部的负载均衡器可以路由到NodePort服务和ClusterIP服务。

● DNAT:DNAT网关。可以为集群节点提供网络地址转换服务,使多个节点可以共 享使用弹性IP。与弹性IP方式相比增强了可靠性,弹性IP无需与单个节点绑定,任 何节点状态的异常不影响其访问。

七层负载均衡(Ingress)

Ingress是为进入集群的请求提供路由规则的集合,可以给service提供集群外部访问的 URL、负载均衡、SSL终止、HTTP路由等。

网络策略(NetworkPolicy)

NetworkPolicy提供了基于策略的网络控制,用于隔离应用并减少攻击面。它使用标签 选择器模拟传统的分段网络,并通过策略控制它们之间的流量以及来自外部的流量。

配置项(Configmap)

ConfigMap用于保存配置数据的键值对,可以用来保存单个属性,也可以用来保存配 置文件。ConfigMap跟secret很类似,但它可以更方便地处理不包含敏感信息的字符 串。

密钥(Secret)

Secret解决了密码、token、密钥等敏感数据的配置问题,而不需要把这些敏感数据暴 露到镜像或者Pod Spec中。Secret可以以Volume或者环境变量的方式使用。

标签(Label)

标签其实就一对 key/value,被关联到对象上,比如Pod。标签的使用我们倾向于能够 标示对象的特殊特点,并且对用户而言是有意义的,但是标签对内核系统是没有直接 意义的。

选择器(LabelSelector)

Label selector是Kubernetes核心的分组机制,通过label selector客户端/用户能够识别 一组有共同特征或属性的资源对象。

注解(Annotation)

Annotation与Label类似,也使用key/value键值对的形式进行定义。

Label具有严格的命名规则,它定义的是Kubernetes对象的元数据(Metadata),并 且用于Label Selector。

Annotation则是用户任意定义的“附加”信息,以便于外部工具进行查找。

存储卷(PersistentVolume)

PersistentVolume(PV)是集群之中的一块网络存储。跟 Node 一样,也是集群的资 源。

存储声明(PersistentVolumeClaim)

PV 是存储资源,而 PersistentVolumeClaim (PVC) 是对 PV 的请求。PVC 跟 Pod 类 似:Pod 消费 Node 资源,而 PVC 消费 PV 资源;Pod 能够请求 CPU 和内存资源,

而 PVC 请求特定大小和访问模式的数据卷。

弹性伸缩(HPA)

Horizontal Pod Autoscaling,简称HPA,是Kubernetes中实现POD水平自动伸缩的功 能。Kubernetes集群可以通过Replication Controller的scale机制完成服务的扩容或缩 容,实现具有伸缩性的服务。

节点亲和性(NodeAffinity)

通过选择标签的方式,可以限制pod被调度到特定的节点上。

节点反亲和性(NodeAntiAffinity)

通过选择标签的方式,可以限制pod不被调度到特定的节点上。

工作负载亲和性(PodAffinity)

指定工作负载部署在相同节点。用户可根据业务需求进行工作负载的就近部署,容器 间通信就近路由,减少网络消耗。

工作负载反亲和性(PodAntiAffinity)

指定工作负载部署在不同节点。同个工作负载的多个实例反亲和部署,减少宕机影 响;互相干扰的应用反亲和部署,避免干扰。

资源配额(Resource Quota)

资源配额(Resource Quotas)是用来限制用户资源用量的一种机制。

资源限制(Limit Range)

默认情况下,K8S中所有容器都没有任何CPU和内存限制。LimitRange(简称limits)用 来给Namespace增加一个资源限制,包括最小、最大和默认资源。在pod创建时,强 制执行使用limits的参数分配资源。

环境变量

环境变量是指容器运行环境中设定的一个变量,您可以在创建容器模板时设定不超过 30个的环境变量。环境变量可以在工作负载部署后修改,为工作负载提供了极大的灵 活性。

在CCE中设置环境变量与Dockerfile中的“ENV”效果相同。

应用服务网格(Istio)

Istio是一个提供连接、保护、控制以及观测功能的开放平台。

云容器引擎深度集成了应用服务网格,提供非侵入式的微服务治理解决方案,支持完 整的生命周期管理和流量治理能力,兼容Kubernetes和Istio生态。一键开启应用服务 网格后即可提供非侵入的智能流量治理解决方案,其功能包括负载均衡、熔断、限流 等多种治理能力。应用服务网格内置金丝雀、蓝绿等多种灰度发布流程,提供一站式

云容器引擎深度集成了应用服务网格,提供非侵入式的微服务治理解决方案,支持完 整的生命周期管理和流量治理能力,兼容Kubernetes和Istio生态。一键开启应用服务 网格后即可提供非侵入的智能流量治理解决方案,其功能包括负载均衡、熔断、限流 等多种治理能力。应用服务网格内置金丝雀、蓝绿等多种灰度发布流程,提供一站式

相關文件