- 最新动态
- 功能总览
-
服务公告
- 最新公告
- 产品变更公告
- 集群版本公告
-
漏洞公告
- 漏洞修复策略
- Kubernetes安全漏洞公告(CVE-2024-10220)
- Kubernetes安全漏洞公告(CVE-2024-9486,CVE-2024-9594)
- NVIDIA Container Toolkit容器逃逸漏洞公告(CVE-2024-0132)
- Linux CUPS服务RCE 漏洞公告(CVE-2024-47076、CVE-2024-47175、CVE-2024-47176、CVE-2024-47177)
- NGINX Ingress控制器验证绕过漏洞公告(CVE-2024-7646)
- Docker Engine授权插件AuthZ权限绕过漏洞公告(CVE-2024-41110)
- Linux内核权限提升漏洞公告(CVE-2024-1086)
- OpenSSH远程代码执行漏洞公告(CVE-2024-6387)
- Fluent Bit内存崩溃漏洞公告(CVE-2024-4323)
- runc systemd属性注入漏洞公告(CVE-2024-3154)
- runc漏洞(CVE-2024-21626)对CCE服务的影响说明
- Kubernetes安全漏洞公告(CVE-2022-3172)
- Linux Kernel openvswitch 模块权限提升漏洞预警(CVE-2022-2639)
- nginx-ingress插件安全漏洞预警公告(CVE-2021-25748)
- nginx-ingress插件安全漏洞预警公告(CVE-2021-25745,CVE-2021-25746)
- containerd容器进程权限提升漏洞公告(CVE-2022-24769)
- CRI-O容器运行时引擎任意代码执行漏洞(CVE-2022-0811)
- linux内核导致的容器逃逸漏洞公告(CVE-2022-0492)
- containerd镜像Volume非安全处理漏洞公告(CVE-2022-23648)
- Linux内核整数溢出漏洞(CVE-2022-0185)
- Linux Polkit 权限提升漏洞预警(CVE-2021-4034)
- Kubernetes subpath符号链接交换安全漏洞(CVE-2021- 25741)
- runc符号链接挂载与容器逃逸漏洞预警公告(CVE-2021-30465)
- Docker资源管理错误漏洞公告(CVE-2021-21285)
- NVIDIA GPU驱动漏洞公告(CVE-2021-1056)
- Sudo缓冲区错误漏洞公告(CVE-2021-3156)
- Kubernetes安全漏洞公告(CVE-2020-8554)
- Apache containerd安全漏洞公告(CVE-2020-15257)
- Docker Engine输入验证错误漏洞公告(CVE-2020-13401)
- Kubernetes kube-apiserver输入验证错误漏洞公告(CVE-2020-8559)
- Kubernetes kubelet资源管理错误漏洞公告(CVE-2020-8557)
- Kubernetes kubelet和kube-proxy授权问题漏洞公告(CVE-2020-8558)
- 修复Kubernetes HTTP/2漏洞公告
- 修复Linux内核SACK漏洞公告
- 修复Docker操作系统命令注入漏洞公告(CVE-2019-5736)
- 全面修复Kubernetes权限许可和访问控制漏洞公告(CVE-2018-1002105)
- 修复Kubernetes Dashboard安全漏洞公告(CVE-2018-18264)
-
产品发布记录
-
集群版本发布记录
- Kubernetes版本策略
-
Kubernetes版本发布记录
- Kubernetes 1.31版本说明
- Kubernetes 1.30版本说明
- Kubernetes 1.29版本说明
- Kubernetes 1.28版本说明
- Kubernetes 1.27版本说明
- Kubernetes 1.25版本说明
- Kubernetes 1.23版本说明
- (停止维护)Kubernetes 1.21版本说明
- (停止维护)Kubernetes 1.19版本说明
- (停止维护)Kubernetes 1.17版本说明
- (停止维护)Kubernetes 1.15版本说明
- (停止维护)Kubernetes 1.13版本说明
- (停止维护)Kubernetes 1.11版本说明
- (停止维护)Kubernetes 1.9及之前版本说明
- 补丁版本发布记录
- 操作系统镜像发布记录
-
插件版本发布记录
- CoreDNS域名解析插件版本发布记录
- CCE容器存储插件(Everest)版本发布记录
- CCE节点故障检测插件版本发布记录
- Kubernetes Dashboard插件版本发布记录
- CCE集群弹性引擎版本发布记录
- NGINX Ingress控制器插件版本发布记录
- Kubernetes Metrics Server插件版本发布记录
- CCE容器弹性引擎插件版本发布记录
- CCE突发弹性引擎(对接CCI)插件版本发布记录
- CCE AI套件(NVIDIA GPU)版本发布记录
- CCE AI套件(Ascend NPU)版本发布记录
- Volcano调度器版本发布记录
- CCE密钥管理(对接 DEW)插件版本发布记录
- CCE容器网络扩展指标插件版本发布记录
- 节点本地域名解析加速插件版本发布记录
- 云原生监控插件版本发布记录
- 云原生日志采集插件版本发布记录
- 容器镜像签名验证插件版本发布记录
- Grafana插件版本发布记录
- OpenKruise插件版本发布记录
- Gatekeeper插件版本发布记录
- 容器垂直弹性引擎版本发布记录
- CCE集群备份恢复插件版本发布记录(停止维护)
- Kubernetes Web终端版本发布记录(停止维护)
- Prometheus插件版本发布记录(停止维护)
-
集群版本发布记录
- 产品介绍
- 计费说明
- Kubernetes基础知识
- 快速入门
-
用户指南
- 高危操作一览
-
集群
- 集群概述
-
集群版本发布说明
-
Kubernetes版本发布记录
- Kubernetes 1.31版本说明
- Kubernetes 1.30版本说明
- Kubernetes 1.29版本说明
- Kubernetes 1.28版本说明
- Kubernetes 1.27版本说明
- Kubernetes 1.25版本说明
- Kubernetes 1.23版本说明
- (停止维护)Kubernetes 1.21版本说明
- (停止维护)Kubernetes 1.19版本说明
- (停止维护)Kubernetes 1.17版本说明
- (停止维护)Kubernetes 1.15版本说明
- (停止维护)Kubernetes 1.13版本说明
- (停止维护)Kubernetes 1.11版本说明
- (停止维护)Kubernetes 1.9及之前版本说明
- 补丁版本发布记录
-
Kubernetes版本发布记录
- 购买集群
- 连接集群
- 管理集群
-
升级集群
- 升级集群的流程和方法
- 升级前须知
- 升级后验证
- 集群跨版本业务迁移
-
升级前检查异常问题排查
- 升级前检查项
- 节点限制检查异常处理
- 升级管控检查异常处理
- 插件检查异常处理
- Helm模板检查异常处理
- Master节点SSH连通性检查异常处理
- 节点池检查异常处理
- 安全组检查异常处理
- 残留待迁移节点检查异常处理
- K8s废弃资源检查异常处理
- 兼容性风险检查异常处理
- 节点上CCE Agent版本检查异常处理
- 节点CPU使用率检查异常处理
- CRD检查异常处理
- 节点磁盘检查异常处理
- 节点DNS检查异常处理
- 节点关键目录文件权限检查异常处理
- 节点Kubelet检查异常处理
- 节点内存检查异常处理
- 节点时钟同步服务器检查异常处理
- 节点OS检查异常处理
- 节点CPU数量检查异常处理
- 节点Python命令检查异常处理
- ASM网格版本检查异常处理
- 节点Ready检查异常处理
- 节点journald检查异常处理
- 节点干扰ContainerdSock检查异常处理
- 内部错误异常处理
- 节点挂载点检查异常处理
- K8s节点污点检查异常处理
- everest插件版本限制检查异常处理
- cce-hpa-controller插件限制检查异常处理
- 增强型CPU管理策略检查异常处理
- 用户节点组件健康检查异常处理
- 控制节点组件健康检查异常处理
- K8s组件内存资源限制检查异常处理
- K8s废弃API检查异常处理
- 节点NetworkManager检查异常处理
- 节点ID文件检查异常处理
- 节点配置一致性检查异常处理
- 节点配置文件检查异常处理
- CoreDNS配置一致性检查异常处理
- 节点Sudo检查异常处理
- 节点关键命令检查异常处理
- 节点sock文件挂载检查异常处理
- HTTPS类型负载均衡证书一致性检查异常处理
- 节点挂载检查异常处理
- 节点paas用户登录权限检查异常处理
- ELB IPv4私网地址检查异常处理
- 检查历史升级记录是否满足升级条件
- 检查集群管理平面网段是否与主干配置一致
- GPU插件检查异常处理
- 节点系统参数检查异常处理
- 残留packageversion检查异常处理
- 节点命令行检查异常处理
- 节点交换区检查异常处理
- NGINX Ingress控制器插件升级检查异常处理
- 云原生监控插件升级检查异常处理
- Containerd Pod重启风险检查异常处理
- GPU插件关键参数检查异常处理
- GPU/NPU Pod重建风险检查异常处理
- ELB监听器访问控制配置项检查异常处理
- Master节点规格检查异常处理
- Master节点子网配额检查异常处理
- 节点运行时检查异常处理
- 节点池运行时检查异常处理
- 检查节点镜像数量异常处理
- OpenKruise插件兼容性检查异常处理
- Secret落盘加密特性兼容性检查异常处理
- Ubuntu内核与GPU驱动兼容性提醒
- 排水任务检查异常处理
- 节点镜像层数量异常检查
- 检查集群是否满足滚动升级条件
- 轮转证书文件数量检查
- Ingress与ELB配置一致性检查
- 集群网络组件的NetworkPolicy开关检查
- 集群与节点池配置管理检查
- Master节点时区检查
- 集群管理最佳实践
- 节点
- 节点池
- 工作负载
- 调度
-
网络
- 网络概述
- 容器网络
-
服务(Service)
- 服务概述
- 集群内访问(ClusterIP)
- 节点访问(NodePort)
-
负载均衡(LoadBalancer)
- 创建负载均衡类型的服务
- 使用Annotation配置负载均衡类型的服务
- 为负载均衡类型的Service配置HTTP/HTTPS协议
- 为负载均衡类型的Service配置服务器名称指示(SNI)
- 为负载均衡类型的Service配置跨集群的后端
- 为负载均衡类型的Service配置HTTP/2
- 为负载均衡类型的Service配置HTTP/HTTPS头字段
- 为负载均衡类型的Service配置超时时间
- 为负载均衡类型的Service配置TLS
- 为负载均衡类型的Service配置gzip数据压缩
- 为负载均衡类型的Service配置黑名单/白名单访问策略
- 为负载均衡类型的Service指定多个端口配置健康检查
- 为负载均衡类型的Service配置pass-through能力
- 为负载均衡类型的Service配置获取客户端IP
- 为负载均衡类型的Service配置自定义EIP
- 为负载均衡类型的Service配置区间端口监听
- 通过ELB健康检查设置Pod就绪状态
- 健康检查使用UDP协议的安全组规则说明
- DNAT网关(DNAT)
- Headless Service
-
路由(Ingress)
- 路由概述
- ELB Ingress和Nginx Ingress对比
-
ELB Ingress管理
- 通过控制台创建ELB Ingress
- 通过Kubectl命令行创建ELB Ingress
- 用于配置ELB Ingress的注解(Annotations)
-
ELB Ingress高级配置示例
- 为ELB Ingress配置HTTPS证书
- 更新ELB Ingress的HTTPS证书
- 为ELB Ingress配置服务器名称指示(SNI)
- 为ELB Ingress配置多个转发策略
- 为ELB Ingress配置HTTP/2
- 为ELB Ingress配置HTTPS协议的后端服务
- 为ELB Ingress配置GRPC协议的后端服务
- 为ELB Ingress配置超时时间
- 为ELB Ingress配置慢启动持续时间
- 为ELB Ingress配置灰度发布
- 为ELB Ingress配置黑名单/白名单访问策略
- 为ELB Ingress配置多个监听端口
- 为ELB Ingress配置HTTP/HTTPS头字段
- 为ELB Ingress配置gzip数据压缩
- 为ELB Ingress配置URL重定向
- 为ELB Ingress配置Rewrite重写
- 为ELB Ingress配置HTTP重定向到HTTPS
- 为ELB Ingress配置转发规则优先级
- 为ELB Ingress配置自定义Header转发策略
- 为ELB Ingress配置自定义EIP
- 为ELB Ingress配置跨域访问
- 为ELB Ingress配置高级转发规则
- 为ELB Ingress配置高级转发动作
- ELB Ingress转发策略优先级说明
- 多个Ingress使用同一个ELB对外端口的配置说明
- Nginx Ingress管理
- 自建Nginx Ingress迁移到ELB Ingress
- DNS
- 集群网络配置
- 容器如何访问VPC内部网络
- 从容器访问公网
- 网络管理最佳实践
- 存储
- 弹性伸缩
- 云原生观测
- 云原生成本治理
- 命名空间
- 配置项与密钥
- 插件
- 模板(Helm Chart)
- 权限
- 配置中心
- 存储管理-Flexvolume(已弃用)
-
最佳实践
- CCE最佳实践汇总
- 容器应用部署上云CheckList
- 容器化改造
- 集群备份恢复
- 迁移
- DevOps
- 容灾
- 安全
- 弹性伸缩
- 监控
- 集群
-
网络
- 集群网络地址段规划实践
- 集群网络模型选择及各模型区别
- CCE集群实现访问跨VPC网络通信
- 使用VPC和云专线实现容器与IDC之间的网络通信
- 自建IDC与CCE集群共享域名解析
- 通过负载均衡配置实现会话保持
- 不同场景下容器内获取客户端源IP
- 通过配置容器内核参数增大监听队列长度
- 为负载均衡类型的Service配置pass-through能力
- 从Pod访问集群外部网络
- 通过模板包部署Nginx Ingress Controller
- CoreDNS配置优化实践
- CCE Turbo配置容器网卡动态预热
- 集群通过企业路由器连接对端VPC
- 在VPC网络集群中访问集群外地址时使用Pod IP作为客户端源IP
- 存储
- 容器
- 权限
- 发布
- 批量计算
- API参考
- SDK参考
- 场景代码示例
-
常见问题
- 高频常见问题
- 计费类
- 集群
-
节点
- 节点异常问题排查
- 节点创建
-
节点运行
- 集群可用但节点状态为“不可用”如何解决?
- CCE集群中的节点无法远程登录,如何排查解决?
- 如何重置CCE集群中节点的密码?
- 如何收集CCE集群中节点的日志?
- 如何解决yum update升级操作系统导致的容器网络不可用问题?
- Node节点vdb盘受损,通过重置节点仍无法恢复节点?
- CCE集群节点中安装kubelet的端口主要有哪些?
- 如何配置Pod使用GPU节点的加速能力?
- 容器使用SCSI类型云硬盘偶现IO卡住如何解决?
- docker审计日志量过大影响磁盘IO如何解决?
- thinpool磁盘空间耗尽导致容器或节点异常时,如何解决?
- CCE节点上监听的端口列表
- GPU节点使用nvidia驱动启动容器排查思路
- CCE节点NTP时间不同步如何解决?
- Containerd节点业务容器标准输出日志写入过快导致节点数据盘使用率过高
- 为什么kubectl top命令查看节点内存使用超过100%?
- CCE节点事件中一直出现“镜像回收失败”告警如何解决?
- 规格配置变更
- 操作系统问题说明
- 节点池
- 工作负载
-
网络管理
-
网络异常问题排查
- 工作负载网络异常时,如何定位排查?
- 负载均衡类型Service异常问题排查
- 集群内部无法使用ELB地址访问负载
- 集群外部访问Ingress异常
- CCE集群中域名解析失败
- 为什么访问部署的应用时浏览器返回404错误码?
- 为什么容器无法连接互联网?
- VPC的子网无法删除,怎么办?
- 如何修复出现故障的容器网卡?
- 节点无法连接互联网(公网),如何排查定位?
- 如何解决VPC网段与容器网络冲突的问题?
- ELB四层健康检查导致java报错:Connection reset by peer
- Service事件:Have no node to bind,如何排查?
- 为什么登录虚拟机VNC界面会间歇性出现Dead loop on virtual device gw_11cbf51a, fix it urgently?
- 集群节点使用networkpolicy概率性出现panic问题
- 节点远程登录界面(VNC)打印较多source ip_type日志问题
- 使用IE浏览器访问nginx-ingress出现重定向308无法访问
- NGINX Ingress控制器插件升级导致集群内Nginx类型的Ingress路由访问异常
- 负载均衡型Service更新出现错误:Quota exceeded for resources: members_per_pool
- ELB Ingress出现告警:Invalid input for rules
- 为ELB Ingress配置了HTTPS证书后访问异常的原因有哪些?
- 网络规划
- 安全加固
- 网络指导
-
网络异常问题排查
-
存储管理
- 如何扩容容器的存储空间?
- CCE支持的存储在持久化和多节点挂载方面的有什么区别?
- 创建CCE节点时可以不添加数据盘吗?
- CCE集群中的EVS存储卷被删除或者过期后是否可以恢复?
- 公网访问CCE部署的服务并上传OBS,为何报错找不到host?
- Pod接口ExtendPathMode: PodUID如何与社区client-go兼容?
- 创建存储卷失败如何解决?
- CCE容器云存储PVC能否感知底层存储故障?
- 通用文件存储(SFS 3.0)在OS中的挂载点修改属组及权限报错
- 无法使用kubectl命令删除PV或PVC
- 删除挂载了云存储的Pod时提示target is busy
- 无法自动创建包周期的云硬盘存储卷
- 误卸载存储池的磁盘后如何恢复
- 删除动态创建的PVC之后,底层存储依旧残留
- 命名空间
-
模板插件
- 插件异常问题排查
- 集群安装nginx-ingress插件失败,一直处于创建中?
- NPD插件版本过低导致进程资源残留问题
- 模板格式不正确,无法删除模板实例?
- CCE是否支持nginx-ingress?
- 插件安装失败,提示The release name is already exist如何解决?
- 创建或升级实例失败,提示rendered manifests contain a resource that already exists
- kube-prometheus-stack插件实例调度失败如何解决?
- 上传模板失败如何解决?
- 如何根据集群规格调整插件配额?
- NGINX Ingress控制器插件处于Unknown状态时卸载残留
- NGINX Ingress控制器插件升级后无法使用TLS v1.0和v1.1
- API&kubectl
- 域名DNS
- 镜像仓库
- 权限
- 相关服务
- 配置参考
- 视频帮助
- 文档下载
- 通用参考
链接复制成功!
CCE集群高可用推荐配置
为了保证应用可以稳定可靠的运行在Kubernetes里,本文介绍构建Kubernetes集群时的推荐配置。
类型 |
说明 |
高可靠配置建议 |
---|---|---|
集群控制面 |
CCE是一项托管式的Kubernetes服务,集群控制面(即控制节点)无需由用户进行运维,您可以通过一些集群配置来提高集群整体的稳定性和可靠性。 |
|
集群数据面 |
在Kubernetes集群中,数据面由工作节点组成,这些节点可以运行应用程序容器并处理网络流量。在使用CCE过程中,数据面的节点需要您自行运维。为实现高可靠目标,您需要保证数据面的可扩展性及可修复性,并及时关注关键组件的运行状态。 |
|
应用层面 |
如果您希望应用程序始终可用,尤其是在流量高峰期间确保您的应用程序和服务不间断地运行,您需要通过可扩展且有弹性的方式运行应用,并及时关注应用的运行状态。 |
集群Master节点多可用区
华为云支持多区域(Region),每个区域下又有不同的可用区(AZ,Availability Zone)。可用区是一个或多个物理数据中心的集合,有独立的风火水电。一个Region中的多个AZ间通过高速光纤相连,以满足用户跨AZ构建高可用性系统的需求。
创建集群时,您可以设置集群的高可用模式,并选择控制节点的分布方式。控制节点默认尽可能随机分布在不同可用区以提高容灾能力 。
- 随机分配:通过把控制节点随机创建在不同的可用区中实现容灾。
- 自定义:自定义选择每台控制节点的位置。
- 主机:通过把控制节点创建在相同可用区下的不同主机中实现容灾。
- 自定义:用户自行决定每台控制节点所在的位置。

