华为云-容器引擎CCE-基本概念
云容器引擎(Cloud Container Engine,简称CCE)提供⾼度可扩展的、⾼性能的企业级Kubernetes集,⽀持运⾏Docker容器。借助云容器引擎,您可以在华为云上轻松部署、管理和扩展容器化应⽤程序。
云容器引擎提供Kubernetes原⽣API,⽀持使⽤kubectl,且提供图形化控制台,让您能够拥有完整的端到端使⽤体验,使⽤云容器引擎前,建议您先了解相关的基本概念。
集(Cluster)
集指容器运⾏所需要的云资源组合,关联了若⼲云服务器节点、负载均衡等云资源。您可以理解为集是“同⼀个⼦⽹中⼀个或多个弹性云服务器(⼜称:节点)”通过相关技术组合⽽成的计算机体,为容器运⾏提供了计算资源池。
节点(Node)
每⼀个节点对应⼀台服务器(可以是虚拟机实例或者物理服务器),容器应⽤运⾏在节点上。节点上运⾏着Agent代理程序(kubelet),⽤于管理节点上运⾏的容器实例。集中的节点数量可以伸缩。
节点池(NodePool)
节点池是集中具有相同配置的⼀组节点,⼀个节点池包含⼀个节点或多个节点。
虚拟私有云(VPC)
虚拟私有云是通过逻辑⽅式进⾏⽹络隔离,提供安全、隔离的⽹络环境。您可以在VPC中定义与传统⽹络⽆差别的虚拟⽹络,同时提供弹性IP、安全组等⾼级⽹络服务。
安全组
安全组是⼀个逻辑上的分组,为同⼀个VPC内具有相同安全保护需求并相互信任的弹性云服务器提供访问策略。安全组创建后,⽤户可以在安全组中定义各种访问规则,当弹性云服务器加⼊该安全组后,即受到这些访问规则的保护。
详细介绍请参见。
集、虚拟私有云、安全组和节点的关系
如下图,同⼀个Region下可以有多个虚拟私有云(VPC)。虚拟私有云由⼀个个⼦⽹组成,⼦⽹与⼦⽹之间的⽹络交互通过⼦⽹⽹关完成,⽽集就是建⽴在某个⼦⽹中。因此,存在以下三种场景:
不同集可以创建在不同的虚拟私有云中。
不同集可以创建在同⼀个⼦⽹中。
不同集可以创建在不同的⼦⽹中。
集、VPC、安全组和节点的关系
实例(Pod)
实例(Pod)是 Kubernetes 部署应⽤或服务的最⼩的基本单位。⼀个Pod 封装多个应⽤容器(也可以只有⼀个容器)、存储资源、⼀个独⽴的⽹络 IP 以及管理控制容器运⾏⽅式的策略选项。
实例(Pod)
容器(Container)
⼀个通过 Docker 镜像创建的运⾏实例,⼀个节点可运⾏多个容器。容器的实质是进程,但与直接在宿主执⾏的进程不同,容器进程运⾏于属于⾃⼰的独⽴的命名空间。
⼯作负载
⼯作负载即Kubernetes对⼀组Pod的抽象模型,⽤于描述业务的运⾏载体,包括Deployment、Statefulset、Daemonset、Job、CronJob等多种类型。
⽆状态⼯作负载:即kubernetes中的“Deployment”,⽆状态⼯作负载⽀持弹性伸缩与滚动升级,适⽤于实例完全独⽴、功能相同的场景,如:nginx、wordpress等。
有状态⼯作负载:即kubernetes中的“StatefulSet”,有状态⼯作负载⽀持实例有序部署和删除,⽀持持久化存储,适⽤于实例间存在互访的场景,如ETCD、mysql-HA等。
创建守护进程集:即kubernetes中的“DaemonSet”,守护进程集确保全部(或者某些)节点都运⾏⼀个Pod实例,⽀持实例动态添加到新节点,适⽤于实例在每个节点上都需要运⾏的场景,如ceph、fluentd、Prometheus
Node Exporter等。
docker进入容器普通任务:即kubernetes中的“Job”,普通任务是⼀次性运⾏的短任务,部署完成后即可执⾏。使⽤场景为在创建⼯作负载前,执⾏普通任务,将镜像上传⾄镜像仓库。
定时任务:即kubernetes中的“CronJob”,定时任务是按照指定时间周期运⾏的短任务。使⽤场景为在某个固定时间点,为所有运⾏中的节点做时间同步。
⼯作负载与Pod的关系
编排模板
编排模板包含了⼀组容器服务的定义和其相互关联,可以⽤于多容器应⽤的部署和管理。
镜像(Image)
Docker镜像是⼀个模板,是容器应⽤打包的标准格式,⽤于创建Docker容器。或者说,Docker镜像是⼀个特殊的⽂件系统,除了提供容器运⾏时所需的程序、库、资源、配置等⽂件外,还包含了⼀些为运⾏时准备的配置参数(如匿名卷、环境变量、⽤户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。在部署容器化应⽤时可以指定镜像,镜像可以来⾃于 Docker Hub、华为云或者⽤户的私有Registry。例如⼀个Docker镜像可以包含⼀个完整的Ubuntu操作系统环境,⾥⾯仅安装了⽤户需要的应⽤程序及其依赖⽂件。
镜像(Image)和容器(Container)的关系,就像是⾯向对象程序设计中的类和实例⼀样,镜像是静态的定义,容器是镜像运⾏时的实体。容器可以被创建、启动、停⽌、删除、暂停等。
镜像、容器、⼯作负载的关系
命名空间(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 服务会⾃动创建。通过请求
:,可以从集的外部访问⼀个 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机制完成服务的扩容或缩容,实现具有伸缩性的服务。
亲和性与反亲和性
在应⽤没有容器化之前,原先⼀个虚机上会装多个组件,进程间会有通信。但在做容器化拆分的时候,往往直接按进程拆分容器,⽐如业务进程⼀个容器,监控⽇志处理或者本地数据放在另⼀个容器,并且有独⽴的⽣命周期。这时如果他们分布在⽹络中两个较远的点,请求经过多次转发,性能会很差。
亲和性:可以实现就近部署,增强⽹络能⼒实现通信上的就近路由,减少⽹络的损耗。如:应⽤A与应⽤B两个应⽤频繁交互,所以有必要利⽤亲和性让两个应⽤的尽可能的靠近,甚⾄在⼀个节点上,以减少因⽹络通信⽽带来的性能损耗。
反亲和性:主要是出于⾼可靠性考虑,尽量分散实例,某个节点故障的时候,对应⽤的影响只是 N
分之⼀或者只是⼀个实例。如:当应⽤采⽤多副本部署时,有必要采⽤反亲和性让各个应⽤实例打散分布在各个节点上,以提⾼HA。
节点亲和性(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⽣态。⼀键开启应⽤服务⽹格后即可提供⾮侵⼊的智能流量治理解决⽅案,其功能包括负载均衡、熔断、限流等多种治理能⼒。应⽤服务⽹格内置⾦丝雀、蓝
绿等多种灰度发布流程,提供⼀站式⾃动化的发布管理。基于⽆侵⼊的监控数据采集,深度整合华为云应⽤性能管理(APM)能⼒,提供实时流量拓扑、调⽤链等服务性能监控和运⾏诊断,构建全景的服务运⾏视图。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论