• 文档
  • 控制台
  • 登录
  • 立即注册
    目前不支持用户自主注册,如需注册账号,请联系400-080-1100
容器服务CKS用户指南
最近更新时间:

1 产品介绍

1.1 什么是容器服务?

Kubernetes 是主流的开源容器编排引擎。为了让用户可以方便地在云上使用 Kubernetes 管理容器应用,中国电子云推出了基于原生 Kubernetes 的容器服务(CECloud Kubernetes Service,简称CKS),容器服务提供高度可扩展、高性能容器应用管理服务,支持企业级 Kubernetes 容器化应用的生命周期管理。借助容器服务,您可以在中国电子云上轻松部署、管理和扩展容器化应用程序。


1.2 产品优势

容器服务是基于业界主流的 Docker 和 Kubernetes 开源技术构建的容器服务,提供众多契合企业大规模容器集群场景的功能,在系统可靠性、高性能、开源社区兼容性等多个方面具有优势,满足企业在构建容器云方面的各种需求。

简单易用

• 通过 Web 界面一键创建 Kubernetes 集群,支持管理虚拟机节点。

• 一站式自动化部署和运维容器应用,整个生命周期都在容器服务内一站式完成。

• 通过 Web 界面轻松实现集群节点和工作负载的扩容和缩容,自由组合策略以应对多变的突发浪涌。

• 通过 Web 界面一键完成 Kubernetes 集群的升级。

高性能

基于中国电子云在计算、网络、存储等方面的行业技术积累,提供高性能容器服务,支撑业务的高并发、大规模场景。

安全可靠

• 高可靠:集群控制面支持 3 Master HA 高可用,当其中某个或者两个控制节点故障时,集群依然可用,从而保障业务高可用。

• 高安全:私有集群,Worker 节点完全由用户掌控,并深度整合中国电子云账号和Kubernetes RBAC 能力,支持用户为子用户设置不同的 RBAC 权限。

开放兼容

• 容器服务在 Docker 技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。

• 容器服务基于业界主流的 Kubernetes 实现,兼容 Kubernetes/Docker 社区原生版本,与社区的新版本保持紧密同步,兼容 Kubernetes API 和 Kubectl。


1.3 关联服务

容器服务在原生 Kubernetes 的基础上,加入或增强了资源管理、容器编排、应用管理、服务治理、租户管理、容器运维管理等功能,并可在提供的图形化控制台上进行方便的功能操作。

image.png


1.4 应用场景

1.4.1 基础设施与容器应用管理应用场景

CKS 集群支持管理 X86 资源池和 ARM 资源池,能方便的创建 Kubernetes 集群、部署您的容器化应用,以及方便的管理和维护。

价值

通过容器化改造,使应用部署资源成本降低,提升应用的部署效率和升级效率,可以实现升级时业务不中断以及统一的自动化运维。

优势

• 多种类型的容器部署

支持部署无状态工作负载、有状态工作负载、守护进程集、普通任务、定时任务等。

• 应用升级

支持替换升级、滚动升级(按比例、实例个数进行滚动升级);支持升级回滚。

• 弹性伸缩

支持节点和工作负载的弹性伸缩。


1.4.2 秒级弹性伸缩应用场景

• 电商客户遇到促销、限时秒杀等活动期间,访问量激增,需及时、自动扩展云计算资源。

• 视频直播客户业务负载变化难以预测,需要根据 CPU/内存使用率进行实时扩缩容。

• 游戏客户每天中午 12:00 及晚上 18:00-23:00 间需求增长,需要定时扩容。

价值

容器服务可根据用户的业务需求预设策略自动调整计算资源,使云服务器或容器数量自动随业务负载增长而增加,随业务负载降低而减少,保证业务平稳健康运行,节省成本。

优势

• 自由灵活

支持多种策略配置,业务流量达到扩容指标,秒级触发容器扩容操作。

• 高可用

自动检测伸缩组中实例运行状况,启用新实例替换不健康实例,保证业务健康可用。


1.4.3 微服务运行与治理应用场景