集群网络选择
- 集群网络模型选择:CCE支持云原生网络2.0、VPC网络、容器隧道网络模型。不同的网络模型存在性能和功能各方面的差异,请合理选择,详情请参见集群网络模型。
- VPC选择:如果您的应用需要连接其他云服务如RDS数据库等,则需要考虑将相关服务创建在同一个VPC中,因为VPC间网络是相互隔离的。如果您已经创建好实例,也可以将VPC之间通过对等连接进行互通。
- 容器网段选择:容器网络的网段不能设置太小,如果太小会导致可创建的节点数量受限。
- 对于VPC网络模型的集群来说,如果容器网络的网段掩码是/16,那么就有256*256个地址,如果每个节点预留的Pod数量上限是128,则最多可以支持512个节点。
- 对于容器隧道网络模型的集群来说,如果容器网络的网段掩码是/16,那么就有256*256个地址,节点从容器网段中一次分配的IP网段默认为16,则最多可创建节点数量为65536/16=4096。
- 对于云原生网络2.0模型的集群来说,容器网段为VPC的子网,容器数量则取决于选择的子网大小。
- 服务网段选择:服务网段决定集群中Service资源的上限,调整该网段需要根据实际需求进行评估,创建后不可修改,请勿设置过小的服务网段。
关于集群网络地址段的选择详情,可参见集群网络地址段规划实践。
服务转发模式
kube-proxy是Kubernetes集群的关键组件,负责Service和其后端容器Pod之间进行负载均衡转发。在使用集群时,您需要考虑服务转发模式潜在的性能问题。
CCE当前支持iptables和IPVS两种服务转发模式,各有优缺点。
- IPVS:吞吐更高,速度更快的转发模式。适用于集群规模较大或Service数量较多的场景。
- iptables:社区传统的kube-proxy模式。适用于Service数量较少或客户端会出现大量并发短连接的场景。当集群中超过1000个Service时,可能会出现网络延迟的情况。
关注配额限制
CCE支持设置配额限制,您设置云服务级别和集群级别的资源数量上限,以防止您过度意外使用资源。在构建创建应用时,应考虑这些限制值并定期审视,防止在应用运行过程中出现配额不足的瓶颈导致扩缩容失败。
- 云服务配额:使用CCE时也会使用其他云服务,包括弹性云服务器、云硬盘、虚拟私有云、弹性负载均衡、容器镜像服务等。如果当前资源配额限制无法满足使用需要,您可以提交工单申请扩大配额。
- 集群配额:集群中支持设置命名空间的配额,可限制命名空间下创建某一类型对象的数量以及对象消耗计算资源(CPU、内存)的总量,详情请参见设置资源配额及限制。
监控Master指标
监控控制节点(Master节点)的指标可以帮助您深入了解控制节点性能并识别问题,运行状况不佳的控制节点可能会损害应用的可靠性。
CCE支持对Master节点的kube-apiserver、kube-controller、kube-scheduler、etcd-server组件进行监控,您需要在集群中安装云原生监控插件。通过grafana插件,您可以使用Kubernetes监控概述仪表盘来可视化和监控 Kubernetes API服务器请求以及延迟和etcd延迟指标。
在集群中自建Prometheus的场景,您可以手动添加指标,详情请参见Master节点组件指标监控。
节点数据盘分区及大小
节点第一块数据盘默认供容器运行时及kubelet组件使用,其剩余的容量大小会影响镜像下载和容器启动及运行,数据盘的分配详情请参见数据盘空间分配说明。
该数据盘默认大小为100G,您也可以根据需求调整该数据盘大小。由于镜像、系统日志、应用日志都保存在数据盘上,您需要考虑每个节点上要部署的Pod数量,每个Pod的日志大小、镜像大小、临时数据,再加上一些系统预留的值,详情请参考选择合适的节点数据盘大小。
运行npd
工作节点中的故障可能会影响应用程序的可用性。npd插件是一款监控集群节点异常事件的插件,帮助您及时感知节点上可能存在的异常并及时处理。您也可以对npd插件的故障检查项进行自定义配置,包括检查的目标节点、检查周期、触发阈值等,详情请参见节点故障检测策略。
配置DNS缓存
当集群中的DNS请求量增加时,CoreDNS将会承受更大的压力,可能会导致如下影响:
- 延迟增加:CoreDNS需要处理更多的请求,可能会导致DNS查询变慢,从而影响业务性能。
- 资源占用率增加:为保证DNS性能,CoreDNS往往需要更高规格的配置。
为了避免DNS延迟的影响,可以在集群中部署NodeLocal DNSCache来提升服务发现的稳定性和性能。NodeLocal DNSCache会在集群节点上运行DNS缓存代理,所有注入DNS配置的Pod都会使用节点上运行的DNS缓存代理进行域名解析,而不是使用CoreDNS服务,以此来减少CoreDNS服务的压力,提高集群DNS性能。
您可以安装node-local-dns插件部署NodeLocal DNSCache,详情请参见使用NodeLocal DNSCache提升DNS性能。
合理部署CoreDNS
建议您在部署CoreDNS时,将CoreDNS实例分布在不同可用区、不同节点上,尽可能避免单节点、单可用区故障。
且CoreDNS所运行的节点应避免CPU、内存打满,否则会影响域名解析的QPS和响应延迟。
更多关于合理配置CoreDNS的详情,请参见合理配置CoreDNS。
运行多个实例
如果您的整个应用程序在独立的Pod中运行,那么如果该Pod出现异常,应用程序将不可用。请使用Deployment或其他类型的副本集来部署应用,每当Pod失败或被终止,控制器会自动重新启动一个与之相同的新Pod,以确保指定数量的Pod始终运行。
同时,在创建工作负载时,您可以指定实例数量大于2。如果一个实例发生故障,剩余的实例仍将运行,直到Kubernetes自动创建另一个Pod来弥补损失。此外,您还可以使用使用HPA+CA实现工作负载和节点联动弹性伸缩根据工作负载需求自动进行伸缩。
使用容器隔离进程
容器可以提供进程级别的隔离,每个容器都有自己的文件系统、网络和资源分配,可以避免不同进程之间相互干扰,也可以避免恶意进程的攻击和数据泄露。使用容器隔离进程可以提高应用程序的可靠性、安全性和可移植性。
如果有几个进程需要协同工作,可以在一个Pod创建多个容器,以便它们可以共享相同的网络、存储卷和其他资源。例如init容器,init容器会在主容器启动之前运行,可以用于完成一些初始化任务,比如配置环境变量、加载数据库或数据存储以及拉取Git库等操作。
但需要注意的是,一个Pod中存在多个容器时会共享同一个Pod的生命周期。因此如果其中一个容器异常,整个Pod将被重新启动。
设置资源配额
为所有工作负载配置和调整资源请求/限制
当在一个节点上调度了太多的Pod时,会导致节点负载太高,无法正常对外提供服务。
为避免上述问题,在Kubernetes中部署Pod时,您可以指定这个Pod需要Request及Limit的资源,Kubernetes在部署这个Pod的时候,就会根据Pod的需求找一个具有充足空闲资源的节点部署这个Pod。下面的例子中,声明Nginx这个Pod需要1核CPU,1024M的内存,运行中实际使用不能超过2核CPU和4096M内存。
Kubernetes采用静态资源调度方式,对于每个节点上的剩余资源,它是这样计算的:节点剩余资源=节点总资源-已经分配出去的资源,并不是实际使用的资源。如果您自己手动运行一个很耗资源的程序,Kubernetes并不能感知到。
另外所有Pod上都要声明resources。对于没有声明resources的Pod,它被调度到某个节点后,Kubernetes也不会在对应节点上扣掉这个Pod使用的资源。可能会导致节点上调度过去太多的Pod。
应用多可用区部署
您可以通过在多个可用区的节点上运行Pod,以避免应用受单个可用区故障的影响。
在创建节点时,您可以手动指定节点的可用区。

