首页 容器集群规划方案

容器集群规划方案

更新时间: 2024-04-02 14:09:57

多业务多组织企业如何规划ACK集群 同一个集群中的不同业务如何使用节点池隔离资源

方案概述

当客户基于Landing Zone方案做好账号划分后,面临如何合理规划账号及ACK集群的问题。

本方案会介绍多账号与ACK集群对应关系,以及多个业务共享ACK集群时,如何选择和隔离资源。

方案优势

合理规划账号架构,定义集群部署标准

基于Landing Zone推荐的多账号架构,企业可以合理规划各业务集群部署情况。方便业务未来更好地去使用云账号资源。

账号内业务并池,提升资源利用率

单个云账号内,尽量使用一个大的集群,做到业务并池,提升资源利用率。同时可以通过命名空间(namespace)、节点池(node pool)等机制做到应用之间隔离。

兼顾业务的特殊性

利用节点池的特性,为特殊需求的业务,提供独立的硬件资源,保证独立性。

客户场景

统一规划企业云上容器集群

场景描述

企业有多个业务或事业部,需要按不同业务线做好账号隔离。同时有部分业务线需要做容器化部署。需要合理规划容器集群。

适用客户

  • 计划使用多账号来规划业务组织企业
  • 计划使用容器服务企业

集群内资源隔离

场景描述

对于多租户部署在同一套容器服务集群,如何按不同应用做好资源隔离。

适用客户

  • 计划使用容器服务企业
  • 在同一套容器服务里面需要做资源逻辑隔离

客户案例

客户背景

某手机制造企业A,业务从AWS往Aliyun迁移。整个业务迁移过程是按不同业务线进行,比如搜索业务线、广告业务线。客户内部系统大部分都已经容器化。

客户需求

客户的业务是按照不同大业务线来分拆账号的,比如搜索、广告分别是单独的云账号。有些业务已经容器化需要部署容器集群。同一个业务账号内客户也希望能够按不同应用做逻辑隔离,将来在权限、分账等IT治理模块都能够提前做好设计。

实施方案

简要说明

  • 规划了几个非业务账号
    • 日志账号:用于统一收集各个业务账号内的操作日志。
    • 共享服务账号:用于配置CEN-TR、SSL证书、Aliyun dns等服务。
    • 运维账号:用于部署客户内部运维工具如Devops。
    • 安全账号:用于部署安全产品如:WAF、高防IP。
  • 每个业务账号内单独部署一套容器集群,从物理上做好隔离。
  • 每套集群上面按namespace规划不同应用,为后续的容器分账、权限打下基础。

客户收益

通过实施这套多账号容器集群规划方案,客户收益如下:

  • 使用资源目录产品,能够集中管理分散在不同业务团队内的账号。
  • 不同业务规划各自独立的容器集群,在财务、权限、资源等做到物理隔离。
  • 测试环境统一使用一套集群,能够有效降低成本。

方案架构

架构图

集群物理隔离

适合场景:当有多个独立团队或多个大的业务线时候,每个独立团队或业务线的量比较大并且归属在不同云账号内,推荐使用集群物理隔离。

这种部署方式带来的问题:会增加管理和财务开销,企业需要维护多个集群,并单独配置各套集群访问权限和分配权限,并且还需要为每套集群付费。

集群逻辑隔离

适合场景:使用逻辑隔离来分隔团队和项目。减少要部署的物理ACK集群数。

通过 Kubernetes 在同一集群中以逻辑方式隔离团队和不同业务。通过逻辑隔离来限定每个团队或业务所需资源, Kubernetes 命名空间创建逻辑隔离边界。

但这种方式也存在一些问题:由于不同业务在高可用及安全服务等级不一致,部署在同一个物理集群的不同业务会出现资源争抢情况。为了解决这种资源争抢问题,你将需要额外的计划来防止不同业务方影响其他业务的安全性和服务。

强制实施资源配额

适合场景:限制某个开发团队或项目使用的资源,推荐使用资源配额。

