云服务器内容精选

  • 升级前检查项 集群升级前,系统将自动进行全面的升级前检查,当集群不满足升级前检查条件时将无法继续升级。为了能够更好地避免升级风险,本文提供全量的升级前检查问题及解决方案,帮助您对可能存在的升级故障进行预处理。 表1 检查项列表 序号 检查项名称 检查项说明 1 升级管控检查异常处理 检查集群是否处于升级管控中。 2 插件检查 检查插件状态是否正常 检查插件是否支持目标版本 3 Helm模板检查异常处理 检查当前HelmRelease记录中是否含有目标集群版本不支持的K8s废弃API,可能导致升级后helm模板不可用。 4 Master节点SSH联通性检查异常处理 检查当前CCE是否能连接至您的Master节点。 5 K8s废弃资源检查异常处理 检查集群是否存在对应版本已经废弃的资源。 6 cce-hpa-controller插件限制检查异常处理 检查到目标cce-controller-hpa插件版本是否存在兼容性限制。 7 K8s废弃API检查 系统会扫描过去一天的审计日志,检查用户是否调用目标K8s版本已废弃的API。 说明: 由于审计日志的时间范围有限,该检查项仅作为辅助手段,集群中可能已使用即将废弃的API,但未在过去一天的审计日志中体现,请您充分排查。 8 HTTPS类型负载均衡证书一致性检查 检查HTTPS类型负载均衡所使用的证书,是否在ELB服务侧被修改。 父主题: 升级前检查异常问题排查
  • 通过控制台创建 登录CCE控制台。 单击集群名称进入集群,在左侧选择“工作负载”,在右上角单击“创建工作负载”。 配置工作负载的信息。 基本信息 负载类型:选择有状态工作负载StatefulSet。 负载名称:填写工作负载的名称。请输入1到63个字符的字符串,可以包含小写英文字母、数字和中划线(-),并以小写英文字母开头,小写英文字母或数字结尾。 命名空间:选择工作负载的命名空间,默认为default。您可以单击后面的“创建命名空间”,命名空间的详细介绍请参见创建命名空间。 实例数量:填写实例的数量,即工作负载Pod的数量。 容器配置 容器信息 Pod中可以配置多个容器,您可以单击右侧“添加容器”为Pod配置多个容器。 基本信息:配置容器的基本信息。 参数 说明 容器名称 为容器命名。 更新策略 镜像更新/拉取策略。可以勾选“总是拉取镜像”,表示每次都从镜像仓库拉取镜像;如不勾选则优使用节点已有的镜像,如果没有这个镜像再从镜像仓库拉取。 镜像名称 单击后方“选择镜像”,选择容器使用的镜像。 如果需要使用第三方镜像,请参见使用第三方镜像。 镜像版本 选择需要部署的镜像版本。 CPU配额 CPU资源限制值,即允许容器使用的CPU最大值,防止占用过多资源。 内存配额 内存资源限制值,即允许容器使用的内存最大值。如果超过,容器会被终止。 初始化容器(可选) 选择容器是否作为初始化(Init)容器。初始化(Init)容器不支持设置健康检查。 Init容器是一种特殊容器,可以在Pod中的其他应用容器启动之前运行。每个Pod中可以包含多个容器,同时Pod中也可以有一个或多个先于应用容器启动的Init容器,当所有的Init 容器运行完成时,Pod中的应用容器才会启动并运行。详细说明请参见Init 容器。 生命周期(可选):在容器的生命周期的特定阶段配置需要执行的操作,例如启动命令、启动后处理和停止前处理,详情请参见设置容器生命周期。 健康检查(可选):根据需求选择是否设置存活探针、就绪探针及启动探针,详情请参见设置容器健康检查。 环境变量(可选):支持通过键值对的形式为容器运行环境设置变量,可用于把外部信息传递给Pod中运行的容器,可以在应用部署后灵活修改,详情请参见设置环境变量。 数据存储(可选):在容器内挂载本地存储或 云存储 ,不同类型的存储使用场景及挂载方式不同。 有状态负载支持“动态挂载”存储。 动态挂载通过volumeClaimTemplates字段实现,并依赖于StorageClass动态创建能力。有状态工作负载通过volumeClaimTemplates字段为每一个Pod关联了一个独有的PVC,而这个PVC又会和对应的PV绑定。因此当Pod被重新调度后,仍然能够根据该PVC名称挂载原有的数据。 负载创建完成后,动态挂载的存储不支持更新。 安全设置(可选):对容器权限进行设置,保护系统和其他容器不受其影响。请输入用户ID,容器将以当前用户权限运行。 镜像访问凭证:用于访问镜像仓库的凭证,默认取值为default-secret,使用default-secret可访问SWR镜像仓库的镜像。default-secret详细说明请参见default-secret。 实例间发现服务配置 Headless Service用于解决StatefulSet内Pod互相访问的问题,Headless Service给每个Pod提供固定的访问 域名 。具体请参见Headless Service。 服务配置(可选) 服务(Service)可为Pod提供外部访问。每个Service有一个固定IP地址,Service将访问流量转发给Pod,而且Service可以为这些Pod自动实现负载均衡。 您也可以在创建完工作负载之后再创建Service,不同类型的Service概念和使用方法请参见服务(Service)。 高级配置(可选) 升级策略:指定工作负载的升级方式及升级参数,支持滚动升级和替换升级,详情请参见设置工作负载升级策略。 实例管理策略(podManagementPolicy): 对于某些分布式系统来说,StatefulSet 的顺序性保证是不必要和/或者不应该的。 这些系统仅仅要求唯一性和身份标志。 有序策略:默认实例管理策略,有状态负载会逐个的、按顺序的进行部署、删除、伸缩实例, 只有前一个实例部署Ready或者删除完成后,有状态负载才会操作后一个实例。 并行策略:支持有状态负载并行创建或者删除所有的实例,有状态负载发生变更时立刻在实例上生效。 标签与注解:以键值对形式为工作负载Pod添加标签或注解,填写完成后需单击“确认添加”。关于标签与注解的作用及配置说明,请参见设置标签与注解。 DNS配置:为工作负载单独配置DNS策略,详情请参见工作负载DNS配置说明。 单击右下角“创建工作负载”。
  • 通过kubectl命令行创建 Autopilot集群暂不支持配置节点亲和与反亲和,所以当您使用kubectl命令行创建工作负载时,为避免Pod创建失败,请不要配置affinity字段。 请参见通过kubectl连接集群,使用kubectl连接集群。 创建一个名为nginx-statefulset.yaml的文件。 其中,nginx-statefulset.yaml为自定义名称,您可以随意命名。 vi nginx-statefulset.yaml 以下内容仅为示例,若需要了解statefulset的详细内容,请参考kubernetes官方文档。 apiVersion: apps/v1 kind: StatefulSet metadata: name: nginx spec: selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: container-1 image: nginx:latest imagePullPolicy: IfNotPresent resources: requests: cpu: 250m memory: 512Mi limits: cpu: 250m memory: 512Mi imagePullSecrets: - name: default-secret dnsPolicy: ClusterFirst serviceName: nginx-svc replicas: 2 updateStrategy: type: RollingUpdate vi nginx-headless.yaml apiVersion: v1 kind: Service metadata: name: nginx-svc namespace: default labels: app: nginx spec: selector: app: nginx version: v1 clusterIP: None ports: - name: nginx targetPort: 80 nodePort: 0 port: 80 protocol: TCP type: ClusterIP 创建工作负载以及对应headless服务。 kubectl create -f nginx-statefulset.yaml 回显如下,表示有状态工作负载(stateful)已创建成功。 statefulset.apps/nginx created kubectl create -f nginx-headless.yaml 回显如下,表示对应headless服务已创建成功。 service/nginx-svc created 若工作负载需要被访问(集群内访问或节点访问),您需要设置访问方式,具体请参见服务(Service)创建对应服务。
  • 使用模板时的API资源限制 资源 限制项 说明 推荐替代方案 namespaces - 支持 为安全起见,Autopilot 不允许在系统管理的命名空间(如 kube-system)中部署工作负载,不可进行任何资源的创建、修改、删除、exec等。 nodes - 支持 只支持查询,不支持增删改功能 persistentvolumeclaims - 支持 - persistentvolumes - 支持 - pods HostPath 限制挂载本地宿主机文件到容器中 使用emptyDir或云存储 HostNetwork 限制将宿主机端口映射到容器上 使用type=LoadBalancer的负载均衡 HostPID 限制容器可见宿主机PID空间 用户不感知节点,无需使用 HostIPC 限制容器进程和宿主机进程间通信 用户不感知节点,无需使用 NodeName 限制Pod调度到特定节点 用户不感知节点,无需使用 特权容器 不支持 - Linux capabilities 支持"SETPCAP", "MKNOD", "AUDIT_WRITE", "CHOWN", "DAC_OVERRIDE", "FOWNER", "FSETID", "KILL", "SETGID", "SETUID", "NET_BIND_SERVICE", "SYS_CHROOT", "SETFCAP", "SYS_PTRACE" 可以通过SecurityContext设置开启NET_RAW 、SYS_PTRACE 、NET_ADMIN 使用允许值 调度的节点亲和与打散规则 限制将Pod调度到指定节点或者具有某些标签的节点上,或者将一批Pod打散到具有某些标签的节点上。 Autopilot集群中应用指定节点亲和性或nodeSelector字段不生效。 无需指定节点调度,但可以指定Pod到某一个可用区 可以将一批Pod打散到多个可用区 Pod间亲和与反亲和配置 不生效 无需配置 allowPrivilegeEscalation是否允许特权升级 不支持 使用默认配置 RuntimeClassName 无需配置,上层应用(Pod除外)指定RuntimeClassName时后端将自动修改为系统默认支持的runc 无需配置 时区同步(会挂载主机/etc/localtime) 不支持 使用默认配置 serviceaccounts - 不支持修改系统配置、不允许绑定系统角色 使用默认配置 services - 限制nodeport,ELB只支持独享型 使用type=LoadBalancer的负载均衡 daemonsets apps 限制使用Daemonset类workload 通过Sidecar形式在Pod中部署多个镜像 deployments apps 支持,其中限制使用的字段与Pod一致 使用允许值 replicasets apps 支持,其中限制使用的字段与Pod一致 使用允许值 statefulsets apps 支持,其中限制使用的字段与Pod一致 使用允许值 cronjobs batch 支持,其中限制使用的字段与Pod一致 使用允许值 jobs batch 支持,其中限制使用的字段与Pod一致 使用允许值 clusterrolebindings rbac.authorization.k8s.io 支持,限制绑定系统组与系统用户,cce-service组 使用允许值 rolebindings rbac.authorization.k8s.io 支持,限制绑定系统组与系统用户,cce-service组 使用允许值 storageclasses storage.k8s.io 不支持创建obs、evs类型的storageclass;其他功能支持 使用允许值 父主题: 模板(Helm Chart)
  • 创建模板实例 登录CCE控制台,单击集群名称进入集群,在左侧导航栏中选择“应用模板”。 在“我的模板”页签中,单击目标模板下的“安装”。 参照表2设置安装工作负载参数。 表2 安装工作负载参数说明 参数 参数说明 实例名称 新建模板实例名称,命名必须唯一。 命名空间 指定部署的命名空间。 选择版本 选择模板的版本。 配置文件 用户可以导入values.yaml文件,导入后可替换模板包中的values.yaml文件;也可直接在配置框中在线编辑模板参数。 说明: 此处导入的values.yaml文件需符合yaml规范,即KEY:VALUE格式。对于文件中的字段不做任何限制。 导入的value.yaml的key值必须与所选的模板包的values.yaml保持一致,否则不会生效。即key不能修改。 单击“添加文件”。 选择对应的values.yaml文件,单击“打开”。 配置完成后,单击“安装”。 在“模板实例”页签下可以查看模板实例的安装情况。
  • 告警中心概述 云原生告警是可观测性体系里面比较重要的一环。在云原生告警中,除了传统的CPU、内存等资源使用量的告警以外,还有容器重启等事件告警、应用访问失败等自定义的监控指标告警。 CCE的云原生告警能力是由 AOM 服务提供的,支持指标和事件的告警。同时,CCE集群详情中增加了告警中心能力,能支持快速配置资源等常用告警和告警查看。 图1 告警中心架构 告警中心 基于AOM服务的告警能力实现,提供集群内的告警快速检索、告警快速配置的能力。用户可以通过告警中心一键配置常用的告警规则。 AOM服务 华为云 应用运维管理 服务,是云上应用的一站式立体化运维管理平台,是云上监控、告警的基础。 SMN 服务 华为云的 消息通知 服务,是云上应用发送告警或通知的依赖服务。在云原生场景中,在AOM服务触发的告警将通过SMN里面配置的短信、电子邮件、HTTP等方式发送。 父主题: 告警中心
  • 对象存储挂载参数 CCE Autopilot在挂载对象存储时默认设置了表1和表2的参数,其中表1中的参数不可取消。除了这些参数外,您还可以设置其他的对象存储挂载参数,具体请参见挂载并行文件系统。 表1 默认使用且不可取消的挂载参数 参数 参数值 描述 use_ino 无需填写 使用该选项,由obsfs分配inode编号。读写模式下自动开启。 big_writes 无需填写 配置后可更改写缓存最大值大小 nonempty 无需填写 允许挂载目录非空 allow_other 无需填写 允许其他用户访问并行文件系统 no_check_certificate 无需填写 不校验服务端证书 sigv2 无需填写 签名版本。对象桶自动使用。 public_bucket 1 设置为1时匿名挂载公共桶。对象桶只读模式下自动使用。 表2 默认使用且可修改的挂载参数 参数 参数值 描述 max_write 131072 仅配置big_writes的情况下才生效,推荐使用128KB。 ssl_verify_hostname 0 不根据主机名验证SSL证书。 max_background 100 可配置后台最大等待请求数。并行文件系统自动使用。 umask 0 配置文件权限的掩码。 例如,如果umask值为022,而目录最大权限为777,则设置umask后该目录权限为777 - 022 = 755,即rwxr-xr-x。
  • 在StorageClass中设置挂载参数 在StorageClass中设置挂载参数同样可以通过mountOptions字段实现,如下所示,mountOptions支持挂载的字段请参见对象存储挂载参数。 使用kubectl连接集群,详情请参见通过kubectl连接集群。 创建自定义的StorageClass,示例如下: kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: csi-obs-mount-option provisioner: everest-csi-provisioner parameters: csi.storage.k8s.io/csi-driver-name: obs.csi.everest.io csi.storage.k8s.io/fstype: s3fs everest.io/obs-volume-type: STANDARD reclaimPolicy: Delete volumeBindingMode: Immediate mountOptions: # 挂载参数 - umask=027 StorageClass设置好后,就可以使用这个StorageClass创建PVC,动态创建出的PV会默认带有StorageClass中设置的挂载参数,具体操作步骤请参见通过静态存储卷使用已有对象存储。
  • 使用kubectl命令登录容器 使用kubectl连接集群,详情请参见通过kubectl连接集群。 执行以下命令,查看已创建的Pod。 kubectl get pod 示例输出如下: NAME READY STATUS RESTARTS AGE nginx-59d89cb66f-mhljr 1/1 Running 0 11m 查询该Pod中的容器名称。 kubectl get po nginx-59d89cb66f-mhljr -o jsonpath='{range .spec.containers[*]}{.name}{end}{"\n"}' 示例输出如下: container-1 执行以下命令,登录到nginx-59d89cb66f-mhljr这个Pod中名为container-1的容器。 kubectl exec -it nginx-59d89cb66f-mhljr -c container-1 -- /bin/sh 如需退出容器,可执行exit命令。
  • 对象存储规格 对象存储提供了多种存储类别,从而满足客户业务对存储性能、成本的不同诉求。 并行文件系统:并行文件系统(Parallel File System)是OBS提供的一种经过优化的高性能文件系统,提供毫秒级别访问时延,以及TB/s级别带宽和百万级别的IOPS,能够快速处理高性能计算(HPC)工作负载。相较于对象桶,并行文件系统在稳定性、性能上更具优势。详细介绍请参见什么是并行文件系统。 对象桶: 标准存储:访问时延低和吞吐量高,因而适用于有大量热点文件(平均一个月多次)或小文件(小于1MB),且需要频繁访问数据的业务场景,例如:大数据、移动应用、热点视频、社交图片等场景。 低频访问存储:适用于不频繁访问(平均一年少于12次)但在需要时也要求快速访问数据的业务场景,例如:文件同步/共享、企业备份等场景。与标准存储相比,低频访问存储有相同的数据持久性、吞吐量以及访问时延,且成本较低,但是可用性略低于标准存储。 关于对象存储的详细介绍,请以对象存储类别为准。
  • 对象存储介绍 对象存储服务 (Object Storage Service,OBS)提供海量、安全、高可靠、低成本的数据存储能力,可供用户存储任意类型和大小的数据。适合企业备份/归档、 视频点播 、视频监控等多种数据存储场景。 标准接口:具备标准Http Restful API接口,用户必须通过编程或第三方工具访问对象存储。 数据共享:服务器、嵌入式设备、IOT设备等所有调用相同路径,均可访问共享的对象存储数据。 公共/私有网络:对象存储数据允许在公网访问,满足互联网应用需求。 容量与性能:容量无限制,性能较高(IO读写时延10ms级)。 应用场景:适用于(基于OBS界面、OBS工具、OBS SDK等)的一次上传共享多读(ReadOnlyMany)的各种工作负载(Deployment/StatefulSet)和普通任务(Job)使用,主要面向大数据分析、静态网站托管、在线视频点播、基因测序、智能视频监控、备份归档、企业云盘(网盘)等场景。
  • 性能说明 容器负载挂载对象存储时,每挂载一个对象存储卷,后端会产生一个常驻进程。当负载使用对象存储数过多或大量读写对象存储文件时,常驻进程会占用大量内存,部分场景下内存消耗量参考表1,为保证负载稳定运行,建议负载使用的对象存储卷数量不超过其申请的内存GiB数量,如负载的申请的内存规格为4GiB,则建议其使用的对象存储数不超过4。 表1 单个对象存储常驻进程内存消耗 测试项目 内存消耗 长稳运行 约50m 2并发写10M文件 约110m 4并发写10M文件 约220m 单写100G文件 约300m
  • 使用场景 根据使用场景不同,对象存储支持以下挂载方式: 通过静态存储卷使用已有对象存储:即静态创建的方式,需要先使用已有的对象存储创建PV,然后通过PVC在工作负载中挂载存储。适用于已有可用的底层存储或底层存储需要包周期的场景。 通过动态存储卷使用对象存储:即动态创建的方式,无需预先创建对象存储,在创建PVC时通过指定存储类(StorageClass),即可自动创建对象存储和对应的PV对象。适用于无可用的底层存储,需要新创建的场景。
  • 操作步骤 登录CCE控制台,单击集群名称进入集群。 查看集群总览页,在右边“连接信息”下证书认证一栏,单击“下载”。 图1 获取证书 在弹出的“证书获取”窗口中,根据系统提示选择证书的过期时间并下载集群X509证书。 下载的证书包含client.key、client.crt、ca.crt三个文件,请妥善保管您的证书,不要泄露。 集群中容器之间互访不需要证书。 使用集群证书调用Kubernetes原生API。 例如使用curl命令调用接口查看Pod信息,如下所示,其中*****:5443为集群API Server的内网或公网地址。 curl --cacert ./ca.crt --cert ./client.crt --key ./client.key https://*****:5443/api/v1/namespaces/default/pods/ 更多集群接口请参见Kubernetes API。
  • 约束与限制 在Kubernetes中,外部用户及内部组件频繁的数据更新操作采用乐观并行的控制方法。通过定义资源版本(resourceVersion)实现乐观锁,资源版本字段包含在对象的元数据(metadata)中。这个字段标识了对象的内部版本号,且对象被修改时,该字段将随之修改。kube-apiserver可以通过该字段判断对象是否已经被修改。当包含resourceVersion的更新请求到达apiserver,服务器端将对比请求数据与服务器中数据的资源版本号,如果不一致,则表明在本次更新提交时,服务端对象已被修改,此时apiserver将返回冲突错误(409)。客户端需重新获取服务端数据,重新修改后再次提交到服务器端;而资源配额对每个命名空间的资源消耗总量提供限制,并且会记录集群中的资源信息,因此开启资源配额后,在大规模并发场景下创建资源冲突概率会变高,会影响批创资源性能。