华为云用户手册

  • 操作步骤 登录弹性云服务器控制台,找到CCE集群中的节点对应的弹性云服务器,单击云服务器名称,进入详情页面。 在“安全组”页签下,单击“更改安全组规则”。 图1 更改安全组规则 在打开的页面中单击“入方向规则”页签,单击“添加规则”,为云服务器添加入方向规则,详细配置请参见图2,单击“确定”。 您只需为工作负载所在集群下的任意一个节点更改安全组规则,请添加规则即可,不要修改原有的安全组规则。 安全组需放通网段100.125.0.0/16流量。 图2 添加安全组规则
  • 主要功能 云容器引擎支持对容器应用的全生命周期管理,具有以下功能: 集群管理 通过控制台一键创建Kubernetes集群,支持跨可用区高可用。 一站式容器管理 容器应用全生命周期管理。 高性能容器隧道网络、VPC网络、云原生网络2.0等容器网络。 云硬盘EVS、弹性文件存储SFS、对象存储OBS等持久化存储支持。 资源、应用、容器多维度监控。 多样化的日志报表统计。 基于角色的权限管理和容器运行时安全。 应用市场内容 丰富的Helm chart组件。 对接开源镜像中心和华为云容器镜像服务,支持自定义镜像和共享镜像。 开发者服务 提供OpenAPI和社区原生API。 提供Kubectl插件和社区原生Kubectl工具。
  • 名词解释 使用云容器引擎服务,会涉及到以下基本概念: 集群:是指容器运行所需云资源的集合,包含了若干台云服务器、负载均衡器等云资源。 实例(Pod):由相关的一个或多个容器构成一个实例,这些容器共享相同的存储和网络空间。 工作负载:Kubernetes资源对象,用于管理Pod副本的创建、调度以及整个生命周期的自动控制。 Service:由多个相同配置的实例(Pod)和访问这些实例(Pod)的规则组成的微服务。 Ingress:Ingress是用于将外部HTTP(S)流量路由到服务(Service)的规则集合。 Helm应用:Helm是管理Kubernetes应用程序的打包工具,提供了Helm Chart在指定集群内图形化的增删改查。 镜像仓库:用于存放Docker镜像,Docker镜像用于部署容器服务。 您在使用前可以了解更多Kubernetes相关知识,具体请参见https://kubernetes.io/docs/concepts/。
  • CCE发布Kubernetes版本说明 为了能够方便您使用稳定又可靠的Kubernetes版本,请您务必在维护周期结束之前升级您的Kubernetes集群。 CCE在发布Kubernetes最新版本后,会对该版本所做的变更进行说明。详情请参见表1。 表1 集群版本差异说明 升级前版本 目标版本 说明 v1.21 v1.23 社区v1.21与v1.23版本之间的CHANGELOG v1.22到v1.23的变化: https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.23.md v1.21到v1.22的变化: https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.22.md v1.19 v1.21 社区v1.19与v1.21版本之间的CHANGELOG v1.20到v1.21的变化: https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.21.md v1.19到v1.20的变化: https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.20.md v1.17 v1.19 社区v1.17与v1.19版本之间的CHANGELOG v1.18到v1.19的变化: https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.19.md v1.17到v1.18的变化: https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.18.md v1.15 v1.17 社区v1.15与v1.17版本之间的CHANGELOG v1.16到v1.17的变化: https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.17.md v1.15到v1.16的变化: https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.16.md v1.13 v1.15 社区v1.13与v1.15版本之间的CHANGELOG v1.14到v1.15的变化: https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.15.md v1.13到v1.14的变化: https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.14.md 集群版本由v1.13升级到v1.15后,v1.13版本集群中的Flexvolume容器存储插件(storage-driver)能力将由v1.15的CSI插件(Everest,插件版本v1.1.6及以上)接管,接管后原有功能保持不变,但请注意不要新建Flexvolume类型的存储,否则将导致部分存储功能异常。 父主题: 集群升级
  • 安装插件 本插件为系统默认安装,若因特殊情况卸载后,可参照如下步骤重新安装。 登录CCE控制台,单击左侧导航栏的“插件管理”,在“插件市场”页签下,单击“everest”插件下的“安装插件”。 在安装插件页面,选择安装的集群和插件版本,单击“下一步:规格配置”。 该插件可配置“单实例”或“高可用”规格,选择后单击“安装”。 待插件安装完成后,单击“返回”,在“插件实例”页签下,选择对应的集群,可查看到运行中的实例,这表明该插件已在当前集群的各节点中安装。
  • 升级插件 登录CCE控制台,在左侧导航栏中选择“插件管理”,在“插件实例”页签下,选择对应的集群,单击“everest”下的“ 升级”。 如果升级按钮处于冻结状态,则说明当前插件版本是最新的版本,不需要进行升级操作。 升级everest插件时,会替换原先节点上的旧版本的everest插件,安装最新版本的everest插件以实现功能的快速升级。 一般场景下,升级插件时参数配置使用默认即可。若对挂卷性能有要求,请参见插件参数说明中的说明。 在基本信息页面选择插件版本,单击“下一步”。 该插件可配置“单实例”或“高可用”规格,选择后单击“升级”即可升级“everest”插件。
  • 约束与限制 集群版本由v1.13升级到v1.15后,v1.13版本集群中的Flexvolume容器存储插件(storage-driver)能力将由v1.15的CSI插件(Everest,插件版本v1.1.6及以上)接管,接管后原有功能保持不变。CSI和Flexvolume能力对比请参见CSI和Flexvolume存储插件的区别。 插件版本为1.2.0的Everest优化了使用OBS存储时的密钥认证功能,低于该版本的Everest插件在升级完成后,需要重启集群中使用OBS存储的全部工作负载,否则工作负载使用存储的能力将受影响! v1.15及以上版本的集群默认安装本插件,v1.13及以下版本集群创建时默认安装storage-driver插件。
  • 插件参数说明 everest 1.2.26版本针对大批量挂EVS卷的性能做了优化,提供了如下3个参数供用户配置。 csi_attacher_worker_threads:everest插件中同时处理挂EVS卷的worker数,默认值为“60”。 csi_attacher_detach_worker_threads:everest插件中同时处理卸载EVS卷的worker数,默认值均为“60”。 volume_attaching_flow_ctrl:everest插件在1分钟内可以挂载EVS卷的最大数量,此参数的默认值“0”表示everest插件不做挂卷限制,此时挂卷性能由底层存储资源决定。 上述三个参数由于存在关联性且与集群所在局点的底层存储资源限制有关,当您对大批量挂卷的性能有要求(大于500EVS卷/分钟)时,请联系客服,在指导下进行配置,否则可能会因为参数配置不合理导致出现everest插件运行不正常的情况。
  • 约束与限制 关于NAT网关的使用,您需要注意以下几点: VPC网络模型集群不支持集群内容器访问externalTrafficPolicy为local模式的DNAT Service。 同一个NAT网关下的多条规则可以复用同一个弹性公网IP,不同网关下的规则必须使用不同的弹性公网IP。 每个VPC支持的NAT网关数为1。 用户不能在VPC下手动添加默认路由。 VPC内的每个子网只能添加一条SNAT规则。 SNAT规则和DNAT规则一般面向不同的业务,如果使用相同的EIP,会面临业务相互抢占问题,请尽量避免。SNAT规则不能和全端口的DNAT规则共用EIP。 DNAT规则不支持将弹性公网IP绑定到虚拟IP。 当云主机同时配置弹性公网IP服务和NAT网关服务时,数据均通过弹性公网IP转发。 SNAT规则中添加的自定义网段,对于虚拟私有云的配置,必须是虚拟私有云子网网段的子集,不能相等。 SNAT规则中添加的自定义网段,对于云专线的配置,必须是云专线侧网段,且不能与虚拟私有云侧的网段冲突。 当执行云服务器底层资源操作(如变更规格)时,会导致已配置的NAT规则失效,需要删除后重新配置。 创建service后,如果服务亲和从集群级别切换为节点级别,连接跟踪表将不会被清理,建议用户创建service后不要修改服务亲和属性,如需修改请重新创建service。
  • 使用kubectl挂载主机路径 CCE支持使用kubectl将容器所在宿主机的文件目录挂载到容器指定的挂载点中。 请参见通过kubectl连接集群,使用kubectl连接集群。 执行如下命令,配置名为“hostPath-pod-example.yaml”的创建Pod的yaml文件。 touch hostPath-pod-example.yaml vi hostPath-pod-example.yaml 在无状态工作负载中挂载主机路径,示例如下: apiVersion: apps/v1 kind: Deployment metadata: name: hostpath-pod-example namespace: default spec: replicas: 1 selector: matchLabels: app: hostpath-pod-example template: metadata: labels: app: hostpath-pod-example spec: containers: - image: nginx name: container-0 volumeMounts: - mountPath: /tmp name: hostpath-example imagePullSecrets: - name: default-secret restartPolicy: Always volumes: - name: hostpath-example hostPath: path: /tmp/test 表5 本地磁盘储存依赖参数说明 参数 描述 mountPath 容器内挂载路径,示例中挂载到“/tmp”路径。 hostPath 主机路径,示例中主机路径为“/tmp/test”。 “spec.template.spec.containers.volumeMounts.name ”和 “spec.template.spec.volumes.name”有映射关系,必须保持一致。 执行如下命令创建Pod。 kubectl create -f hostPath-pod-example.yaml 验证主机路径挂载 查询工作负载(以hostpath-pod-example为例)的实例名称 kubectl get po|grep hostpath-pod-example 期望输出: hostpath-pod-example-55c8d4dc59-md5d9 1/1 Running 0 35s 在容器挂载路径/tmp下创建文件test1 kubectl exec hostpath-pod-example-55c8d4dc59-md5d9 -- touch /tmp/test1 在主机路径/tmp/test/上可以见到该文件被创建 ll /tmp/test/ 预期输出: -rw-r--r-- 1 root root 0 Jun 1 16:12 test1 在主机挂载路径/tmp/test/上创建文件test2 touch /tmp/test/test2 在容器挂载路径内可以见到该文件被新建 kubectl exec hostpath-pod-example-55c8d4dc59-md5d9 -- ls -l /tmp 预期输出: -rw-r--r-- 1 root root 0 Jun 1 08:12 test1-rw-r--r-- 1 root root 0 Jun 1 08:14 test2
  • 弹性伸缩-AOM 您可以根据业务需求自行定义伸缩策略,降低人为反复调整资源以应对业务变化和高峰压力的工作量,帮助您节约资源和人力成本。 该伸缩能力由应用运维管理AOM服务提供,v1.17及以上版本的集群不支持该伸缩能力。 当前支持三种弹性伸缩策略: 告警策略:支持根据CPU/内存的设置,进行工作负载的自动伸缩。工作负载创建完成后即可设置,在CPU/内存超过或少于一定值时,自动增减实例。 定时策略:支持在特定时间点进行工作负载的自动伸缩。适用于秒杀周年庆等活动,例如在秒杀这个时间点增加一定数量的实例个数。 周期策略:支持以天、周、月为周期的伸缩策略。适用于周期性的流量变化。
  • 网络与负载均衡 表2 网络与负载均衡 高危操作 导致后果 误操作后解决方案 修改内核参数net.ipv4.ip_forward=0 网络不通 修改内核参数为 net.ipv4.ip_forward=1 修改内核参数net.ipv4.tcp_tw_recycle=1 导致nat异常 修改内核参数 net.ipv4.tcp_tw_recycle=0 节点安全组配置未放通容器CIDR的53端口udp 集群内DNS无法正常工作 参照新建集群的安全组进行修复,放通安全组。 通过ELB的控制台在CCE管理的ELB创建自定义的监听器 所做修改被CCE侧重置或Ingress故障 通过service的yaml来自动创建监听器。 通过ELB的控制台在CCE管理的ELB绑定自定义的后端 禁止手动绑定后端。 通过ELB的控制台修改CCE管理的ELB的证书 通过ingress的yaml来自动管理证书。 通过ELB的控制台修改CCE管理的ELB监听器名称 禁止修改CCE管理的ELB监听器名称。 通过ELB的控制台修改CCE管理的ELB实例、监听器、转发策略的描述 禁止修改CCE管理的ELB实例、监听器、转发策略的描述。 删除default-network的network-attachment-definitions的crd资源 容器网络不通,集群删除失败等 误删除该资源需要使用正确的配置创建default-network资源。
  • 集群/节点 表1 集群及节点高危操作 分类 高危操作 导致后果 误操作后解决方案 master节点 修改集群内节点安全组 可能导致master节点无法使用 说明: 命名规则:集群名称-cce-control-随机数 参照新建集群的安全组进行修复,放通安全组。 节点到期或被销毁 该master节点不可用 不可恢复。 重装操作系统 master组件被删除 不可恢复。 自行升级master或者etcd组件版本 可能导致集群无法使用 回退到原始版本。 删除或格式化节点/etc/kubernetes等核心目录数据 该master节点不可用 不可恢复。 更改节点IP 该master节点不可用 改回原IP。 自行修改核心组件(etcd、kube-apiserver、docker等)参数 可能导致master节点不可用 按照推荐配置参数恢复,详情请参见配置管理。 自行更换master或etcd证书 可能导致集群不可用 不可恢复。 worker节点 修改集群内节点安全组 可能导致节点无法使用 说明: 命名规则:集群名称-cce-node-随机数 参照新建集群的安全组进行修复,放通安全组。 节点被删除 该节点不可用 不可恢复。 重装操作系统 节点组件被删除,节点不可用 重置节点,具体请参见重置节点。 升级节点内核 可能导致节点无法使用或网络异常 说明: 节点运行依赖系统内核版本,如非必要,请不要使用yum update更新或重装节点的操作系统内核(使用原镜像或其它镜像重装均属高危操作) 重置节点,具体请参见重置节点。 更改节点IP 节点不可用 改回原IP。 自行修改核心组件(kubelet、kube-proxy等)参数 可能导致节点不可用、修改安全相关配置导致组件不安全等 按照推荐配置参数恢复,详情请参见配置管理。 修改操作系统配置 可能导致节点不可用 尝试还原配置项或重置节点,具体请参见重置节点。 删除/opt、/var/paas目录,删除数据盘 节点不可用 重置节点,具体请参见重置节点。 修改节点内目录权限、容器目录权限等 权限异常 不建议修改,请自行恢复。 对节点进行磁盘格式化或分区 节点不可用 重置节点,具体请参见重置节点。 在节点上安装自己的其他软件 导致安装在节点上的Kubernetes组件异常,节点状态变成不可用,无法部署工作负载到此节点 卸载已安装软件,尝试恢复或重置节点,具体请参见重置节点。
  • 使用Ingress规则 使用podSelector设置访问范围 apiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata: name: test-network-policy namespace: defaultspec: podSelector: # 规则对具有role=db标签的Pod生效 matchLabels: role: db ingress: # 表示入规则 - from: - podSelector: # 只允许具有role=frontend标签的Pod访问 matchLabels: role: frontend ports: # 只能使用TCP协议访问6379端口 - protocol: TCP port: 6379 示意图如下所示。 图1 podSelector 使用namespaceSelector设置访问范围 apiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata: name: test-network-policyspec: podSelector: # 规则对具有role=db标签的Pod生效 matchLabels: role: db ingress: # 表示入规则 - from: - namespaceSelector: # 只允许具有project=myproject标签的命名空间中的Pod访问 matchLabels: project: myproject ports: # 只能使用TCP协议访问6379端口 - protocol: TCP port: 6379 示意图如下所示。 图2 namespaceSelector
  • 在控制台创建网络策略 登录CCE控制台,单击集群名称进入集群。 在左侧导航栏中选择“服务发现”,在右侧选择“网络策略”页签,单击右上角“创建网络策略”。 策略名称:自定义输入NetworkPolicy名称。 命名空间:选择网络策略所在命名空间。 选择器:输入标签选择要关联的Pod,然后单击添加。您也可以单击“引用负载标签”直接引用已有负载的标签。 入方向规则:单击添加入方向规则,参数设置请参见表1。 表1 添加入方向规则 参数 参数说明 协议端口 请选择对应的协议类型和端口,目前支持TCP和UDP协议。 源对象命名空间 选择允许哪个命名空间的对象访问。不填写表示和当前策略属于同一命名空间。 源对象Pod标签 允许带有这个标签的Pod访问,不填写表示命名空间下全部Pod。 设置完成后,单击“确定”。
  • 通过kubectl命令行创建 本节以nginx工作负载为例,说明kubectl命令创建工作负载的方法。 请参见通过kubectl连接集群,使用kubectl连接集群。 创建一个名为nginx-deployment.yaml的描述文件。其中,nginx-deployment.yaml为自定义名称,您可以随意命名。 vi nginx-deployment.yaml 描述文件内容如下。此处仅为示例,deployment的详细说明请参见kubernetes官方文档。 apiVersion: apps/v1kind: Deploymentmetadata: name: nginxspec: replicas: 1 selector: matchLabels: app: nginx strategy: type: RollingUpdate template: metadata: labels: app: nginx spec: containers: - image: nginx #若使用“开源镜像中心”的镜像,可直接填写镜像名称;若使用“我的镜像”中的镜像,请在SWR中获取具体镜像地址。 imagePullPolicy: Always name: nginx imagePullSecrets: - name: default-secret 以上yaml字段解释如表3。 表3 deployment字段详解 字段名称 字段说明 必选/可选 apiVersion 表示API的版本号。 说明: 请根据集群版本输入: 1.17及以上版本的集群中无状态应用apiVersion格式为apps/v1 1.15及以下版本的集群中无状态应用apiVersion格式为extensions/v1beta1 必选 kind 创建的对象类别。 必选 metadata 资源对象的元数据定义。 必选 name deployment的名称。 必选 Spec 用户对deployment的详细描述的主体部分都在spec中给出。 必选 replicas 实例数量。 必选 selector 定义Deployment可管理的容器实例。 必选 strategy 升级类型。当前支持两种升级方式,默认为滚动升级。 RollingUpdate:滚动升级。 ReplaceUpdate:替换升级。 可选 template 描述创建的容器实例详细信息。 必选 metadata 元数据。 必选 labels metadata.labels定义容器标签。 可选 spec: containers image(必选):容器镜像名称。 imagePullPolicy(可选):获取镜像的策略,可选值包括Always(每次都尝试重新下载镜像)、Never(仅使用本地镜像)、IfNotPresent(如果本地有该镜像,则使用本地镜像,本地不存在时下载镜像),默认为Always。 name(必选):容器名称。 必选 imagePullSecrets Pull镜像时使用的secret名称。若使用私有镜像,该参数为必选。 需要Pull SWR容器镜像仓库的镜像时,参数值固定为default-secret。 当Pull第三方镜像仓库的镜像时,需设置为创建的secret名称。 可选 创建deployment。 kubectl create -f nginx-deployment.yaml 回显如下表示已开始创建deployment。 deployment "nginx" created 查看deployment状态。 kubectl get deployment deployment状态显示为Running,表示deployment已创建成功。 NAME READY UP-TO-DATE AVAILABLE AGE nginx 1/1 1 1 4m5s 参数解析: NAME:pod的名称 READY:已经部署完毕的pod副本数 STATUS:状态 RESTARTS:重启次数 AGE:已经运行的时间 若工作负载(即deployment)需要被访问(集群内访问或节点访问),您需要设置访问方式,具体请参见网络管理创建对应服务。
  • 通过kubectl命令行创建 本节以etcd为例来进行说明。 请参见通过kubectl连接集群,使用kubectl连接集群。 创建一个名为etcd-statefulset.yaml的文件。 其中,etcd-statefulset.yaml为自定义名称,您可以随意命名。 vi etcd-statefulset.yaml 以下内容仅为示例,若需要了解statefulset的详细内容,请参考kubernetes官方文档。 apiVersion: apps/v1kind: StatefulSetmetadata: name: etcdspec: replicas: 2 selector: matchLabels: app: etcd serviceName: etcd-svc template: metadata: labels: app: etcd spec: containers: - env: - name: PAAS_APP_NAME value: tesyhhj - name: PAAS_NAMESPACE value: default - name: PAAS_PROJECT_ID value: 9632fae707ce4416a0ab1e3e121fe555 image: etcd #若使用“开源镜像中心”的镜像,可直接填写镜像名称;若使用“我的镜像”中的镜像,请在SWR中获取具体镜像地址。 imagePullPolicy: IfNotPresent name: container-0 updateStrategy: type: RollingUpdate vi etcd-headless.yaml apiVersion: v1kind: Servicemetadata: labels: app: etcd name: etcd-svcspec: clusterIP: None ports: - name: etcd-svc port: 3120 protocol: TCP targetPort: 3120 selector: app: etcd sessionAffinity: None type: ClusterIP 创建工作负载以及对应headless服务。 kubectl create -f etcd-statefulset.yaml 回显如下,表示有状态工作负载(stateful)已创建成功。 statefulset.apps/etcd created kubectl create -f etcd-headless.yaml 回显如下,表示对应headless服务已创建成功。 service/etcd-svc created 若工作负载需要被访问(集群内访问或节点访问),您需要设置访问方式,具体请参见网络管理创建对应服务。
  • 集群内使用ELB地址无法访问Service说明 当LoadBalancer Service设置了服务亲和为节点级别,即externalTrafficPolicy取值为Local时,在使用中可能会碰到从集群内部(节点上或容器中)使用ELB地址访问不通的情况。 这是因为创建LoadBalancer Service时,kube-proxy会把ELB的访问地址(external-ip)添加到iptables或IPVS中,当在集群内部访问ELB地址时不会经过ELB,而是kube-proxy直接转发。不同容器网络模型和服务转发模式下会有情况不同。 解决这个问题通常有如下办法: (推荐)在集群内部访问使用Service的ClusterIP或服务域名访问。 将Service的externalTrafficPolicy设置为Cluster,即集群级别服务亲和。不过需要注意这会影响源地址保持。 apiVersion: v1 kind: Servicemetadata: annotations: kubernetes.io/elb.class: union kubernetes.io/elb.autocreate: '{"type":"public","bandwidth_name":"cce-bandwidth","bandwidth_chargemode":"traffic","bandwidth_size":5,"bandwidth_sharetype":"PER","eip_type":"5_bgp","name":"james"}' labels: app: nginx name: nginx spec: externalTrafficPolicy: Cluster ports: - name: service0 port: 80 protocol: TCP targetPort: 80 selector: app: nginx type: LoadBalancer 使用Service的pass-through特性,使用ELB地址访问时绕过kube-proxy,先访问ELB,经过ELB再访问到负载。具体请参见LoadBalancer类型Service使用pass-through能力。 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":"traffic","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
  • ELB转发说明 LoadBalancer类型Service创建完后,可以在ELB控制台查看ELB实例的监听器转发规则,如下所示。 图5 ELB转发说明 可以看到这个ELB实例创建了一个监听器,其后端服务器为Pod所在的节点,后端服务器端口为Service的NodePort(节点端口)。当有流量通过ELB请求时,会转发给Pod所在节点IP:节点端口,也就是访问到了Service,从而访问到Pod,这跟操作场景中所述是一致的。
  • Service使用HTTP Service使用HTTP仅1.21及以上版本集群支持。 Service支持使用ELB的7层能力,共享型和独享型ELB都支持对接。独享型ELB实例有如下限制: 对接已有的独享型ELB实例,需要独享型ELB实例同时支持4层和7层的flavor,否则会功能不可用。 使用自动创建的ELB实例,注意同时使用独享型ELB实例的4层和7层能力,需要在kubernetes.io/elb.autocreate的annotation中指定4层和7层flavor。 使用ELB的7层能力时,需要添加如下annotation: kubernetes.io/elb.protocol-port: "https:443,http:80" protocol-port的取值需要和service的spec.ports字段中的端口对应,格式为protocol:port,port中的端口会匹配service.spec.ports中端口,并将该端口发布成对应的protocol协议。 kubernetes.io/elb.cert-id: "17e3b4f4bc40471c86741dc3aa211379" cert-id内容为ELB证书管理的证书ID,当protocol-port指定了https协议,ELB监听器的证书会设置为cert-id证书,当发布多个HTTPS的服务,会使用同一份证书。 配置示例如下,其中spec.ports中两个端口与kubernetes.io/elb.protocol-port中对应,443端口、80端口分别发布成HTTPS、HTTP协议。 apiVersion: v1kind: Servicemetadata: annotations: kubernetes.io/elb.autocreate: ' { "type": "public", "bandwidth_name": "cce-bandwidth-1634816602057", "bandwidth_chargemode": "traffic", "bandwidth_size": 5, "bandwidth_sharetype": "PER", "eip_type": "5_bgp", "available_zone": [ "cn-north-4b" ], "l7_flavor_name": "L7_flavor.elb.s2.small", "l4_flavor_name": "L4_flavor.elb.s1.medium" }' kubernetes.io/elb.class: performance kubernetes.io/elb.protocol-port: "https:443,http:80" kubernetes.io/elb.cert-id: "17e3b4f4bc40471c86741dc3aa211379" labels: app: nginx name: test name: test namespace: defaultspec: ports: - name: cce-service-0 port: 443 protocol: TCP targetPort: 80 - name: cce-service-1 port: 80 protocol: TCP targetPort: 80 selector: app: nginx version: v1 sessionAffinity: None type: LoadBalancer 使用上面的示例创建Service,在新建的ELB实例中可以看到创建了443端口和80端口的监听器。
  • 操作场景 负载均衡( LoadBalancer )可以通过弹性负载均衡从公网访问到工作负载,与弹性IP方式相比提供了高可靠的保障,一般用于系统中需要暴露到公网的服务。 负载均衡访问方式由公网弹性负载均衡服务地址以及设置的访问端口组成,例如“10.117.117.117:80”。 在访问时从ELB过来的流量会先访问到节点,然后通过Service转发到Pod。 图1 负载均衡( LoadBalancer )
  • 约束与限制 CCE中的负载均衡 ( LoadBalancer )访问类型使用弹性负载均衡 ELB提供网络访问,存在如下产品约束: 自动创建的ELB实例建议不要被其他资源使用,否则会在删除时被占用,导致资源残留。 1.15及之前版本集群使用的ELB实例请不要修改监听器名称,否则可能导致无法正常访问。 创建service后,如果服务亲和从集群级别切换为节点级别,连接跟踪表将不会被清理,建议用户创建service后不要修改服务亲和属性,如需修改请重新创建service。 当服务亲和设置为节点级别(即externalTrafficPolicy为local)时,集群内部可能使用ELB地址访问不通,具体情况请参见集群内使用ELB地址无法访问Service说明。 CCE Turbo集群仅支持集群级别服务亲和。 独享型ELB仅支持1.17及以上集群。 独享型ELB规格需要为网络型(TCP/UDP),且网络类型必须支持私网。如果需要Service支持HTTP,则独享型ELB规格需要为网络型(TCP/UDP)和应用型(HTTP)。 使用控制台创建LoadBalancer类型Service时会自动生成一个节点端口(nodeport),端口号随机。使用kubectl创建LoadBalancer类型Service时,如不指定节点端口,也会随机生成一个节点端口,端口号随机。 使用CCE集群时,如果LoadBalancer类型Service的服务亲和类型为集群级别(cluster),当请求进入到集群时,会使用SNAT分发到各个节点的节点端口(nodeport),不能超过节点可用的nodeport数量,而服务亲和为节点级别(local)则无此约束。使用CCE Turbo集群时,如果是使用共享型ELB依然有此约束,而独享型ELB无此约束,建议使用CCE Turbo时配合使用独享型ELB。 集群服务转发模式为IPVS时,不支持配置节点的IP作为Service的externalIP,会导致节点不可用。
  • 相关操作 通过命令行工具连接集群:请参见通过kubectl连接集群。 添加节点:集群创建完成后,若您需要为集群添加更多节点,请参见购买节点。 登录节点:请参见登录节点。 创建命名空间:同个集群内可创建多个命名空间,形成逻辑上的不同分组,便于不同的分组在共享使用集群资源时还能被分别管理。若您需要为集群创建命名空间,请参见命名空间。 创建工作负载:集群创建完成后,您可以使用镜像创建一个可公网访问的应用,请参见创建无状态负载(Deployment)或创建有状态负载(StatefulSet)。 单击已成功创建的集群名称,进入“集群详情”页可查看集群详情。 表2 已创建的集群详情 页签类别 说明 集群详情 可查看该集群的详情及运行状态等。 监控 可查看集群下全部节点的CPU和内存分配率(即分配量的最大值),以及控制节点的CPU和内存使用率、控制节点规格等信息。 事件 可以直接在“事件”页签下查看集群的事件。 可以设置查询条件,比如设置事件产生的时间段或搜索事件名称,查看相关事件。 说明: 由于版本更新演进,旧版Console不再支持查看新集群的事件,请前往新版Console使用。 弹性扩容 您可以根据实际业务需要对集群的工作节点进行扩容和缩容,详情请参见集群弹性扩容。 v1.17版本的集群不再支持AOM提供的弹性伸缩机制,请使用节点池功能进行弹性伸缩,详情请参见节点池概述。 kubectl 若您需要从客户端计算机连接到kubernetes集群,请使用kubernetes命令行客户端kubectl,详情请参见通过kubectl连接集群。 资源标签 通过为资源添加标签,可以对资源进行自定义标记,实现资源的分类。 您可以在TMS中创建“预定义标签”,预定义标签对所有支持标签功能的服务资源可见,通过使用预定义标签可以提升标签创建和迁移效率。具体请参见创建预定义标签。 CCE服务会自动帮您创建CCE-Dynamic-Provisioning-Node=节点id的标签,允许增加5个标签。 Istioctl 在集群开启istio服务网格功能后,您使用Istio命令行工具Istioctl配置多种路由策略,从而管理服务流量,包括流量转移、故障注入、限流熔断等。详情请参见启用istio。
  • 约束与限制 创建节点过程中会使用域名方式从OBS下载软件包,需要能够使用云上内网DNS解析OBS域名,否则会导致创建不成功。为此,节点所在子网需要配置为内网DNS地址,从而使得节点使用内网DNS。在创建子网时DNS默认配置为内网DNS,如果您修改过子网的DNS,请务必确保子网下的DNS服务器可以解析OBS服务域名,否则需要将DNS改成内网DNS。 单Region下单用户可创建的集群总数限制为50个,如果配额不满足业务需求,请到“我的配额”提交申请。 集群一旦创建以后,不支持变更以下项: 变更集群类型,例如“鲲鹏集群”变更为“CCE集群”。 变更集群的控制节点数量。 变更控制节点可用区。 变更集群的网络配置,如所在的虚拟私有云VPC、子网、容器网段、服务网段、IPv6、kubeproxy代理(转发)模式。 变更网络模型,例如“容器隧道网络”更换为“VPC网络”。 更多内容请参见约束与限制。
  • 约束与限制 创建节点过程中会使用域名方式从OBS下载软件包,需要能够使用云上内网DNS解析OBS域名,否则会导致创建不成功。为此,节点所在子网需要配置为内网DNS地址,从而使得节点使用内网DNS。在创建子网时DNS默认配置为内网DNS,如果您修改过子网的DNS,请务必确保子网下的DNS服务器可以解析OBS服务域名,否则需要将DNS改成内网DNS。 仅支持创建KVM虚拟化类型的节点,非KVM虚拟化类型的节点创建后无法正常使用。 集群中的节点一旦创建后不可变更可用区。 集群中通过“按需计费”模式购买的节点,在CCE“节点管理”中进行删除操作后将会直接被删除;通过“包年/包月”模式购买的节点不能直接删除,请通过页面右上角“费用-我的订单”执行资源退订操作。 GPU能力以插件的方式外接提供,需要您在“插件管理”中安装GPU-beta插件。 网络模式选择“容器隧道网络”时,只能添加同一类型的节点,即全部为虚拟机节点或全部为裸金属节点,且集群版本需要选择v1.13.10或以上。 网络模式选择“VPC网络”时,支持同时管理虚拟机节点和裸金属节点,集群版本需要选择v1.11.7或以上。
  • 插件简介 Kubernetes通过kube-proxy服务实现了Service的对外发布及负载均衡,它的各种方式都是基于传输层实现的。在实际的互联网应用场景中,不仅要实现单纯的转发,还有更加细致的策略需求,如果使用真正的负载均衡器更会增加操作的灵活性和转发性能。 基于以上需求,Kubernetes引入了资源对象Ingress,Ingress为Service提供了可直接被集群外部访问的虚拟主机、负载均衡、SSL代理、HTTP路由等应用层转发功能。 Kubernetes官方发布了基于Nginx的Ingress控制器,nginx-ingress是一款使用configmap来存储nginx配置的插件,nginx ingress controller会将ingress生成一段nginx的配置,将这个配置通过Kubernetes API写到Nginx的Pod中,然后reload完成nginx的配置修改和更新。 nginx-ingress插件直接使用社区模板与镜像,CCE不提供额外维护,不建议用于商用场景。 开源社区地址:https://github.com/kubernetes/ingress-nginx nginx-ingress示例模板即将下线,如果您已经通过“模板市场”的“示例模板”安装过nginx-ingress,请务必卸载后再安装此插件。 安装该插件时,您可以通过“定义nginx配置”添加配置,此处的设置将会全局生效,该参数直接通过配置nginx.conf生成,将影响管理的全部Ingress,相关参数可通过configmap查找,如果您配置的参数不包含在configmap所列出的选项中将不会生效。 安装该插件后,您在CCE控制台创建Ingress时可以开启“对接Nginx”按钮,并通过“Nginx配置”下的“自定义配置”将Kubernetes annotations添加到特定的Ingress对象,以自定义其行为,Kubernetes annotations字段详情请参见Annotations。 请勿手动修改和删除CCE自动创建的ELB和监听器,否则将出现工作负载异常;若您已经误修改或删除,请卸载Nginx Ingress插件后重装。
  • 升级插件 登录CCE控制台,在左侧导航栏中选择“插件管理”,在“插件实例”页签下,选择对应的集群,单击nginx-ingress下的“ 升级”。 如果升级按钮处于冻结状态,则说明当前插件版本是最新的版本,不需要进行升级操作。 升级nginx-ingress插件时,会替换原先节点上的旧版本的nginx-ingress插件,安装最新版本的nginx-ingress插件以实现功能的快速升级。 插件升级后将重启nginx-ingress,可能导致相关业务无法访问,请在合适的时间段进行升级。 在“基本信息”页面选择插件版本,单击“下一步”。 在“规格配置”步骤中,参照表1设置服务选型参数,其中带“*”的参数为必填参数。 完成配置参数后,单击“升级”即可升级nginx-ingress插件。
  • 工作原理 Nginx Ingress由资源对象Ingress、Ingress控制器、Nginx三部分组成,Ingress控制器用以将Ingress资源实例组装成Nginx配置文件(nginx.conf),并重新加载 Nginx使变更的配置生效。当它监听到Service中Pod变化时通过动态变更的方式实现Nginx上游服务器组配置的变更,无须重新加载Nginx进程。工作原理如图1所示。 Ingress:一组基于域名或URL把请求转发到指定Service实例的访问规则,是Kubernetes的一种资源对象,Ingress实例被存储在对象存储服务etcd中,通过接口服务被实现增、删、改、查的操作。 Ingress控制器(Ingress controller):用以实时监控资源对象Ingress、Service、End-point、Secret(主要是TLS证书和Key)、Node、ConfigMap的变化,自动对Nginx进行相应的操作。 Nginx:实现具体的应用层负载均衡及访问控制。 图1 Nginx Ingress工作原理
  • 云审计服务支持的CCE操作列表 表1 云审计服务支持的CCE操作列表 操作名称 资源类型 事件名称 创建用户委托 集群 createUserAgencies 创建集群 集群 createCluster 创建包周期集群 集群 createCluster/createPeriodicCluster 更新集群描述 集群 updateCluster 升级集群 集群 clusterUpgrade 删除集群 集群 claimCluster/deleteCluster 下载集群证书 集群 getClusterCertByUID 绑定、解绑eip 集群 operateMasterEIP 集群休眠唤醒、节点纳管重置(V2) 集群 operateCluster 集群休眠(V3) 集群 hibernateCluster 集群唤醒(V3) 集群 awakeCluster 按需集群规格变更 集群 resizeCluster 包周期集群规格变更 集群 resizePeriodCluster 修改集群配置 集群 updateConfiguration 创建节点池 节点池 createNodePool 更新节点池 节点池 updateNodePool 删除节点池 节点池 claimNodePool 迁移节点池 节点池 migrateNodepool 修改节点池配置 节点池 updateConfiguration 创建节点 节点 createNode 创建包周期节点 节点 createPeriodNode 删除集群下所有节点 节点 deleteAllHosts 删除单个节点 节点 deleteOneHost/claimOneHost 更新节点描述 节点 updateNode 创建插件实例 插件实例 createAddonInstance 删除插件实例 插件实例 deleteAddonInstance 上传模板 模板 uploadChart 更新模板 模板 updateChart 删除模板 模板 deleteChart 创建模板实例 模板实例 createRelease 升级模板实例 模板实例 updateRelease 删除模板实例 模板实例 deleteRelease 创建ConfigMap K8S资源 createConfigmaps 创建DaemonSet K8S资源 createDaemonsets 创建Deployment K8S资源 createDeployments 创建Event K8S资源 createEvents 创建Ingress K8S资源 createIngresses 创建Job K8S资源 createJobs 创建namespace K8S资源 createNamespaces 创建Node K8S资源 createNodes 创建PersistentVolumeClaim K8S资源 createPersistentvolumeclaims 创建Pod K8S资源 createPods 创建ReplicaSet K8S资源 createReplicasets 创建ResourceQuota K8S资源 createResourcequotas 创建密钥 K8S资源 createSecrets 创建服务 K8S资源 createServices 创建StatefulSet K8S资源 createStatefulsets 创建卷 K8S资源 createVolumes 删除ConfigMap K8S资源 deleteConfigmaps 删除DaemonSet K8S资源 deleteDaemonsets 删除Deployment K8S资源 deleteDeployments 删除Event K8S资源 deleteEvents 删除Ingress K8S资源 deleteIngresses 删除Job K8S资源 deleteJobs 删除Namespace K8S资源 deleteNamespaces 删除Node K8S资源 deleteNodes 删除Pod K8S资源 deletePods 删除ReplicaSet K8S资源 deleteReplicasets 删除ResourceQuota K8S资源 deleteResourcequotas 删除Secret K8S资源 deleteSecrets 删除Service K8S资源 deleteServices 删除StatefulSet K8S资源 deleteStatefulsets 删除卷 K8S资源 deleteVolumes 替换指定的ConfigMap K8S资源 updateConfigmaps 替换指定的DaemonSet K8S资源 updateDaemonsets 替换指定的Deployment K8S资源 updateDeployments 替换指定的Event K8S资源 updateEvents 替换指定的Ingress K8S资源 updateIngresses 替换指定的Job K8S资源 updateJobs 替换指定的Namespace K8S资源 updateNamespaces 替换指定的Node K8S资源 updateNodes 替换指定的PersistentVolumeClaim K8S资源 updatePersistentvolumeclaims 替换指定的Pod K8S资源 updatePods 替换指定的Replicaset K8S资源 updateReplicasets 替换指定的ResourceQuota K8S资源 updateResourcequotas 替换指定的Secret K8S资源 updateSecrets 替换指定的Service K8S资源 updateServices 替换指定的Statefulset K8S资源 updateStatefulsets 替换指定的状态 K8S资源 updateStatus 上传组件模板 K8S资源 uploadChart 更新组件模板 K8S资源 updateChart 删除组件模板 K8S资源 deleteChart 创建模板应用 K8S资源 createRelease 更新模板应用 K8S资源 updateRelease 删除模板应用 K8S资源 deleteRelease 父主题: 云审计服务
  • 设置容器日志存储路径 在CCE中创建工作负载时,添加容器后,展开“容器日志”配置区域。 图1 容器日志 单击“添加日志策略”,设置自定义日志参数,配置日志策略,以nginx为例,不同工作负载根据实际情况配置。 图2 添加日志策略 存储类型有“主机路径”和“容器路径”两种类型可供选择: 表1 配置日志策略 参数 参数说明 存储类型 主机路径:HostPath模式,将主机路径挂载到指定的容器路径(挂载路径)。用户可以在节点的主机路径中查看到容器输出在挂载路径中的日志信息。 容器路径:EmptyDir模式,将节点的临时路径挂载到指定的路径(挂载路径)。临时路径中存在的但暂未被采集器上报到AOM的日志数据在Pod实例删除后会消失。 添加容器挂载 *主机路径 请输入主机的路径,如:/var/paas/sys/log/nginx 挂载路径 请输入数据存储要挂载到容器上的路径,如:/tmp 须知: 请不要挂载到系统目录下,如“/”、“/var/run”等,否则会导致容器异常。建议挂载在空目录下,若目录不为空,请确保目录下无影响容器启动的文件,否则文件会被替换,导致容器启动异常,工作负载创建失败。 挂载高危目录的情况下 ,建议使用低权限帐号启动,否则可能会造成宿主机高危文件被破坏。 AOM只采集最近修改过的前20个日志文件,且默认采集两级子目录。 AOM只采集挂载路径下的“.log”、“.trace”、“.out”文本日志文件。 容器中挂载点的权限设置方法,请参见为Pod或容器配置安全性上下文。 主机扩展路径 仅“主机路径”类型需要填写 通过实例的ID或者容器的名称扩展主机路径,实现同一个主机路径下区分来自不同容器的挂载。 会在原先的“卷目录/子目录”中增加一个三级目录。使用户更方便获取单个Pod输出的文件。 None:不配置拓展路径。 PodUID:Pod的ID。 PodName:Pod的名称。 PodUID/ContainerName:Pod的ID/容器名称。 PodName/ContainerName:Pod名称/容器名称。 采集路径 设置采集路径可以更精确的指定采集内容,当前支持以下设置方式: 不设置则默认采集当前路径下.log .trace .out文件 设置**表示递归采集5层目录下的.log .trace .out文件 设置*表示模糊匹配 例子: 采集路径为/tmp/**/test*.log表示采集/tmp目录及其1-5层子目录下的全部以test开头的.log文件。 注意: 使用采集路径功能请确认您的采集器ICAgent版本为5.12.22或以上版本。 日志转储 此处日志转储是指日志的本地绕接。 设置:AOM每分钟扫描一次日志文件,当某个日志文件超过50MB时,会立即对其转储(转储时会在该日志文件所在的目录下生成一个新的zip文件。对于一个日志文件,AOM只保留最近生成的20个zip文件,当zip文件超过20个时,时间较早的zip文件会被删除),转储完成后AOM会将该日志文件清空。 不设置:若您在下拉列表框中选择“不设置”,则AOM不会对日志文件进行转储。 说明: AOM的日志绕接能力是使用copytruncate方式实现的,如果选择了设置,请务必保证您写日志文件的方式是append(追加模式),否则可能出现文件空洞问题。 当前主流的日志组件例如Log4j、Logback等均已经具备日志文件的绕接能力,如果您的日志文件已经实现了绕接能力,则无需设置。否则可能出现冲突。 建议您的业务自己实现绕接,可以更灵活的控制绕接文件的大小和个数。 多行日志 有些程序打印的日志存在一条完整的日志数据跨占多行(例如 Java 程序日志)情况,日志采集系统默认是按行采集。如果您想在日志采集系统中按整条显示日志,可以开启多行日志,采用时间或正则匹配的方式,当某行日志匹配上预先设置的时间格式或正则表达式,就认为是一条日志的开头,而下一个行首出现作为该条日志的结束标识符。 分行模式: 日志时间:请输入时间通配符。时间通配符填写参考示例:如日志中的时间是2017-01-01 23:59:59,按照规则应该填写:YYYY-MM-DD hh:mm:ss。 正则模式:请输入正则表达式。 添加容器挂载 单击后可配置多条容器挂载路径,即一个主机路径可对应多个容器挂载路径。 单击“确定”,并完成创建工作负载。
共100000条