默认情况下,运行中的Pod可无限制的使用Node上的CPU和内存,这意味着任意一个Pod都可以无节制地使用集群的计算资源,某个命名空间的Pod可能会耗尽集群的资源。命名空间的一个重要的作用是充当一个虚拟的集群,用于多种工作用途,满足多用户的使用需求。因此,为命名空间配置资源额度是一种最佳实践。您可为命名空间配置包括CPU、内存、Pod数量等资源的额度。更多信息,请参见资源配额

使用排斥和容许提供专用节点

适合场景:限制资源密集型应用程序(例如Ingress控制器)对特定节点的访问。 将节点资源保留给需要它们的工作负荷使用,但不允许在节点上计划其他工作负荷。

比如当创建ACK集群时,可以部署支持GPU节点用于做大数据处理如机器学习(ML)。那这种节点就可以通过设置污点来分派给指定应用。

示例:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    env: test
spec:
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
  tolerations:
  - key: "example-key"
    operator: "Exists"
    effect: "NoSchedule"


具体ACK上面管理节点污点可以查看官方文档管理污点

产品费用及名词

产品费用

产品名称

产品说明

产品费用

资源目录(RD)

RD(Resource Directory,资源目录)是面向企业客户提供的一套多级账号和资源管理服务,使得企业IT团队可以轻松管理多个阿里云账号和集中化管理账号内的云资源。

免费,详情参见官网链接

容器集群(ACK)

阿里云容器服务Kubernetes版是全球首批通过Kubernetes一致性认证的服务平台,提供高性能的容器应用管理服务,支持企业级Kubernetes容器化应用的生命周期管理,让您轻松高效地在云端运行Kubernetes容器化应用。

收费,详情参见官网链接

名词解释

名称

说明

命名空间

在 Kubernetes 中,名字空间(Namespace) 提供一种机制,将同一集群中的资源划分为相互隔离的组。

标签(Label)

标签(Labels) 是附加到 Kubernetes 对象(比如 Pod)上的键值对。 标签旨在用于指定对用户有意义且相关的对象的标识属性,但不直接对核心系统有语义含义。

节点池

节点池是集群中具有相同配置的一组节点,节点池可以包含一个或多个节点。创建集群时指定的节点数和配置将成为默认节点池,您可以向集群添加其他不同大小和类型的节点池。您可以创建和升级节点池而不会影响整个集群。

更多容器服务与原生Kubernetes名词对照,可以参考官方链接

安全性

RAM权限

本方案涉及到多账号规划与搭建这块,推荐在资源管理主账号中通过云治理中心完成一键搭建,相应RAM子用户授予以下权限:

  • 授权范围整个云账号,然后选择权限策略。
  • 系统策略:从权限策略名称列表,选择需要的权限。

权限策略名称

说明

AliyunResourceDirectoryFullAccess

能够管理资源目录

AliyunGovernanceFullAccess

能够管理云治理中心

在业务账号中购买容器集群服务对应的RAM用户权限(支持STS)最小权限集合:

权限策略名称

说明

AliyunCSFullAccess

管理容器服务(CS)的权限

AliyunVPCReadOnlyAccess

只读访问专有网络(VPC)的权限

AliyunContainerRegistryReadOnlyAccess

只读访问容器镜像服务(ContainerRegistry)的权限

AliyunECSReadOnlyAccess

只读访问云服务器服务(ECS)的权限

注意事项

产品区别

ACK包含了专有版Kubernetes(Dedicated Kubernetes)、托管版Kubernetes(Managed Kubernetes)、Serverless Kubernetes三种形态。

比较项

专有版Kubernetes

托管版Kubernetes

Serverless Kubernetes

主要特点

您需要自行创建集群控制面(Master节点)及集群节点。

您只需创建集群节点,控制面由ACK创建并托管。

您无需创建集群控制面板及节点。

可以对集群基础设施进行更细粒度的控制,需要自行规划、维护、升级服务器集群。