在部署应用时,您可以为Pod设置反亲和性规则,实现跨多个可用区调度Pod,详情请参见在CCE中实现应用高可用部署。示例如下:
apiVersion: apps/v1 kind: Deployment metadata: name: web-server labels: app: web-server spec: replicas: 4 selector: matchLabels: app: web-server template: metadata: labels: app: web-server spec: containers: - name: web-app image: nginx imagePullSecrets: - name: default-secret affinity: podAntiAffinity: # 工作负载反亲和 preferredDuringSchedulingIgnoredDuringExecution: # 表示尽量满足规则,否则Pod数超过可用区数量时会无法调度 - podAffinityTerm: labelSelector: # Pod标签匹配规则,设置Pod与自身标签反亲和 matchExpressions: - key: app operator: In values: - web-server topologyKey: topology.kubernetes.io/zone # 节点可用区拓扑域 weight: 100
您也可以使用Pod的拓扑分布约束实现多可用区部署。
系统插件多可用区部署
与应用多可用区部署类似,CCE系统核心插件(如CoreDNS、Everest等)的无状态应用(Deployment)实例支持多种多可用区部署模式,满足不同场景下的用户诉求。
部署模式 |
配置说明 |
使用说明 |
推荐配置场景 |
---|---|---|---|
优先模式 |
插件实例配置Pod间弱反亲和策略,拓扑域为可用区级别(topology.kubernetes.io/zone),反亲和类型为preferredDuringSchedulingIgnoredDuringExecution。 |
尽量将插件实例调度到不同可用区,但当部分可用区资源不足时,插件实例有可能调度到其他资源充足的可用区,不能完全保证实例分布在多个不同可用区。 |
对多可用区容灾没有强制要求,可使用默认的优先模式。 |
强制模式 |
插件实例配置Pod间强反亲和策略,拓扑域为可用区级别(topology.kubernetes.io/zone),反亲和类型为requiredDuringSchedulingIgnoredDuringExecution。 |
限制每个可用区最多部署一个同一组件实例,实际能够运行的实例数无法超过当前集群下节点的可用区数量,同时由于限制单个可用区最多一个实例,实例所在节点的故障后,故障实例无法自动迁移到同可用区下的其他节点。 |
强制模式一般用于可用区数量后续有变动场景,避免所有实例都提前调度到当前的可用区节点上。 |
均分模式 |
插件实例配置Pod拓扑分布约束,拓扑域为可用区级别(topology.kubernetes.io/zone),强限制不同拓扑域间的实例差不超过1,以达到插件实例在不同可用区间实现均衡分布效果。 |
该模式的效果介于优先模式和强制模式之间,既能达到实例在不同可用区部署要求,同时也支持实例数大于可用区场景,实现单可用区部署多实例。使用均分模式时需提前规划好各可用区节点资源,保证各可用区有足够的节点资源供实例部署(当单可用区的插件实例大于1时,建议各可用区可供插件实例可调度的节点数超过该可用区下实际插件实例数量1个以上),避免部分可用区节点资源不足阻塞插件实例的部署及更新过程中的整体调度。 |
均分模式在容灾要求较高场景推荐使用。 |
设置容器健康检查
Kubernetes对处于异常运行状态的Pod存在自动重启机制,可以避免一些Pod异常导致的服务中断问题,但是有的时候,即使Pod处于正常Running状态也不代表这个Pod能正常提供服务。例如,Pod里面的进程可能发生了死锁,但Pod的状态依然是Running,所以Kubernetes也不会自动重启这个Pod。因此,可以Pod上配置存活探针(Liveness Probe),探测Pod是否真的存活。如果存活探针发现了问题,Kubernetes会重启Pod。
同时,您也可以配置就绪探针(Readiness Probe),用于探测Pod是不是可以正常对外提供服务。应用在启动过程中可能会需要一些时间完成初始化,在这个过程中是没法对外提供服务的,为Pod添加过就绪探针后,当检测到Pod就绪时才会允许Service将请求转给Pod。当Pod出现问题的时候,就绪探针可以避免新流量继续转发到这个Pod。
启动探针(Startup Probe)用于探测应用程序容器启动是否成功。配置了启动探针后可以控制容器在启动成功后再进行存活性和就绪检查, 确保这些存活、就绪探针不会影响应用程序的启动。 这可以用于对启动慢的容器进行存活性检测,避免它们在启动运行之前就被终止。
您可以在创建应用时配置上述探针,YAML示例如下:
apiVersion: v1 kind: Pod metadata: labels: test: liveness name: liveness-http spec: containers: - name: liveness image: nginx:alpine args: - /server livenessProbe: httpGet: path: /healthz port: 80 httpHeaders: - name: Custom-Header value: Awesome initialDelaySeconds: 3 periodSeconds: 3 readinessProbe: exec: command: - cat - /tmp/healthy initialDelaySeconds: 5 periodSeconds: 5 startupProbe: httpGet: path: /healthz port: 80 failureThreshold: 30 periodSeconds: 10
更多详情请参见设置容器健康检查。
自动弹性伸缩
弹性伸缩功能可以根据需求自动调整应用程序的实例数和节点数,可以在流量高峰期间快速扩容,并在业务低谷时进行缩容以节约资源与成本。
一般情况下,在流量高峰期间可能会出现两种类别的弹性伸缩:
- 工作负载伸缩:当使用Pod/容器部署应用时,通常会设置容器的申请/限制值来确定可使用的资源上限,以避免在流量高峰期无限制地占用节点资源。然而,这种方法可能会存在资源瓶颈,达到资源使用上限后可能会导致应用出现异常。为了解决这个问题,可以通过伸缩Pod的数量来分摊每个应用实例的压力。
- 节点伸缩:在增加Pod数量后,节点资源使用率可能会上升到一定程度,导致继续扩容出来的Pod无法调度。为解决这个问题,可以根据节点资源使用率伸缩节点数量,扩容Pod可以使用的资源。
关于实现自动弹性伸缩的详情请参见使用HPA+CA实现工作负载和节点联动弹性伸缩。
日志监控告警
- 日志
- 监控
- 控制面指标:控制面指标监控有助于识别控制节点的问题风险,详情请参见监控Master指标。
- 应用指标:CCE支持对集群中的应用程序进行全方位的监控。除了监控Kubernetes标准指标外,您还可以在应用程序中上报符合规范的自定义指标,以提高应用程序的可观测性,详情请参见监控概述。
- 告警
配合监控功能,针对指标添加告警规则可以在集群发生故障时能够及时发现问题并预警,协助您维护业务稳定性,详情请参见自定义告警配置。