容器服务提供Kubernetes原生API,支持使用kubectl,且提供图形化控制台,让您能够拥有完整的端到端使用体验,使用容器服务前,建议您先了解相关的基本概念。
集群(Cluster)
集群指容器运行所需要的云资源组合,关联了若干云服务器节点、负载均衡等云资源。您可以理解为集群是“同一个子网中一个或多个云服务器(又称节点)”,通过相关技术组合而成的计算机群体,为容器运行提供了计算资源池。
节点(Node)
每一个节点对应一台服务器(可以是虚拟机实例或者物理服务器),容器应用运行在节点上。节点上运行着Agent代理程序(Kubelet),用于管理节点上运行的容器实例。集群中的节点数量可以伸缩。
节点池(NodePool)
节点池是集群中具有相同配置的一组节点,一个节点池包含一个节点或多个节点。
虚拟私有云(VPC)
虚拟私有云是通过逻辑方式进行网络隔离,提供安全、隔离的网络环境。您可以在VPC中定义与传统网络无差别的虚拟网络,同时提供弹性IP、安全组等高级网络服务。
安全组
安全组是一个逻辑上的分组,为同一个VPC内具有相同安全保护需求并相互信任的弹性云服务器提供访问策略。安全组新建后,用户可以在安全组中定义各种访问规则,当弹性云服务器加入该安全组后,即受到这些访问规则的保护。
实例(Pod)
实例是Kubernetes部署应用或服务的最小的基本单位。一个Pod封装多个应用容器(也可以只有一个容器),配合存储资源、独立的网络IP等,构建所需的应用运行环境。
容器(Container)
一个通过Docker或Containerd镜像新建的运行实例,一个节点可运行多个容器。容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。
工作负载
工作负载是在Kubernetes上运行的应用程序。无论您的工作负载是单个组件还是协同工作的多个组件,您都可以在Kubernetes上的一组Pod中运行它。在Kubernetes中,工作负载是对一组Pod的抽象模型,用于描述业务的运行载体,包括Deployment、Statefulset、Daemonset、Job、CronJob等多种类型。
•无状态工作负载
即Kubernetes中的“Deployment”,无状态工作负载支持弹性伸缩与滚动升级,适用于实例完全独立、功能相同的场景,如:nginx、wordpress等。
•有状态工作负载
即Kubernetes中的“StatefulSet”,有状态工作负载支持实例有序部署和删除,支持持久化存储,适用于实例间存在互访的场景,如ETCD、数据库服务等。
•守护进程集
即Kubernetes中的“DaemonSet”,守护进程集,确保全部或某些节点都运行一个Pod实例,支持实例动态添加到新节点,适用于实例在每个节点上都需要运行的场景,如ceph、fluentd、Prometheus Node Exporter等。
•普通任务
即Kubernetes中的“Job”,普通任务是一次性运行的短任务,部署完成后即可执行。使用场景为在新建工作负载前,执行普通任务,将镜像上传至镜像仓库。
•定时任务
即Kubernetes中的“CronJob”,定时任务是按照指定时间周期运行的短任务。使用场景为在某个固定时间点,为所有运行中的节点做时间同步。
镜像(Image)
镜像是一个模板,是容器应用打包的标准格式,用于新建Docker容器。或者说,Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
服务(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服务。
七层负载均衡(Ingress)
Ingress是Kubernetes集群中一种独立的资源,制定了集群外部访问流量的转发规则。用户可根据域名和路径对转发规则进行自定义,完成对访问流量的细粒度划分。

Ingress主要由Ingress资源和Ingress Controller组成:
•Ingress资源
一组基于域名或URL把请求转发到指定Service实例的访问规则,是Kubernetes的一种资源对象,通过接口服务实现增、删、改、查的操作。
•Ingress Controller
请求转发的执行器,用以实时监控资源对象Ingress、Service、End-point、Secret(主要是TLS证书和Key)、Node、ConfigMap的变化,解析Ingress定义的规则并负责将请求转发到相应的后端Service。
Ingress Controller在不同厂商之间的实现方式不同,根据负载均衡器种类的不同,可以将其分成ELB型和Nginx型。CKE支持上述两种Ingress Controller类型。
网络策略(NetworkPolicy)
网络策略提供了基于策略的网络控制,用于隔离应用并减少攻击面。它使用标签选择器模拟传统的分段网络,并通过策略控制它们之间的流量以及来自外部的流量。
配置项(Configmap)
配置项用于保存配置数据的键值对,可以用来保存单个属性,也可以用来保存配置文件。ConfigMap跟Secret很类似,但它可以更方便地处理不包含敏感信息的字符串。
密钥(Secret)
密钥解决了密码、Token和密钥等敏感数据的配置问题,而不需要把这些敏感数据暴露到镜像或者Pod Spec中。Secret可以以Volume或者环境变量的方式使用。
标签(Label)
标签其实就一对Key/Value,被关联到对象上,比如Pod。标签的使用我们倾向于能够标示对象的特殊特点,并且对用户而言是有意义的,但是标签对内核系统是没有直接意义的。
选择器(LabelSelector)
选择器是Kubernetes核心的分组机制,通过Label Selector客户端/用户能够识别一组有共同特征或属性的资源对象。
注解(Annotation)
注解与标签类似,也使用Key/Value键值对的形式进行定义。Label具有严格的命名规则,它定义的是Kubernetes对象的元数据(Metadata),并且用于Label Selector,Annotation则是用户任意定义的“附加”信息,以便于外部工具进行查找。
存储卷(PersistentVolume)
存储卷是集群之中的一块网络存储。跟Node一样,也是集群的资源。
存储声明(PersistentVolumeClaim)
存储声明是对存储卷的请求。PVC跟Pod类似,Pod消费Node资源,而PVC消费PV资源,Pod能够请求CPU和内存资源,而PVC请求特定大小和访问模式的数据卷。
弹性伸缩(Horizontal Pod Autoscaling)
弹性伸缩是Kubernetes中实现Pod水平自动伸缩的功能。Kubernetes集群可以通过Replication Controller的Scale机制完成服务的扩容或缩容,实现具有伸缩性的服务。
亲和性与反亲和性
在应用没有容器化之前,原先一个虚机上会装多个组件,进程间会有通信。但在做容器化拆分的时候,往往直接按进程拆分容器,比如业务进程一个容器,监控日志处理或者本地数据放在另一个容器,并且有独立的生命周期。这时如果他们分布在网络中两个较远的点,请求经过多次转发,性能会很差。
•亲和性
可以实现就近部署,增强网络能力实现通信上的就近路由,减少网络的损耗。如应用A与应用B频繁交互,则有必要利用亲和性让两个应用尽可能地靠近,甚至在一个节点上,以减少因网络通信而带来的性能损耗。
•反亲和性
主要是出于高可靠性考虑,尽量分散实例,某个节点故障的时候,对应用的影响只是N分之一或者只是一个实例。例如,当应用采用多副本部署时,则有必要采用反亲和性让各个应用实例打散分布在各个节点上,以提高HA。
节点亲和性(NodeAffinity)
通过选择标签的方式,可以限制Pod被调度到特定的节点上。
节点反亲和性(NodeAntiAffinity)
通过选择标签的方式,可以限制Pod不被调度到特定的节点上。
工作负载亲和性(PodAffinity)
指定工作负载部署在相同节点。可根据业务需求进行工作负载的就近部署,容器间通信就近路由,减少网络消耗。
工作负载反亲和性(PodAntiAffinity)
指定工作负载部署在不同节点。同个工作负载的多个实例反亲和部署,减少宕机影响,互相干扰的应用反亲和部署,避免干扰。
资源配额(Resource Quota)
资源配额是用来限制用户资源用量的一种机制。
资源限制(Limit Range)
默认情况下,K8S中所有容器都没有任何CPU和内存限制。LimitRange(简称limits)用来给Namespace增加一个资源限制,包括最小、最大和默认资源。在Pod新建时,强制执行使用limits的参数分配资源。
环境变量
环境变量是指容器运行环境中设定的一个变量。环境变量可以在工作负载部署后修改,为工作负载提供了极大的灵活性。
服务网格(Istio)
服务网格是一个提供连接、保护、控制以及观测功能的开放平台。