文章目录
- 前言
- CCE技术架构介绍
- CCE特性介绍
- CCE管理介绍
- CCE的实例管理方式
- 命名空间管理
- 节点标签管理
- 工作负载中的容器设置 - 基本信息
- 工作负载中的容器设置 - 生命周期
- 工作负载中的容器设置 - 健康检查
- 工作负载中的容器设置 - 环境变量
- 工作负载中的容器设置 - 数据存储
- 工作负载中的容器设置 - 安全设置
- 工作负载管理 - 基本信息
- 工作负载管理 - 无状态负载Deployment高级设置
- 工作负载管理 - 有状态负载StatefulSet高级设置
- 工作负载管理 - 有状态负载StatefulSet工作负载访问设置
- 工作负载管理 - 定时任务CronJob定时规则介绍
- 网络管理 - ClusterIP类型Service
- 网络管理 - NodePort类型Service
- 网络管理 - LoadBalancer类型Service
- 网络管理 - Ingress配置说明
- 网络管理 - NetworkPolicy配置说明
- 配置中心 - ConfigMap配置说明
- 配置中心 - Secret配置说明
- 弹性伸缩 - 工作负载伸缩
- 弹性伸缩 - 节点伸缩
- 缩略语
前言
- CCE是华为基于开源kubernetes进行商业加强后的企业级云原生产品,为用户提供托管式的服务,本章将主要介绍CCE的技术架构及相关的基础操作。
- 学完本课程后,您将能够:
- 了解华为CCE的架构
- 了解华为CCE的特性
- 掌握华为CCE的基本操作
CCE技术架构介绍
CCE:基于开源K8S技术的企业级容器服务
- 高可靠集群管理
- 支持单集群管理 2000节点
- 支持单集群多可用区高可用部署
- 提供管理面数据备份和容灾能力
- 鲲鹏容器
- 支持x86和鲲鹏集群混合管理,鲲鹏CPU NUMA亲和调度
- Kubernetes/docker 鲲鹏硬件适配:Golang加固优化,提高arm64多核下调度性能,针对容器高频率使用的系统调用进行加速调优
- 鲲鹏容器软硬一体化,性价比提升 30%
- 便捷运维
- 支持自动巡检,应用异常自动拉起,异常节点容器迁移
- 支持应用弹性伸缩,增强社区原生HPA,提供自研CustomedHPA,实现定时、自定义弹性策略
- 容器安全
- 提供企业应用的多租户管理和细粒度授权
- 支持审计日志
- 支持证书、秘钥管理,所有组件使用双向认证等措施保障集群安全
- 极速容器网络
- 丰富的容器网络组网选择
- 华为自研高性能容器网络
云容器引擎CCE关键特性
- 一站式部署和运维:一键创建Kubernetes集群,自动化部署、运维容器应用,整个生命周期都在容器服务内一站式完成
- 灵活的弹性伸缩策略:支持按性能、按时间、按周期的弹性伸缩策略,用户可自由组合策略以应对多变的突发浪涌
- IaaS资源深度整合:直接使用华为云ECS/BMS、网络(VPC/EIP/ELB/NAT)、存储(EVS/OBS/SFS)能力
- 兼容原生Kubernetes和Docker:紧跟社区,定期同步最新版本,兼容原生API和命令行
- 高可用业务不中断:集群控制面HA和跨AZ高可用,容器应用优雅伸缩,安全下线,保障业务不掉线
- 丰富的应用调度策略:支持多种亲和反亲和调度策略,用户可方便地根据应用特点在高性能和高可靠中找到平衡点
- 高性能大规模:
- 支持单集群2000节点
- 高性能容器网络
- 鲲鹏容器软硬一体化,提供极致性价比
CCE管理面部署逻辑图
- cluster-manager:该组件提供CCE集群/节点/节点池生命周期管理功能,包括集群创建,扩容,删除等。
- cluster-controller:该组件负责集群管理的异步任务,包括健康检查、IaaS 资源信息同步,垃圾回收等。
- cfe-apiserver:该组件提供k8s私有集群的请求转发以及封装容器存储管理功能。其中提供k8s私有集群的请求转发以支持k8s应用的生命周期管理。
- cam-apiserver:该组件提供Helm应用模板的生命周期管理功能,包括模板上传/下载,模板部署、升级等。
- cce-addonmgr:该组件提供插件的生命周期管理功能,包括插件的上次/下载,插件的安装、升级、卸载等。
- cert-manager :该组件签发集群证书。
- cce-ops :该组件提供集群数据备份、升级
CCE控制面及数据面逻辑图
- volcano:
- 大数据/AI业务调度
- 超分、重调度…
- 统一volcano收编
CCE的服务形态
- CCE的服务形态:提供租户独有的托管式容器集群
- 一个为客户提供独有的高性能、可扩展以及全场景覆盖的企业级容器应用管理平台:
- 租户独占集群,租户间完全隔离;
- 集群控制面租户不可见,托管式管理,减少租户运维成本;
- 可封装性和可扩展性强;
- 兼顾容器极速弹性伸缩能力;
CCE相关组件依赖关系
容器网络 - 容器隧道overlay
容器网络 - VPC网络
容器存储
容器存储选型参考
对比项 | 文件存储 | 块存储 | 对象存储 |
---|---|---|---|
使用方式 | 符合标准文件协议,用户可以将文件系统挂载给服务器,像使用本地文件目录一样 | 像使用传统服务器硬盘一样,用户可以对挂载到服务器上的块存储(硬盘)做格式化、创建文件系统等操作 | 具备标准Restful API接口,用户必须通过编程或第三方工具访问对象存储 |
共享方式 | 数据共享,支持多台服务器共享,多台服务器可挂载相同的文件系统,数据可以共享操作和访问 | 数据不共享,或特殊的数台服务器共享卷,每台服务器使用独立的块存储(硬盘),多服务器之间数据隔离 | 数据共享,设备无限制,服务器、嵌入式设备、IoT设备,所有调用相同路径,均可访问共享的对象存储数据 |
场景对比 | 企业办公OA、AI训练、门户网站、游戏、DevOps、容器微服务、渲染等场景 | 关系数据库、NoSQL数据库、ELK分布式日志搜索、企业办公应用、数据仓库、高性能计算等场景 | 互联网应用、OTT视频、视频监控、备份/归档、大数据/IoT等场景 |
容器场景使用说明 | 1、共享存储,可以同时为多个 Pod 提供共享存储服务,表示一个 PVC 可以同时被多个Pod使用。2、读写性能相对于对象存储OSS高 | 1、非共享存储,通过PV/PVC使用云盘时,一个云盘只能同时被一个Pod挂载。2、推荐使用有状态应用(StatefulSet)挂载使用云盘。无状态应用(Deployment)挂载云盘时Replica需要为1,不能保证挂载、卸载的优先顺序 | 1、共享存储,可以同时为多个 Pod 提供共享存储服务。2、适合于读文件场景。例如:读配置文件、视频、图片文件等场景。3、不擅长于写文件的应用场景。如果您的业务是将文件写入存储的场景,推荐使用文件存储 |
CCE弹性伸缩介绍
- 容器弹性伸缩:
- CPU/memory,自定义指标弹性
- 定时/周期弹性
- 节点弹性伸缩:
- 调度失败弹性
- 定时/周期弹性
- CPU/memory弹性
镜像跨region同步
CCE特性介绍
集群形态统一
CCE支持在同一集群内存在不同CPU架构、不同形态或者不同类型的资源
命名空间权限控制
- 命名空间权限是基于Kubernetes RBAC能力的授权,通过权限设置可以让不同的用户或用户组拥有操作不同Kubernetes资源的权限
- view:对全部或所选命名空间下大多数资源的只读权限
- edit:对全部或所选命名空间下多数资源的读写权限。当配置在全部命名空间时能力与运维权限一致
- admin:对全部命名空间下大多数资源的读写权限,对节点、存储卷,命名空间和配额管理的只读权限
- cluster-admin:对全部命名空间下所有资源的读写权限
镜像老化
支持用户设置老化规则,系统根据已定义的规则自动执行镜像老化操作
参数 | 说明 |
---|---|
规则类型 | 分为存活时间和版本数目:1、存活时间:设置该类型的老化规则后,留存时间超过指定时间的老旧镜像将被删除。2、版本数目:设置该类型的老化规则后,留存镜像超过指定值时,老旧镜像将被删除 |
保留天数 | 镜像留存的最大天数,可设置为1~365的整数。规则类型设置为“存活时间”时,需要配置此参数 |
保留数目 | 镜像留存的最大数目,可设置为1~1000的整数。规则类型设置为“版本数目”时,需要配置此参数 |
过滤标签 | 输入将被过滤的镜像版本,在应用老化规则前指定版本的镜像将被过滤掉 |
过滤正则 | 输入将被过滤的版本正则式,在应用老化规则前所有版本号满足正则表达式的镜像将被过滤掉 |
插件管理
- CCE提供了多种类型的插件,用于管理集群的扩展功能,以支持选择性扩展满足特性需求的功能
- CoreDNS(系统资源插件,必装)插件是一款通过链式插件的方式为Kubernetes提供域名解析服务的DNS服务器
- Everest(系统资源插件,必装)是一个云原生容器存储系统,基于CSI为Kubernetes v1.15.6及以上版本集群对接华为云云硬盘服务 EVS、对象存储服务 OBS、弹性文件服务 SFS、极速文件存储 SFS Turbo等存储服务的能力
- Volcano 是一个基于 Kubernetes 的批处理平台,提供了机器学习、深度学习、生物信息学、基因组学及其他大数据应用所需要的而 Kubernetes 当下缺失的一系列特性
- Autoscaler一款k8s集群自动扩容缩容node节点的插件
- Cce-hpa-controller一款CCE自研的插件,能够基于CPU利用率、内存利用率等指标,对无状态工作负载进行弹性扩缩容
- Huawei-npu支持容器里使用huawei NPU设备的管理插件
- Metrics-server是集群核心监控数据的聚合器
- Gpu-beta支持容器里使用GPU显卡的设备管理插件,仅支持NVidia驱动
- Prometheus是一个监控系统和时间序列库。该插件基于社区原生能力构建,当前版本处于beta阶段,请根据实际场景选择体验
CCE管理介绍
CCE的实例管理方式
- CCE支持两种对实例的管理方式:
- 图形界面
- 原生命令行 - kubectl
- 原生命令行kubectl是在原生k8s的使用方式一致,因此本章重点介绍图形界面中每个按钮的具体含义
命名空间管理
-
命名空间创建在资源管理菜单中
-
创建命名空间
如果开启了“节点亲和”功能,就相当于通过nodeSelector进行匹配节点,需提前为节点添加规划好的标签
节点标签管理
在“资源管理”>“节点管理” >“标签管理”中,可以对节点的标签进行添加、修改或删除
工作负载中的容器设置 - 基本信息
……
spec:
containers:
- image: nginx:1.21
name: container-0
resources:
requests:
cpu: 0.1
memory: 32Mi
limits:
cpu: 0.3
memory: 64Mi
工作负载中的容器设置 - 生命周期
……
spec:
containers:
- image: nginx:1.21
name: container-0
command:
- sleep
args:
- “3600”
lifecycle:
postStart:
exec:
command:
- /bin/bash
- install.sh
preStop:
exec:
command:
- /bin/bash
- uninstall.sh
工作负载中的容器设置 - 健康检查
apiVersion: v1
……
spec:
Containers:
…….
startupProbe:
tcpSocket:
port: 80
periodSeconds: 10
timeoutSeconds: 1
livenessProbe:
tcpSocket:
port: 80
periodSeconds: 5
timeoutSeconds: 1
工作负载中的容器设置 - 环境变量
工作负载中的容器设置 - 数据存储
apiVersion: v1
……
spec:
volumes:
- name: timefile
hostPath:
path: /etc/localtime
Containers:
…….
volumeMounts:
- name: timefile
mountPath: /etc/localtime
apiVersion: v1
……
spec:
volumes:
- name: data
emptyDir:
medium: Memory
sizeLimit: 256M
Containers:
…….
volumeMounts:
- name: data
mountPath: /tmp/data
- CCE支持使用云存储作为Pod的数据存储,相当于原生kubernetes中的PV和PVC
- 云硬盘:工作负载中的副本数为1时,可以使用云硬盘。如果选择“自动分配存储”,系统后台将自动调用StorageClass进行动态分配PV
- 对象存储
- 并行文件系统(Parallel File System)是对象存储服务(Object Storage Service,OBS)提供的一种经过优化的高性能文件系统,提供毫秒级别访问时延,以及TB/s 级别带宽和百万级别的IOPS,能够快速处理高性能计算(HPC)工作负载
- 对象桶:桶(Bucket)是对象存储服务OBS中存储对象的容器。对象存储提供了基于桶和对象的扁平化存储方式,桶中的所有对象都处于同一逻辑层级,去除了文件系统中的多层级树形目录结构
工作负载中的容器设置 - 安全设置
- 容器的安全设置是利用“SecurityContext”字段进行配置的
- 通过安全设置可以指定容器运行进程的用户
工作负载管理 - 基本信息
apiVersion: apps/v1
kind: Deployment
metadata:
name: test
namespace: hcie
labels:
app: nginx
annotations:
describe: this is a CCE Deployment
spec:
replicas: 3
selector:
matchLabels:
app: web
strategy: {}
template:
metadata:
labels:
app: web
- 所有的工作负载的基本信息基本一致,统一为名称、集群名称、命名空间等
工作负载管理 - 无状态负载Deployment高级设置
- 缩容优先级:可根据业务需要选择优先减少新实例或优先减少老实例
- DNS策略:
- 追加域名解析配置:选择该配置后,将保留默认配置,以下IP地址和“搜索域配置可能不生效
- 替换域名解析配置:选择该配置后,将仅使用以下IP地址和搜索域配置进行域名解析
- 继承Pod所在节点域名解析配置:将继承Pod所在节点的域名解析配置
- IP地址:您可对自定义的域名配置域名服务器,值为一个或一组DNS IP地址,如:1.2.3.4
- 搜索域:定义域名的搜索域列表,当访问的域名不能被DNS解析时,会把该域名与搜索域列表中的域依次进行组合,并重新向DNS发起请求,直到域名被正确解析或者尝试完搜索域列表为止。
- 超时时间(s):查询超时时间,请自定义
- ndots:表示域名中必须出现的“.”的个数,如果域名中的“.”的个数不小于ndots,则该域名为一个FQDN,操作系统会直接查询;如果域名中的“.”的个数小于ndots,操作系统会在搜索域中进行查询。
- Pod标签:内置app标签在工作负载创建时指定,主要用于设置亲和性与反亲和性调度,暂不支持修改。可以单击下方的添加标签增加标签
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
maxSurge: 0
restartPolicy: Always
terminationGracePeriodSeconds: 52
dnsPolicy: ClusterFirst
securityContext: {}
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- 10.0.1.114
工作负载管理 - 有状态负载StatefulSet高级设置
- StatefulSet的高级设置中和Deployment一样的部分不再重复介绍,仅介绍不同的选项
并行策略在yaml中对应的参数为:Parallel - 有序策略在yaml中对应的参数为:OrderedReady
- 有状态负载和无状态负载的高级设置覆盖了守护进程集的全部高级设置,因此不再单独介绍
dnsPolicy: Default
….
dnsConfig:
options:
- name: timeout
value: ''
- name: ndots
value: '5'
- name: single-request-reopen
template:
metadata:
creationTimestamp: null
labels:
app: test1
version: v1
工作负载管理 - 有状态负载StatefulSet工作负载访问设置
有状态负载StatefulSet使用Headless Service解决Pod间互相访问的问题
podManagementPolicy: Parallel
updateStrategy:
type: RollingUpdate
工作负载管理 - 定时任务CronJob定时规则介绍
- 并发策略支持三种模式:
- Forbid:在前一个任务未完成时,不创建新任务
- Allow:定时任务不断新建Job,会抢占集群资源
- Replace:已到新任务创建时间点,但前一个任务还未完成,新的任务会取代前一个任务
- 定时规则用来指定新建定时任务执行的额时间
任务记录用来设置保留执行成功或执行失败的任务个数,设置为0表示不保留
网络管理 - ClusterIP类型Service
kind: Service
apiVersion: v1
metadata:
name: nginx
namespace: default
labels:
app: test
name: test
spec:
ports:
- name: cce-service-0
protocol: TCP
port: 8080
targetPort: 80
selector:
app: test
version: v1
type: ClusterIP
网络管理 - NodePort类型Service
- 集群级别:访问业务时,通过集群中任意节点的IP+端口号都可以访问到该业务
- 节点级别:访问业务时,只能通过业务所在节点的IP+端口号访问到该业务
- 集群级别访问时,kube-proxy会做一次snat,因此在容器端无法看到源地址,同时性能也不如节点级别高,但是集群级别的负载性要好于节点级别
kind: Service
apiVersion: v1
metadata:
name: nginx
namespace: default
labels:
app: test
name: nginx
spec:
ports:
- name: cce-service-0
protocol: TCP
port: 80
targetPort: 80
nodePort: 31712
selector:
app: test
version: v1
clusterIP: 10.247.0.210
type: NodePort
网络管理 - LoadBalancer类型Service
- 系统会按照负载均衡配置的信息自动创建一个ELB进行流量负载和转发
- 公网类型的负载均衡需要有绑定EIP,私网类型的负载均衡不需要EIP,但仅在相同vpc内可访问
kind: Service
apiVersion: v1
metadata:
name: nginx
namespace: default
labels:
app: test
name: nginx
spec:
ports:
- name: cce-service-0
protocol: TCP
port: 8080
targetPort: 80
nodePort: 31265
selector:
app: test
version: v1
clusterIP: 10.247.0.163
type: LoadBalancer
loadBalancerIP: 10.0.1.169
externalTrafficPolicy: Cluster
网络管理 - Ingress配置说明
kind: Ingress
apiVersion: networking.k8s.io/v1beta1
metadata:
name: nginx
namespace: default
labels:
isExternal: 'true'
zone: data
spec:
rules:
- host: www.cce-test.com
http:
paths:
- path: /
backend:
serviceName: nginx
servicePort: 80
网络管理 - NetworkPolicy配置说明
- 集群网络模式为vpc网络时不支持配置NetworkPolicy
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
name: nginx
namespace: default
labels:
app: nginx
spec:
podSelector:
matchLabels:
app: nginx
ingress:
- ports:
- protocol: TCP
port: 80
from:
- namespaceSelector:
matchLabels:
project: default
policyTypes:
- Ingress
配置中心 - ConfigMap配置说明
kind: ConfigMap
apiVersion: v1
metadata:
name: password
namespace: default
labels:
app: nginx
annotations:
description: ''
data:
password: Huawei@123
配置中心 - Secret配置说明
kind: Secret
apiVersion: v1
metadata:
name: secret
namespace: default
labels:
app: nginx
data:
secret: aGVsbG8gd29ybGQ=
type: Opaque
弹性伸缩 - 工作负载伸缩
- 使用弹性伸缩功能前,需安装metrics-server插件或prometheus插件
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
name: nginx
namespace: default
annotations:
extendedhpa.metrics: '[{"type":"Resource","name":"cpu","targetType":"Utilization","targetRange":{"low":"10","high":"50"}}]'
extendedhpa.option: '{"downscaleWindow":"5m","upscaleWindow":"3m"}'
spec:
scaleTargetRef:
kind: Deployment
name: nginx
apiVersion: apps/v1
minReplicas: 1
maxReplicas: 5
metrics:
- type: Resource
resource:
name: cpu
targetAverageUtilization: 30
弹性伸缩 - 节点伸缩
- 用于被扩容的节点资源池
- 规则类型两类:
- 指标触发:以CPU分配率或内存分配率为指标,进行是否要执行对应的动作
- 周期触发:可选择每天、每周、每月或每年的具体时间点
- 触发条件:和指标触发相对应,设置触发执行动作的值
- 触发时间:和周期触发相对应,设置触发动作的时间
- 执行动作:达到触发条件时,系统需要执行的动作
缩略语
缩略语 | 英文全称 | 解释 |
---|---|---|
API | Application Programming Interface | 应用编程接口,指的是应用程序之间为了保证互相通讯所提供的一系列特殊规则和要求 |
K8s | Kubernetes | Kubernetes的缩写 |
CLI | Command-line Interface | 命令行视图 |
LB | Load Balance | 负载均衡 |
AI | Artificial Intelligence | 人工智能 |
OA | Office Automation | 办公自动化 |
OTT | Over The Top | 通过互联网向用户提供各种应用服务 |
CSI | Container Storage Interface | 容器存储接口 |
CCE | Cloud Container Engine | 华为云容器引擎 |
HCS | HUAWEI CLOUD Stack | 华为云解决方案名称 |