伴随着互联网技术的不断发展,各大企业的系统越来越复杂,传统的系统架构越来越不能满足业务的需求,取而代之的是微服务架构。微服务是将复杂的应用切分为若干服务,每个服务均可以独立开发、部署和伸缩;微服务和容器组合使用,可进一步简化微服务的交付,提升应用的可靠性和可伸缩性。

随着微服务的大量应用,其构成的分布式应用架构在运维、调试和安全管理等维度变得更加复杂,在管理微服务时,往往需要在业务代码中添加微服务治理相关的代码,导致开发人员不能专注于业务开发,还需要考虑微服务治理的解决方案,并且将解决方案融合到其业务系统中。

价值

容器服务深度集成微服务架构和应用服务网格,提供开箱即用的应用服务网格流量治理能力,用户无需修改代码,即可实现灰度发布、流量治理和流量监控能力。

优势

• 开箱即用

与容器服务无缝对接,一键开启后即可提供非侵入的智能流量治理解决方案。

• 策略化智能路由

无需修改代码,即可实现 HTTP、TCP 等服务连接策略和安全策略。

• 流量治理可视化

基于无侵入的监控数据采集,深度整合中国电子云 CAM 能力,提供实时流量拓扑、调用链等服务性能监控和运行诊断,构建全景的服务运行视图,可实时、一站式观测服务流量健康和性能状态。


1.4.4 DevOps 持续交付应用场景

当前 IT 行业发展日益快速,面对海量需求必须具备快速集成的能力。经过快速持续集成,才能保证不间断地补全用户体验,提升服务质量,为业务创新提供源源不断的动力。大量交付实践表明,不仅传统企业,甚至互联网企业都可能在持续集成方面存在研发效率低、工具落后、发布频率低等方面的问题,需要通过持续交付提升效率,降低发布可能的风险。

价值

容器服务搭配容器镜像服务提供 DevOps 持续交付能力,能够基于代码源自动完成代码编译、镜像构建、灰度发布、容器化部署,实现一站式容器化交付流程,并可对接已有 CI/CD,完成传统应用的容器化改造和部署。

优势

• 高效流程管理

更优的流程交互设计,让 CI/CD 管理更高效。

• 灵活的集成方式

提供丰富的接口便于与企业已有 CI/CD 系统进行集成,灵活适配企业的个性化诉求。

• 高性能

全容器化架构设计,任务调度更灵活,执行效率更高。


1.5 使用限制

使用容器服务 CKS 产品前,需要注意以下一些使用限制。

• 在创建 CKS 集群以后,暂不支持以下项:

- 变更集群的 VPC。

- 变更容器网络插件。

- 变更存储插件。

- 在不同命名空间下迁移应用。

• CKS 集群中 ECS 实例的限制如下:

- 由于 ECS 等底层依赖产品配额及库存限制,创建、扩容集群,或者自动弹性扩容集群时,可能只有部分节点创建成功。

- ECS 规格要求:ECS 镜像必须选择虚拟机 CKS 定制镜像,且系统盘需大于等于 60GB。

• 访问集群管控组件的流量限制如下:

当您通过 API 或者命令行访问集群管控组件(API Server)时,由于访问带宽的限制,如果您一次性读取大量的集群事件,有可能触发限流从而导致读取失败。


1.6 基本概念

容器服务提供 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 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

• 命名空间(Namespace):命名空间是对一组资源和对象的抽象整合。在同一个集群内可创建不同的命名空间,不同命名空间中的数据彼此隔离。使得它们既可以共享同一个集群的服务,也能够互不干扰。例如:

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

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

• 服务(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 是为进入集群的请求提供路由规则的集合,可以给service 提供集群外部访问的 URL、负载均衡、SSL 终止、HTTP 路由等。

• 网络策略(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 SelectorAnnotation 则是用户任意定义的“附加”信息,以便于外部工具进行查找。

• 存储卷(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):服务网格是一个提供连接、保护、控制以及观测功能的开放平台。


意见反馈

文档内容是否对您有帮助?

如您有其他疑问,您也可以通过在线客服来与我们联系探讨 在线客服

联系我们
回到顶部