火山引擎容器服务( VKE)对容器业务相关的技术架构及核心组件提供托管服务,对于非托管组件以及运行在 VKE 集群中的应用,不当操作可能会导致业务故障。为了您云上业务的安全高效、稳定高可用,同时更好地预估和避免相关操作风险,在使用 VKE 前,请仔细阅读本文中的建议与注意事项。
VKE 托管了 Kubernetes 控制面组件,但是数据面组件仍然运行在用户的节点(ECS 实例)上,例如 CoreDNS、Ingress、Kube-Proxy、VPC-CNI、Kubelet 等,因此数据面组件运行的稳定性需要 VKE 与用户共同维护。
VKE 对数据面组件提供以下支持:
用户使用数据面组件时,请遵循以下建议:
下表为您推荐在创建集群前或创建集群时提升稳定性和高可用的配置建议。创建集群的操作详情,请参见 创建集群。
分类 | 稳定性操作建议 | 影响说明 |
---|---|---|
网络规划 | 创建集群前,结合业务场景提前规划集群子网、容器网段和 Service 网段,避免后期出现网段冲突,影响业务:
| 若集群所在子网或容器网段较小,可能会导致集群无法扩容、无法创建 Pod 等问题。 |
部署 | 创建集群时,结合业务场景选择合适的容器网络类型(Flannel、VPC-CNI)。详细说明,请参见 容器网络。 | 集群创建成功后,网络模型不可更改,请谨慎选择。 |
创建集群时,在 节点池配置 步骤中,会自动新建并绑定默认安全组,也支持根据业务需求设置自定义安全组规则。详细说明,请参见 安全组设置、集群访问规则。 | 安全组是重要的安全隔离手段,不当的安全策略配置可能会引起安全相关的隐患及服务连通性等问题。 | |
创建集群时,在 集群配置 步骤的 网络配置 中,建议选择多个(至少两个)可用区的子网。 | 选择多个可用区来创建集群可以提高 Kubernetes 控制面的可用性、容灾性、性能和事故处理能力等,有利于提高业务安全延续性和稳定性。 | |
可靠性 | 创建集群时建议添加独立数据盘,并选择挂载容器、镜像存储目录
| 没有独立数据盘可能会存在系统盘 I/O 负荷高等问题。 |
安全性 | 创建集群时系统默认开启 集群删除保护,请保持开启状态,防止通过控制台或 Open API 误删集群。 | 未开启删除保护的集群,可通过控制台或 Open API 直接进行删除,对于业务集群来说是一个不安全因素。 |
分类 | 稳定性操作建议 | 影响说明 |
---|---|---|
可靠性 | 建议在集群容器网络的子网所属可用区和节点池子网可用区保持一致。 | Pod 调度到节点上时,如果所在可用区没有可调度的节点,Pod 会启动失败。 |
集群容器网络配置的安全组,需要限制与安全组关联的 Pod 数量,建议不要超过 2000 个。 | 安全组默认支持关联最大 IP 数量为 2000,超过后新建 ENI 失败,Pod 也会启动失败。 |
分类 | 稳定性操作建议 | 影响说明 |
---|---|---|
部署 | 创建工作负载时建议设置 CPU 和内存的限制范围,提高业务的健壮性。 | 同一个节点上部署多个应用时,如果应用未设置资源限制,当应用出现异常导致资源泄露时,会造成其它应用由于无法分配所需资源而异常,且其监控信息将会出现误差。 |
可靠性 | 创建工作负载时可设置容器健康检查:存活检查 和 就绪检查。详细操作,请参见 创建无状态负载(其余工作负载配置与无状态负载相同)。 | 未配置容器健康检查,会导致用户业务出现异常时,Pod 因无法感知而导致不会自动重启恢复业务。最终将会出现 Pod 状态正常,但 Pod 中业务异常的现象。 |
创建服务时需要根据实际访问需求选择合适的访问方式,目前支持公网访问、仅在集群内访问、VPC 内网访问及主机端口访问四种方式。 | 选择不当的访问方式,可能会造成服务内外部访问逻辑的混乱和资源浪费。 | |
创建工作负载时,请根据自身业务合理设置实例个数(Pod 副本数),建议个数大于 1,同时也合理设置节点调度策略。 | 如设置单个 Pod 副本数,当节点异常或实例异常时会导致服务异常。为确保您的 Pod 能够调度成功,请确保您在设置调度规则后,节点有空余的资源用于容器的调度。 | |
工作负载如果需要高 I/O 操作,请对其挂载 PVC 相关存储。详细操作,请参见 存储管理。 | 避免 containerd 或 kubelet 的 Hang 问题导致节点处于 NotReady 状态。 |
使用容器服务过程中,您运行和部署相关功能模块可能存在高危操作,会对业务稳定性造成不同程度的影响。在使用前请仔细了解容器服务的高危操作及其影响。详细说明,请参见 高危操作及恢复方案。