华为云用户手册

  • 集群Master节点多可用区 华为云支持多区域(Region),每个区域下又有不同的可用区(AZ,Availability Zone)。可用区是一个或多个物理数据中心的集合,有独立的风火水电。一个Region中的多个AZ间通过高速光纤相连,以满足用户跨AZ构建高可用性系统的需求。 创建集群时,您可以设置集群的高可用模式,并选择控制节点的分布方式。控制节点默认尽可能随机分布在不同可用区以提高容灾能力 。 您还可以展开高级配置自定义控制节点分布方式,支持如下2种方式。 随机分配:通过把控制节点随机创建在不同的可用区中实现容灾。 自定义:自定义选择每台控制节点的位置。 主机:通过把控制节点创建在相同可用区下的不同主机中实现容灾。 自定义:用户自行决定每台控制节点所在的位置。 图1 集群高可用
  • 集群网络选择 集群网络模型选择: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组件进行监控,您需要在集群中安装kube-prometheus-stack插件。通过插件自带的grafana组件,您可以使用Kubernetes监控概述仪表盘来可视化和监控 Kubernetes API服务 器请求以及延迟和etcd延迟指标。 在集群中自建Prometheus的场景,您可以手动添加指标,详情请参见Master节点组件指标监控。
  • 准备Velero Velero官网地址:https://velero.io/docs/v1.4/contributions/minio/ Velero是开源的 Kubernetes 集群备份、迁移工具,集成了Restic工具对PV数据的备份能力,可以通过Velero工具将原集群中的K8s资源对象(如Deployment、Job、Service、ConfigMap等)和Pod挂载的持久卷数据保存备份上传至对象存储。 在源集群和CCE的可执行kubectl命令的节点上执行如下操作: 下载迁移工具Velero 从https://github.com/heptio/velero/releases下载最新的稳定版 本文下载的是velero-v1.4.0-linux-amd64.tar.gz 安装Velero客户端 mkdir /opt/migrate2cce cd /opt/migrate2cce tar -xvf velero-v1.4.0-linux-amd64.tar.gz -C /opt/migrate2cce cp /opt/migrate2cce/velero-v1.4.0-linux-amd64/velero /usr/local/bin 安装Velero服务端 cd /opt/migrate2cce # 准备minio认证文件,ak/sk要正确 vi credentials-velero [default] aws_access_key_id = minio aws_secret_access_key = minio123 # 安装velero服务端,注意s3Url要修改为正确的minio地址 velero install \ --provider aws \ --plugins velero/velero-plugin-for-aws:v1.0.0 \ --bucket velero \ --secret-file ./credentials-velero \ --use-restic \ --use-volume-snapshots=false \ --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://{minio所在节点的eip}:9000
  • 准备对象存储MinIO MinIO官网地址:https://docs.min.io/ 准备对象存储,保存其AK/SK。 安装MinIO。 MinIO 是一个兼容S3接口协议的高性能对象存储开源工具。 # 二进制安装 mkdir /opt/minio mkdir /opt/miniodata cd /opt/minio wget https://dl.minio.io/server/minio/release/linux-amd64/minio chmod +x minio export MINIO_AC CES S_KEY=minio export MINIO_SECRET_KEY=minio123 ./minio server /opt/miniodata/ & 浏览器输入: http://{minio所在节点的eip}:9000 (注意防火墙、安全组需要放开对应端口) # kubectl容器化安装 # 如果需要将minio发布为集群外可访问的服务,请修改00-minio-deployment.yaml中的服务类型为NodePort或LoadBalancer kubectl apply -f ./velero-v1.4.0-linux-amd64/examples/minio/00-minio-deployment.yaml 创建后面迁移需要使用的桶。 打开minio的web页面 使用MINIO_ACCESS_KEY/MINIO_SECRET_KEY登录minio,本文中为minio/minio123 单击‘+’上方的“Create bucket”,创建桶,本文中桶名为velero
  • 合理配置DNS存根域 登录CCE控制台,单击集群名称进入集群。 在左侧导航栏中选择“插件中心”,在CoreDNS下单击“编辑”,进入插件详情页。 在“参数配置”下添加存根域。格式为一个键值对,键为DNS后缀域名,值为一个或一组DNS IP地址,如 'consul.local --10.150.0.1'。 单击“确定”完成配置更新。 在左侧导航栏中选择“配置与密钥”,在“kube-system”命名空间下,查看名为coredns的配置项数据,确认是否更新成功。 对应Corefile内容如下: .:5353 { bind {$POD_IP} cache 30 errors health {$POD_IP}:8080 kubernetes cluster.local in-addr.arpa ip6.arpa { pods insecure fallthrough in-addr.arpa ip6.arpa } loadbalance round_robin prometheus {$POD_IP}:9153 forward . /etc/resolv.conf { policy random } reload ready {$POD_IP}:8081 } consul.local:5353 { bind {$POD_IP} errors cache 30 forward . 10.150.0.1 }
  • 配置Forward插件与上游DNS服务的默认协议 NodeLocal DNSCache采用TCP协议与CoreDNS进行通信,CoreDNS会根据请求来源使用的协议与上游DNS服务器进行通信。因此默认情况下,来自业务容器的集群外部域名解析请求会依次经过NodeLocal DNSCache、CoreDNS,最终以TCP协议请求VPC内DNS服务器。 VPC内DNS服务器对TCP协议支持有限,如果您使用了NodeLocal DNSCache,您需要修改CoreDNS配置,让其总是优先采用UDP协议与上游DNS服务器进行通信,避免解析异常。建议您使用以下方式修改CoreDNS配置文件。 在forward插件用于设置 upstream Nameservers 上游 DNS 服务器。包含以下参数: prefer_udp:即使请求通过TCP传入,也要首先尝试使用UDP。 若您希望CoreDNS会优先使用UDP协议与上游通信,则forward中指定请求上游的协议为prefer_udp,forward插件的详细信息请参考https://coredns.io/plugins/forward/。 登录CCE控制台,单击集群名称进入集群。 在左侧导航栏中选择“插件中心”,在CoreDNS下单击“编辑”,进入插件详情页。 在“参数配置”下编辑高级配置,在plugins字段修改以下内容。 { "configBlock": "prefer_udp", "name": "forward", "parameters": ". /etc/resolv.conf" }
  • 合理配置Host 如果您需要为特定域名指定hosts,可以使用Hosts插件来配置。示例配置如下: 登录CCE控制台,单击集群名称进入集群。 在左侧导航栏中选择“插件中心”,在CoreDNS下单击“编辑”,进入插件详情页。 在“参数配置”下编辑高级配置,在plugins字段添加以下内容。 { "configBlock": "192.168.1.1 www.example.com\nfallthrough", "name": "hosts" } 此处配置不能遗漏fallthrough字段,fallthrough表示当在hosts找不到要解析的域名时,会将解析任务传递给CoreDNS的下一个插件。如果不写fallthrough的话,任务就此结束,不会继续解析,会导致集群内部域名解析失败的情况。 hosts的详细配置请参见https://coredns.io/plugins/hosts/。 单击“确定”完成配置更新。 在左侧导航栏中选择“配置与密钥”,在“kube-system”命名空间下,查看名为coredns的配置项数据,确认是否更新成功。 对应Corefile内容如下: .:5353 { bind {$POD_IP} hosts { 192.168.1.1 www.example.com fallthrough } cache 30 errors health {$POD_IP}:8080 kubernetes cluster.local in-addr.arpa ip6.arpa { pods insecure fallthrough in-addr.arpa ip6.arpa } loadbalance round_robin prometheus {$POD_IP}:9153 forward . /etc/resolv.conf { policy random } reload ready {$POD_IP}:8081 }
  • 合理配置CoreDNS规格 登录CCE控制台,进入集群。 在左侧导航栏中选择“插件管理”,在“已安装插件”下,单击CoreDNS插件的“编辑”按钮,进入插件详情页。 在“规格配置”下配置CoreDNS参数规格。 您可以根据业务需求选择CoreDNS所能提供的域名解析QPS。 您也可以选择自定义QPS,通过选择不同的实例数、CPU配额和内存配额,来定制集群的CoreDNS参数规格。 单击“确定”,完成配置下发。
  • 使用须知 制作镜像前需要准备: E CS 执行机:一台ECS x86服务器作为Linux执行机,建议选择CentOS7操作系统并绑定EIP支持访问公网,便于后续安装Packer工具。 认证凭据:制作镜像需要获取具有相关权限用户或者租户的AK/SK认证凭据,请提前获取,详情请参考 IAM 如何获取访问密钥AK/SK。 安全组:由于Packer通过创建临时ECS服务器并使用密钥对SSH登录,需要提前确保临时ECS服务器指定的安全组放开TCP:22端口通道,允许执行机SSH登录。详情请参考安全组配置示例。 制作过程中: 制作镜像的过程中必须按照操作指南进行制作,防止一些不可预期问题出现。 根据基础镜像创建出来的虚机,默认SSH登录用户需要支持sudo root权限,或者拥有root权限。 制作结束时: 制作过程会消耗一定计费资源,主要涉及ECS服务器、EVS云硬盘、弹性IP及带宽和IMS镜像。正常场景制作成功或者失败后会自动释放。但制作完成后,建议再次确认资源已彻底释放,以避免非预期的消耗。
  • 约束与限制 CCE节点镜像使用建议: 节点镜像推荐优先使用CCE服务维护的默认节点镜像。相关镜像经过严格的测试,且能获得最新的更新推送,具有更好的兼容性、稳定性和安全性。 如果您有特殊场景需要使用 自定义镜像 功能,请使用CCE提供的基础镜像来制作自定义镜像。 基础镜像中预置了节点运行依赖的组件包,该包的版本会跟着集群版本变更。对于自定义镜像,CCE不再提供组件包的更新推送。 自定义镜像时,请谨慎修改内核参数,部分内核参数过大或者过小时都会影响系统运行效率,参考值请参见修改节点内核参数。 已知存在影响的内核参数有:tcp_keepalive_time、tcp_max_tw_buckets、somaxconn、max_user_instances、max_user_watches、netdev_max_backlog、net.core.wmem_max、net.core.rmem_max。 如修改节点内核参数,请您在测试环境中自行完成充分的测试验证,再应用于生产环境。
  • 应用现状 Kubernetes集群可以将运行在一组Pod上的应用程序发布为服务,提供统一的四层访问入口。对于Loadbalancer类型的service,kube-proxy默认会将Service的status中LoadbalanceIP地址配置到节点本地的转发规则中,集群内部访问ELB的地址,流量就会在集群内部转发,而不会经过ELB转发。 集群内部转发功能是kube-proxy组件负责,kube-proxy有iptables和IPVS两种转发模式,iptables是一种简单的轮询转发,IPVS虽有多种转发模式,但也需要修改kube-proxy的启动参数,不能像ELB那样灵活配置转发策略,且无法利用ELB的健康检查能力。
  • 操作步骤 下文以nginx镜像创建无状态工作负载,并创建一个具有pass-through的Service。 使用nginx镜像创建无状态负载。 apiVersion: apps/v1 kind: Deployment metadata: name: nginx spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - image: nginx:latest name: container-0 resources: limits: cpu: 100m memory: 200Mi requests: cpu: 100m memory: 200Mi imagePullSecrets: - name: default-secret Loadbalance类型的Service,并设置kubernetes.io/elb.pass-through为true。本示例中自动创建了一个名为james的共享型ELB实例。 Loadbalance类型的Service具体创建方法请参见自动创建负载均衡类型Service。 apiVersion: v1 kind: Service metadata: annotations: kubernetes.io/elb.pass-through: "true" kubernetes.io/elb.class: union kubernetes.io/elb.autocreate: '{"type":"public","bandwidth_name":"cce-bandwidth","bandwidth_chargemode":"bandwidth","bandwidth_size":5,"bandwidth_sharetype":"PER","eip_type":"5_bgp","name":"james"}' labels: app: nginx name: nginx spec: externalTrafficPolicy: Local ports: - name: service0 port: 80 protocol: TCP targetPort: 80 selector: app: nginx type: LoadBalancer
  • 解决方案 CCE服务支持pass-through能力,通过Loadbalance类型Service配置kubernetes.io/elb.pass-through的annotation实现集群内部访问Service的ELB地址时绕出集群,并通过ELB的转发最终转发到后端的Pod。 图1 pass-through访问示例 对于CCE集群: 集群内部客户端访问LB类型Service时,访问请求默认是通过集群服务转发规则(iptables或IPVS)转发到后端的容器实例。 当LB类型Service配置elb.pass-through后,集群内部客户端访问Service地址时会先访问到ELB,再通过ELB的负载均衡能力先访问到节点,然后通过集群服务转发规则(iptables或IPVS)转发到后端的容器实例。 对于 CCE Turbo 集群: 集群内部客户端访问LB类型Service时,默认使用pass-through方式,此时客户端会直接访问ELB私网地址,然后通过ELB直接连接容器实例。
  • 约束限制 独享型负载均衡配置pass-through后,CCE Standard集群在工作负载同节点和同节点容器内无法通过Service访问。 1.15及以下老版本集群暂不支持该能力。 IPVS网络模式下,对接同一个ELB的Service需保持pass-through设置情况一致。 使用节点级别(Local)的服务亲和的场景下,会自动设置kubernetes.io/elb.pass-through为onlyLocal,开启pass-through能力。
  • 创建HPA策略 创建HPA策略,如下所示,该策略关联了名为hpa-example的负载,期望CPU使用率为50%。 另外有两条注解annotations,一条是CPU的阈值范围,最低30,最高70,表示CPU使用率在30%到70%之间时,不会扩缩容,防止小幅度波动造成影响。另一条是扩缩容时间窗,表示策略成功触发后,在缩容/扩容冷却时间内,不会再次触发缩容/扩容,以防止短期波动造成影响。 apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: hpa-policy annotations: extendedhpa.metrics: '[{"type":"Resource","name":"cpu","targetType":"Utilization","targetRange":{"low":"30","high":"70"}}]' extendedhpa.option: '{"downscaleWindow":"5m","upscaleWindow":"3m"}' spec: scaleTargetRef: kind: Deployment name: hpa-example apiVersion: apps/v1 minReplicas: 1 maxReplicas: 100 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 50 在控制台创建则参数填写如下所示。
  • 解决方案 CCE中弹性伸缩最主要的就是使用HPA(Horizontal Pod Autoscaling)和CA(Cluster AutoScaling)两种弹性伸缩策略,HPA负责工作负载弹性伸缩,也就是应用层面的弹性伸缩,CA负责节点弹性伸缩,也就是资源层面的弹性伸缩。 通常情况下,两者需要配合使用,因为HPA需要集群有足够的资源才能扩容成功,当集群资源不够时需要CA扩容节点,使得集群有足够资源;而当HPA缩容后集群会有大量空余资源,这时需要CA缩容节点释放资源,才不至于造成浪费。 如图1所示,HPA根据监控指标进行扩容,当集群资源不够时,新创建的Pod会处于Pending状态,CA会检查所有Pending状态的Pod,根据用户配置的扩缩容策略,选择出一个最合适的节点池,在这个节点池扩容。HPA和CA的工作原理详情请参见工作负载伸缩原理和节点伸缩原理。 图1 HPA + CA工作流程 使用HPA+CA可以很容易做到弹性伸缩,且节点和Pod的伸缩过程可以非常方便的观察到,使用HPA+CA做弹性伸缩能够满足大部分业务场景需求。 本文将通过一个示例介绍HPA+CA两种策略配合使用下弹性伸缩的过程,从而帮助您更好的理解和使用弹性伸缩。
  • 创建节点池和节点伸缩策略 登录CCE控制台,进入已创建的集群,在左侧单击“节点管理”,选择“节点池”页签并单击右上角“创建节点池”。 填写节点池配置。 节点数量:设置为1,表示创建节点池时默认创建的节点数为1。 节点规格:2核 | 4GiB 其余参数设置可使用默认值,详情请参见创建节点池。 节点池创建完成后,在目标节点池所在行右上角单击“弹性伸缩”,设置弹性伸缩配置。关于节点伸缩策略设置的详细说明,请参见创建节点伸缩策略。 若集群中未安装CCE集群弹性引擎插件,请先安装该插件。详情请参见CCE集群弹性引擎。 弹性扩容:开启,表示节点池将根据集群负载情况自动创建节点池内的节点。 自定义弹性策略:单击“添加策略”,在弹出的添加规则窗口中设置参数。例如CPU分配率大于70%时,关联的节点池都增加一个节点。CA策略需要关联节点池,可以关联多个节点池,当需要对节点扩缩容时,在节点池中根据最小浪费规则挑选合适规格的节点扩缩容。 弹性缩容:开启,表示节点池将根据集群负载情况自动删除节点池内的节点。例如节点资源使用率小于50%时进行缩容扫描,启动缩容。 伸缩配置:修改节点数范围,弹性伸缩时节点池下的节点数量会始终介于节点数范围内。 伸缩对象:对节点池中的节点规格单独设置开启弹性伸缩。 设置完成后,单击“确定”。
  • 创建工作负载 使用构建的hpa-example镜像创建无状态工作负载,副本数为1,镜像地址与上传到SWR仓库的组织有关,需要替换为实际取值。 kind: Deployment apiVersion: apps/v1 metadata: name: hpa-example spec: replicas: 1 selector: matchLabels: app: hpa-example template: metadata: labels: app: hpa-example spec: containers: - name: container-1 image: 'hpa-example:latest' # 替换为您上传到SWR的镜像地址 resources: limits: # limits与requests建议取值保持一致,避免扩缩容过程中出现震荡 cpu: 500m memory: 200Mi requests: cpu: 500m memory: 200Mi imagePullSecrets: - name: default-secret 然后再为这个负载创建一个Nodeport类型的Service,以便能从外部访问。 Nodeport类型的Service从外网访问需要为集群某个节点创建EIP,创建完后需要同步节点信息,具体请参见同步节点信息。如果节点已有EIP则无需再次创建。 或者您也可以创建带ELB的Service从外部访问,具体请参见通过kubectl命令行创建-自动创建ELB。 kind: Service apiVersion: v1 metadata: name: hpa-example spec: ports: - name: cce-service-0 protocol: TCP port: 80 targetPort: 80 nodePort: 31144 selector: app: hpa-example type: NodePort
  • 应用场景 企业应用的流量大小不是每时每刻都一样,有高峰,有低谷,如果每时每刻都要保持能够扛住高峰流量的机器数目,那么成本会很高。通常解决这个问题的办法就是根据流量大小或资源占用率自动调节机器的数量,也就是弹性伸缩。 当使用Pod/容器部署应用时,通常会设置容器的申请/限制值来确定可使用的资源上限,以避免在流量高峰期无限制地占用节点资源。然而,这种方法可能会存在资源瓶颈,达到资源使用上限后可能会导致应用出现异常。为了解决这个问题,可以通过伸缩Pod的数量来分摊每个应用实例的压力。如果增加Pod数量后,节点资源使用率上升到一定程度,继续扩容出来的Pod无法调度,则可以根据节点资源使用率继续伸缩节点数量。
  • 使用云服务 云容器引擎CCE:提供高可靠高性能的企业级容器应用管理服务,支持Kubernetes社区原生应用和工具,简化云上自动化容器运行环境搭建。 弹性 云服务器ECS :一种可随时自助获取、可弹性伸缩的云服务器,帮助用户打造可靠、安全、灵活、高效的应用环境,确保服务持久稳定运行,提升运维效率。 虚拟私有云VPC :是用户在云上申请的隔离的、私密的虚拟网络环境。用户可以自由配置VPC内的IP地址段、子网、安全组等子服务,也可以申请弹性带宽和弹性IP搭建业务系统。
  • 基本概念 集群:集群是计算资源的集合,包含一组节点资源,容器运行在节点上。在创建容器应用前,您需要存在一个可用集群。 节点:节点是指接入到平台的计算资源,包括虚拟机、物理机等。用户需确保节点资源充足,若节点资源不足,会导致创建应用等操作失败。 容器工作负载:容器工作负载指运行在CCE上的一组实例。CCE提供第三方应用托管功能,提供从部署到运维全生命周期管理。本节指导用户通过容器镜像创建您的第一个容器工作负载。
  • 安装MinIO MinIO 是一个兼容S3接口协议的高性能对象存储开源工具。若使用MinIO进行存放集群迁移的备份文件,您需要一台临时服务器用于部署MinIO并对外提供服务。若您使用OBS存放备份文件,请忽略此步骤,前往安装Velero。 MinIO的安装位置选择有如下几种: 集群外临时ECS 将MinIO服务端安装在集群外,能够保障集群发生灾难性故障时,备份文件不会受到影响。 集群内的空闲节点 您可以远程登录节点安装MinIO服务端,也可以选择容器化安装MinIO,请参考Velero官方文档https://velero.io/docs/v1.7/contributions/minio/#set-up-server。 如使用容器化安装MinIO: Velero官方文档提供的YAML文件中存储类型为empty dir,建议将其修改为HostPath或Local类型,否则容器重启后将永久丢失备份文件。 您需将MinIO服务对外提供访问,否则将无法在集群外下载备份文件,可选择将Service修改为NodePort类型或使用其他类型的公网访问服务。 无论使用何种方法进行部署,安装MinIO的服务器需要有足够的存储空间,且均需要绑定EIP并在安全组中开放MinIO的服务端口,否则将无法上传(下载)备份文件。 本示例选择在一台集群外的临时ECS上安装MinIO,步骤如下。 下载MinIO对象存储。 mkdir /opt/minio mkdir /opt/miniodata cd /opt/minio wget https://dl.minio.io/server/minio/release/linux-amd64/minio chmod +x minio 设置MinIO的用户名及密码。 此方法设置的用户名及密码为临时环境变量,在服务重启后需要重新设定,否则会使用默认root凭据minioadmin:minioadmin来创建服务。 export MINIO_ROOT_USER=minio export MINIO_ROOT_PASSWORD=minio123 创建服务,其中/opt/miniodata/为MinIO 存储数据的本地磁盘路径。 MinIO的API端口默认为9000,console端口默认为随机生成,您可使用--console-address参数指定console访问端口。 ./minio server /opt/miniodata/ --console-address ":30840" & 安装MinIO工具的服务器需开放防火墙、安全组中对应的API和console端口,否则将无法访问对象桶。 浏览器访问http://{minio所在节点的eip}:30840,可进入MinIO console界面。
  • 安装Velero 首先前往OBS控制台或MinIO console界面,创建存放备份文件的桶并命名为velero。此处桶名称可自定义,但安装Velero时必须指定此桶名称,否则将无法访问导致备份失败,参见4。 原集群和目标集群中均需要安装部署Velero实例,安装步骤一致,分别用于备份和恢复。 CCE集群的Master节点不对外提供远程登录端口,您可通过kubectl操作集群完成Velero安装。 如果备份资源量较大,请调整Velero及Restic工具的cpu和内存资源(建议调整至1U1G及以上),请参考备份工具资源分配不足。 用于存放备份文件的对象存储桶需要是空桶。 从Velero官方发布路径https://github.com/vmware-tanzu/velero/releases下载最新的稳定版二进制文件,本文以Velero 1.7.0版本为例。原集群和目标集群中的安装过程一致,请参考如下步骤。 下载Velero 1.7.0版本的二进制文件。 wget https://github.com/vmware-tanzu/velero/releases/download/v1.7.0/velero-v1.7.0-linux-amd64.tar.gz 安装Velero客户端。 tar -xvf velero-v1.7.0-linux-amd64.tar.gz cp ./velero-v1.7.0-linux-amd64/velero /usr/local/bin 创建备份对象存储访问密钥文件credentials-velero。 vim credentials-velero 文件内容如下,其中的AK/SK请根据实际情况进行替换。使用OBS时,可参考获取访问密钥(AK/SK)获取AK/SK。如使用MinIO,此处AK/SK则为2中所创建的用户名及密码。 [default] aws_access_key_id = {AK} aws_secret_access_key = {SK} 部署Velero服务端。注意其中--bucket参数需要修改为已创建的对象存储桶名称,本例中为velero。关于更多自定义安装参数,请参考自定义安装Velero。 velero install \ --provider aws \ --plugins velero/velero-plugin-for-aws:v1.2.1 \ --bucket velero \ --secret-file ./credentials-velero \ --use-restic \ --use-volume-snapshots=false \ --backup-location-config region=cn-north-4,s3ForcePathStyle="true",s3Url=http://obs.cn-north-4.myhuaweicloud.com 表1 Velero安装参数说明 安装参数 参数说明 --provider 声明使用“aws”提供的插件类型。 --plugins 使用AWS S3兼容的API组件,本文使用的OBS和MinIO对象存储均支持该S3协议。 --bucket 用于存放备份文件的对象存储桶名称,需提前创建。 --secret-file 访问对象存储的密钥文件,即3中创建的“credentials-velero”文件。 --use-restic 使用Restic工具支持PV数据备份,建议开启,否则将无法备份存储卷资源。 --use-volume-snapshots 是否创建 VolumeSnapshotLocation 对象进行PV快照,需要提供快照程序支持。该值设为false。 --backup-location-config 对象存储桶相关配置,包括region、s3ForcePathStyle、s3Url等。 region 对象存储桶所在区域。 OBS:请根据实际区域填写,如“cn-north-4”。 MinIO:参数值为minio。 s3ForcePathStyle 参数值为“true”,表示使用S3文件路径格式。 s3Url 对象存储桶的API访问地址。 OBS:该参数值需根据对象存储桶地域决定,参数值为“http://obs.{region}.myhuaweicloud.com”。例如区域为北京四(cn-north-4),则参数值为“http://obs.cn-north-4.myhuaweicloud.com”。 MinIO:该参数值需根据MinIO安装节点的IP及暴露端口确定,参数值为“http://{minio所在节点的eip}:9000”。 说明: s3Url中的访问端口需填写MinIO的API端口,而非console端口。MinIO API端口默认为9000。 访问集群外安装的MinIO时,需填写其公网IP地址。 Velero实例将默认创建一个名为velero的namespace,执行以下命令可查看pod状态。 $ kubectl get pod -n velero NAME READY STATUS RESTARTS AGE restic-rn29c 1/1 Running 0 16s velero-c9ddd56-tkzpk 1/1 Running 0 16s 为防止在实际生产环境中备份时出现内存不足的情况,建议您参照备份工具资源分配不足,修改Restic和Velero分配的CPU和内存大小。 查看Velero工具与对象存储的对接情况,状态需要为available。 $ velero backup-location get NAME PROVIDER BUCKET/PREFIX PHASE LAST VALIDATED ACCESS MODE DEFAULT default aws velero Available 2021-10-22 15:21:12 +0800 CST ReadWrite true
  • 前提条件 原始自建集群Kubernetes版本需1.10及以上,且集群可正常使用DNS与互联网服务。 若您使用OBS存放备份文件,需已有OBS操作权限用户的AK/SK,请参考获取访问密钥(AK/SK)。 若您使用MinIO存放备份文件,则安装MinIO的服务器需要绑定EIP并在安全组中开放MinIO的API端口和Console端口。 已创建迁移的目标CCE集群。 原集群和目标集群中需要至少各拥有一个空闲节点,节点规格建议为4U8G及以上。
  • 配置示例 级别 用户业务场景 配置示例 集群级别 集群中所有节点采用c7.4xlarge.2机型(辅助弹性网卡配额128) 集群下大部分节点平时日常运行20个Pod左右 集群下大部分节点最多运行60个Pod 集群下大部分节点日常10s内会瞬时弹性扩容10个Pod 集群下大部分节点日常在分钟级时间范围内会频繁弹性扩容缩容15个Pod 集群级别的全局配置: nic-minimum-target: 20 nic-maximum-target: 60 nic-warm-target: 10 nic-max-above-warm-target: 5 节点池级别 集群中用户新创建了一个使用大规格机型c7.8xlarge.2的节点池(辅助弹性网卡配额256) 节点池下大部分节点平时日常运行100个Pod左右 节点池下大部分节点最多运行128个Pod 节点池下大部分节点日常在10s内会瞬时弹性扩容10个Pod 节点池下大部分节点日常在分钟级时间范围内会频繁弹性扩容缩容12个Pod 节点池级别的差异化配置: nic-minimum-target: 100 nic-maximum-target: 120 nic-warm-target: 10 nic-max-above-warm-target: 2 使用HostNetwork的Pod不计入Pod数中。
  • 约束与限制 CCE Turbo的1.19.16-r4、1.21.7-r0、1.23.5-r0、1.25.1-r0及以上版本支持用户配置容器网卡动态预热;支持集群级别的全局配置以及节点池级别的差异化配置,暂不支持非节点池下的节点差异化配置。 CCE Turbo的1.19.16-r2、1.21.5-r0、1.23.3-r0到1.19.16-r4、1.21.7-r0、1.23.5-r0之间的集群版本只支持节点最少绑定容器网卡数(nic-minimum-target)和节点动态预热容器网卡数(nic-warm-target)两个参数配置,且不支持节点池级别的差异化配置。 请通过console页面或API修改容器网卡动态预热参数配置,请勿直接后台修改节点annotations上对应的容器网卡动态预热参数,集群升级后,后台直接修改的annotations会被覆盖为原始的值。 CCE Turbo的1.19.16-r4、1.21.7-r0、1.23.5-r0、1.25.1-r0之前的集群版本支持用户配置容器网卡高低水位预热,如果用户配置了全局的容器网卡高低水位预热。集群升级后,原始的高低水位预热参数配置会自动转换为容器网卡动态预热参数配置;但如果用户要通过console页面进一步修改容器网卡动态预热参数,需要先通过集群的配置管理console页面把原始的高低水位预热配置修改为(0:0)。 CCE Turbo的节点池BMS裸机场景下,1.19.16-r4、1.21.7-r0、1.23.5-r0、1.25.1-r0之前的集群版本默认采用的是容器网卡高低水位预热(默认值0.3:0.6)。集群升级后,原始的高低水位预热依然生效,建议客户通过节点池的配置管理console页面把高低水位预热参数配置转换为容器网卡动态预热参数配置并一并删除高低水位预热配置,以启用最新的容器网卡动态预热的能力。 CCE Turbo的非节点池下BMS裸机场景下,1.19.16-r4、1.21.7-r0、1.23.5-r0、1.25.1-r0之前的集群版本默认采用的是容器网卡高低水位预热(默认值0.3:0.6)。集群升级后,原始的高低水位预热依然生效,如果用户想启用集群级别的全局配置,客户需要后台删除该节点的annotation(node.yangtse.io/eni-warm-policy),以启用集群级别配置的容器网卡动态预热的能力。
  • 原理说明 CCE Turbo的容器网卡动态预热提供了4个相关的容器网卡动态预热参数,您可以根据业务规划,合理设置集群的配置管理或节点池的配置管理中的容器网卡动态预热参数(其中节点池的容器网卡动态预热配置优先级高于集群的容器网卡动态预热配置)。 表1 容器网卡动态预热参数 容器网卡动态预热参数 默认值 参数说明 配置建议 节点最少绑定容器网卡数(nic-minimum-target) 10 保障节点最少有多少张容器网卡绑定在节点上。 参数值需为正整数。例如10,表示节点最少有10张容器网卡绑定在节点上。当超过节点的容器网卡配额时,后台取值为节点的容器网卡配额。 建议配置为大部分节点平时日常运行的Pod数。 节点预热容器网卡上限检查值(nic-maximum-target) 0 当节点绑定的容器网卡数超过节点预热容器网卡上限检查值(nic-maximum-target),不再主动预热容器网卡。 当该参数大于等于节点最少绑定容器网卡数(nic-minimum-target)时,则开启预热容器网卡上限值检查;反之,则关闭预热容器网卡上限值检查。 参数值需为正整数。例如0,表示关闭预热容器网卡上限值检查。当超过节点的容器网卡配额时,后台取值为节点的容器网卡配额。 建议配置为大部分节点平时最多运行的Pod数。 节点动态预热容器网卡数(nic-warm-target) 2 保障节点至少预热的容器网卡数,只支持数值配置。 当 节点动态预热容器网卡数(nic-warm-target) + 节点当前绑定的容器网卡数 大于 节点预热容器网卡上限检查值(nic-maximum-target) 时,只会预热nic-maximum-target与节点当前绑定的容器网卡数的差值。 建议配置为大部分节点日常10s内会瞬时弹性扩容的Pod数。 节点预热容器网卡回收阈值(nic-max-above-warm-target) 2 只有当 节点上空闲的容器网卡数 - 节点动态预热容器网卡数(nic-warm-target) 大于此阈值 时,才会触发预热容器网卡的解绑回收。只支持数值配置。 调大此值会减慢空闲容器网卡的回收,加快Pod的启动速度,但会降低IP地址的利用率,特别是在IP地址紧张的场景,请谨慎调大。 调小此值会加快空闲容器网卡的回收,提高IP地址的利用率,但在瞬时大量Pod激增的场景,部分Pod启动会稍微变慢。 建议配置为大部分节点日常在分钟级时间范围内会频繁弹性扩容缩容的Pod数 - 大部分节点日常10s内会瞬时弹性扩容的Pod数。
共100000条