简单、低成本、高可用,无需管理控制面。

无需管理任何节点,可直接启动应用程序。

收费方式

集群管理免费,但需要承担Master节点、Worker节点以及其他基础资源的费用。

  • 标准版:集群管理免费,但需要承担节点以及其他基础资源的费用。(不推荐给企业级客户
  • Pro版:按照集群数量方式收费。

按容器实例的使用资源量和时长(秒)计费。

应用场景

适用于所有场景。

适用于所有场景。

适用于批量任务、突发扩容,以及CI/CD测试。

用户画像

  • 成本相对不敏感
  • 懂Kubernetes
  • 有运维技术能力
  • 资源规划明确
  • 对集群控制面(Master节点)有定制需求
  • 可以完全自管集群
  • 期望降低成本
  • 更关注业务应用
  • Kubernetes刚上手
  • 减少Kubernetes运维投入
  • 不用维护集群控制面
  • 批量任务
  • 突发扩容
  • 开箱即用,用完即走
  • 零Kubernetes运维
  • 按量付费
  • 不用关心基础设施

产品限制

使用阿里云容器服务ACK产品前,需要注意相关产品使用限制。详细可以查看官方帮助

实施步骤

实施准备

完成多账号搭建

  • 已经为企业多业务组织规划好多账号体系,并且通过云治理中心完成多账号初始化搭建。

完成用户授权

  • 基于本方案推荐的用户授权范围与策略,完成用户授权。

完成集群选型及搭建

  • 结合企业自身业务特性及对成本、运维等维度的综合考量,已经确定使用哪种集群类型并完成在账号内购买或搭建。

操作步骤

分两种场景来编写部署过程。

  • 规划集群内命名空间、标签(Label)并完成各个命名空间限额。
  • 规划集群节点池容量及节点池规格选型。

场景一:规划集群内命名空间、标签(Label)并完成配额

Kubernetes 资源(例如 Pod 和部署)按逻辑分组到一个命名空间中,以划分 ACK 集群并限制创建、查看或管理资源的权限。 例如,可创建命名空间来分隔不同应用分组。

命名空间的命名规范可以参考如下表:

命名组成部分

说明

资源类型

表示 云资源类型的缩写。 此组件通常用作名称中的前缀或后缀。
示例:rgecs

业务部门

拥有资源所属的公司顶级部门。
示例:finmktgproductitcorp

应用程序或服务名称

资源所属的应用程序或服务的名称。
示例:navigatorbuytradeplatform

部署环境

资源支持的应用对应开发生命周期阶段。
示例:proddevqastagetest

区域

部署资源的 阿里云 区域。
示例:shanghai、shenzhen

创建命名空间并完成限额配置,具体可以参考官网

通过k8s的语法来创建带标签的POD:

apiVersion: v1
kind: Pod
metadata:
  name: label-demo
  labels:
    environment: dev
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.14.2
    ports:
    - containerPort: 80

场景二:规划集群节点池容量及节点池规格选型

建议:

  1. 如果集群内的应用没有特殊需求,建议部署在一个节点池内,这样所有应用共享一个大的资源池,可以提高资源利用率。
  2. 如果有些应用对资源有特殊要求:比如需要GPU资源、需要更高的稳定性不能和别的应用混合部署等,可以选择使用节点池来隔离应用的部署。ACK Pro单集群支持100个节点池,可以满足绝大部分的隔离需求。
  3. 节点池内机型选择一般遵照这几个原则:
    1. 选最新代的机型,比如现在的c7、g7等。
    2. 在满足集群高可用(一般是集群节点超过10个)需求的前提下,优先选择使用高规格的机器来提高单机部署密度,比如:集群总核数超过1k时,可以选择使用96~104C的机器来作为集群节点。
    3. 机器规格达到100C左右时,优先选择神龙服务器。
    4. 按照CPU和内存的配比选择计算型、通用型、内存型等机型,一般不选择共享型和带本地SSD的机型。

管理节点池,具体可以参考官网

相关内容