华为云用户手册

  • 符合策略实例的资源定义 CPU和内存的Limit符合策略实例。 apiVersion: v1 kind: Pod metadata: name: opa-allowed labels: owner: me.agilebank.demo spec: containers: - name: opa image: openpolicyagent/opa:0.9.2 args: - "run" - "--server" - "--addr=localhost:8080" resources: limits: cpu: "100m" memory: "1Gi"
  • 策略实例示例 示例展示了匹配的对象的CPU最大为200m,内存最大为1G。 apiVersion: constraints.gatekeeper.sh/v1beta1 kind: K8sContainerLimits metadata: name: container-must-have-limits spec: match: kinds: - apiGroups: [""] kinds: ["Pod"] parameters: cpu: "200m" memory: "1Gi"
  • 策略实例示例 以下策略实例展示了策略定义生效的资源类型,parameters中的allowedHostPaths指定了字段的值。 apiVersion: constraints.gatekeeper.sh/v1beta1 kind: K8sPSPHostFilesystem metadata: name: psp-host-filesystem spec: match: kinds: - apiGroups: [""] kinds: ["Pod"] parameters: allowedHostPaths: - readOnly: true pathPrefix: "/foo"
  • 符合策略实例的资源定义 示例中hostPath中pathPrefix以/foo开头,符合策略实例。 apiVersion: v1 kind: Pod metadata: name: nginx-host-filesystem labels: app: nginx-host-filesystem-disallowed spec: containers: - name: nginx image: nginx volumeMounts: - mountPath: /cache name: cache-volume readOnly: true volumes: - name: cache-volume hostPath: path: /foo/bar
  • 不符合策略实例的资源定义 示例中hostPath中pathPrefix以/tmp开头,不符合策略实例。 apiVersion: v1 kind: Pod metadata: name: nginx-host-filesystem labels: app: nginx-host-filesystem-disallowed spec: containers: - name: nginx image: nginx volumeMounts: - mountPath: /cache name: cache-volume readOnly: true volumes: - name: cache-volume hostPath: path: /tmp # directory location on host
  • 通过控制台配置调度策略 在创建工作负载时,在“高级设置”中找到“调度策略”。 表1 节点亲和性设置 参数名 参数描述 必须满足 即硬约束,设置必须要满足的条件,对应于requiredDuringSchedulingIgnoredDuringExecution,多条规则间是一种“或”的关系,即只需要满足一条规则即会进行调度。 尽量满足 即软约束,设置尽量满足的条件,对应于preferredDuringSchedulingIgnoredDuringExecution,无论是满足其中一条或者是都不满足都会进行调度。 在“节点亲和性”、“工作负载亲和性”、“工作负载反亲和性”下单击添加调度策略。在弹出的窗口中可以直接添加策略、指定节点或指定可用区。 指定节点和指定可用区本质也是通过标签实现,只是通过控制台提供了更为便捷的操作。指定节点使用的是 kubernetes.io/hostname 标签,可用区使用的是 failure-domain.beta.kubernetes.io/zone 标签。 表2 调度策略设置 参数名 参数描述 标签名 对应节点的标签,可以使用默认的标签也可以用户自定义标签。 操作符 可以设置六种匹配关系(In, NotIn, Exists, DoesNotExist. Gt, and Lt)。 In:是否在标签值的列表中 NotIn:是否不在标签值的列表中 Exists:某个标签存在 DoesNotExist:某个标签不存在 Gt:标签的值大于某个值(字符串比较) Lt:标签的值小于某个值(字符串比较) 标签值 请填写标签值。 命名空间 仅支持在工作负载亲和/工作负载反亲和调度策略中使用。 指定调度策略生效的命名空间。 拓扑域 仅支持在工作负载亲和/工作负载反亲和调度策略中使用。 先圈定拓扑域(topologyKey)指定的范围,然后再选择策略定义的内容。 权重 仅支持在“尽量满足”策略中添加。
  • 不符合策略实例的资源定义 示例中seLinuxOptions参数不在参数列表中,不符合策略实例。 apiVersion: v1 kind: Pod metadata: name: nginx-selinux-disallowed labels: app: nginx-selinux spec: containers: - name: nginx image: nginx securityContext: seLinuxOptions: level: s1:c234,c567 user: sysadm_u role: sysadm_r type: svirt_lxc_net_t
  • 符合策略实例的资源定义 示例中seLinuxOptions参数均在参数列表中,符合策略实例。 apiVersion: v1 kind: Pod metadata: name: nginx-selinux-allowed labels: app: nginx-selinux spec: containers: - name: nginx image: nginx securityContext: seLinuxOptions: level: s0:c123,c456 role: object_r type: svirt_sandbox_file_t user: system_u
  • 策略实例示例 以下策略实例展示了策略定义生效的资源类型,parameters中的allowedSELinuxOptions定义了参数的允许列表。 apiVersion: constraints.gatekeeper.sh/v1beta1 kind: K8sPSPSELinuxV2 metadata: name: psp-selinux-v2 spec: match: kinds: - apiGroups: [""] kinds: ["Pod"] parameters: allowedSELinuxOptions: - level: s0:c123,c456 role: object_r type: svirt_sandbox_file_t user: system_u
  • 不同Region U CS 华为云集群迁移流程 在华为云UCS管理的Kubernetes集群间进行迁移,将应用程序从一个地理区域迁移到另一个地理区域,以满足数据合规性、延迟和可用性等需求。迁移流程如图1所示。 图1 迁移流程 主要包含四个步骤: 集群评估 在这个阶段,您将根据源集群的现状来评估适合迁移的目标集群类型。UCS的kspider工具能够自动收集源集群的信息,包括Kubernetes版本、规模、工作负载、存储等数据,并根据收集到的数据为您提供推荐的目标集群信息。具体请参见集群评估。 数据迁移 在这个阶段,您将把镜像和相关依赖服务的数据迁移到目标Region。镜像的跨区域迁移可以使用 容器镜像服务 SWR的“镜像同步”功能。 对于依赖服务的数据迁移,您可以查看华为云对应云产品的跨区域迁移指导来完成。具体请参见数据迁移。 应用备份 在这个阶段,您将对源Region集群中的应用进行备份。UCS的k8clone工具可以自动收集Kubernetes元数据,并将其以压缩包的形式保存到本地,从而实现集群中应用的备份。具体请参见应用备份。 应用迁移 在这个阶段,您将利用备份数据恢复的方法,将源Region集群中的应用迁移到目标Region集群。具体请参见应用迁移。 父主题: 不同Region UCS华为云集群迁移
  • 符合策略实例的资源定义 Replicas设为了3,符合策略实例。 apiVersion: apps/v1 kind: Deployment metadata: name: allowed-deployment spec: selector: matchLabels: app: nginx replicas: 3 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80
  • 不符合策略实例的资源定义 Replicas设为了100,不符合策略实例。 apiVersion: apps/v1 kind: Deployment metadata: name: disallowed-deployment spec: selector: matchLabels: app: nginx replicas: 100 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80
  • 策略实例示例 以下策略实例展示了策略定义生效的资源类型,parameters定义范围为3到50。 apiVersion: constraints.gatekeeper.sh/v1beta1 kind: K8sReplicaLimits metadata: name: replica-limits spec: match: kinds: - apiGroups: ["apps"] kinds: ["Deployment"] parameters: ranges: - min_replicas: 3 max_replicas: 50
  • 纳管节点 在安装节点使用./ucs-ctl config generator -t node -o node.csv命令生成节点安装配置文件。 将所需节点写入配置文件(使用英文逗号分隔)。配置文件参数如下: Node IP(添加节点IP) User(SSH连接用户) Password(SSH连接密码) 192.168.0.12 root root 执行节点安装命令./ucs-ctl create node -c [集群名称] -m node.csv,完成节点纳管。
  • 节点卸载 方法一: 在安装节点使用 ./ucs-ctl delete node -c [集群名称] -n [node ip1],[node ip2],… 使用-n指定具体IP,使用英文逗号分隔。 方法二: 在安装节点使用 ./ucs-ctl delete node -c [集群名称] -m node.csv 使用-m指定安装使用的节点文件,可以一次性卸载。 如果命令执行失败,请参考如何手动清理本地集群节点?处理。
  • 策略实例示例 以下策略实例展示了策略定义生效的资源类型,parameters中指定了procMount的值为Default。 apiVersion: constraints.gatekeeper.sh/v1beta1 kind: K8sPSPProcMount metadata: name: psp-proc-mount spec: match: kinds: - apiGroups: [""] kinds: ["Pod"] parameters: procMount: Default
  • 不符合策略实例的资源定义 示例中securityContext字段中的procMount为Unmasked,不符合策略实例。 apiVersion: v1 kind: Pod metadata: name: nginx-proc-mount-disallowed labels: app: nginx-proc-mount spec: containers: - name: nginx image: nginx securityContext: procMount: Unmasked
  • 符合策略实例的资源定义 示例中securityContext字段中的procMount为Default,符合策略实例。 apiVersion: v1 kind: Pod metadata: name: nginx-proc-mount-disallowed labels: app: nginx-proc-mount spec: containers: - name: nginx image: nginx securityContext: procMount: Default
  • 支持的巡检项 表1 CCE集群巡检项 巡检维度 集群巡检场景 巡检项 集群 集群资源规划能力 集群Master节点是否高可用 集群CPU的Request水位是否超过80% 集群CPU的Limit水位是否超过150% 集群内存的Request水位是否超过80% 集群内存的Limit水位是否超过150% 集群版本是否超期 集群运维能力 集群kube-prometheus-stack插件状态是否正常 集群log-agent插件状态是否正常 集群npd插件状态是否正常 集群配置 安全组配置是否正确 核心插件 coredns插件状态 coredns近24小时cpu使用率最大值是否超过80% coredns近24小时内存使用率最大值是否超过80% coredns近24小时是否存在 域名 解析失败请求次数 coredns近24小时P99请求时延是否超过5s coredns插件状态 everest插件状态 everest插件状态 everest近24小时CPU使用率最大值是否超过80% everest近24小时内存使用率最大值是否超过80% kube-prometheus-stack插件状态 kube-prometheus-stack近24小时CPU使用率最大值是否超过80% kube-prometheus-stack近24小时内存使用率最大值是否超过80% kube-prometheus-status插件状态 kube-prometheus-status近24小时是否出现OOM kube-prometheus-status在Server部署模式下,prometheus-server的PVC使用率是否超过80% log-agent插件状态 log-agent插件状态 LTS日志组、日志流是否创建成功 LTS日志组结构化是否创建成功 autoscaler插件状态 集群在开启节点池弹性扩缩容条件下,autoscaler插件状态是否可用 节点 节点状态 节点状态是否就绪 节点状态不可调度 节点kubelet状态 节点配置 节点内存的Requset是否超过80% 节点CPU的Request是否超过80% 节点内存的Limit检查是否超过150% 节点CPU的Limit检查是否超过150% 节点资源水位诊断 节点24小时内CPU使用率最大值是否超过80% 节点24小时内内存使用率最大值是否超过80% 节点磁盘使用率是否超过80% 节点PID使用量是否正常 节点24小时内是否发生OOM事件 负载 Pod状态 Pod状态检查 Pod负载状态 Pod在24小时内是否发生OOM Pod的24小时内CPU使用率最大值是否超过80% Pod的24小时内内存使用率最大值是否超过80% Pod配置 Pod中的容器是否配置Request Pod中的容器是否配置Limit Pod探针配置 Pod中的容器是否配置存活探针 Pod中的容器是否配置就绪探针 外部依赖 租户节点资源配额 租户云硬盘配额是否超过90% 租户ECS配额充足是否超过90% 表2 本地集群巡检项 巡检维度 集群巡检场景 巡检项 集群 集群资源规划能力 集群Master节点是否高可用 集群CPU的Request水位是否超过80% 集群CPU的Limit水位是否超过150% 集群内存的Request水位是否超过80% 集群内存的Limit水位是否超过150% 集群运维能力 集群kube-prometheus-stack插件状态是否正常 集群log-agent插件状态是否正常 核心插件 kube-prometheus-stack插件状态 kube-prometheus-stack近24小时CPU使用率最大值是否超过80% kube-prometheus-stack近24小时内存使用率最大值是否超过80% kube-prometheus-status插件状态 kube-prometheus-status近24小时是否出现OOM log-agent插件状态 log-agent插件状态 LTS日志组、日志流是否创建成功 LTS日志组结构化是否创建成功 节点 节点状态 节点状态是否就绪 节点状态不可调度 节点kubelet状态 节点配置 节点内存的Requset是否超过80% 节点CPU的Request是否超过80% 节点内存的Limit检查是否超过150% 节点CPU的Limit检查是否超过150% 节点资源水位诊断 节点24小时内CPU使用率最大值是否超过80% 节点24小时内内存使用率最大值是否超过80% 节点磁盘使用率是否超过80% 节点PID使用量是否正常 节点24小时内是否发生OOM事件 负载 Pod状态 Pod状态检查 Pod负载状态 Pod在24小时内是否发生OOM Pod的24小时内CPU使用率最大值是否超过80% Pod的24小时内内存使用率最大值是否超过80% Pod配置 Pod中的容器是否配置Request Pod中的容器是否配置Limit Pod探针配置 Pod中的容器是否配置存活探针 Pod中的容器是否配置就绪探针 外部依赖 租户节点资源配额 租户云硬盘配额是否超过90% 租户ECS配额充足是否超过90% 表3 附着集群、多云集群、伙伴云集群巡检项 巡检维度 集群巡检场景 巡检项 集群 集群资源规划能力 集群Master节点是否高可用 集群CPU的Request水位是否超过80% 集群CPU的Limit水位是否超过150% 集群内存的Request水位是否超过80% 集群内存的Limit水位是否超过150% 集群运维能力 集群kube-prometheus-stack插件状态是否正常 核心插件 kube-prometheus-stack插件状态 kube-prometheus-stack近24小时CPU使用率最大值是否超过80% kube-prometheus-stack近24小时内存使用率最大值是否超过80% kube-prometheus-status插件状态 kube-prometheus-status近24小时是否出现OOM 节点 节点状态 节点状态是否就绪 节点状态不可调度 节点kubelet状态 节点配置 节点内存的Requset是否超过80% 节点CPU的Request是否超过80% 节点内存的Limit检查是否超过150% 节点CPU的Limit检查是否超过150% 节点资源水位诊断 节点24小时内CPU使用率最大值是否超过80% 节点24小时内内存使用率最大值是否超过80% 节点磁盘使用率是否超过80% 节点PID使用量是否正常 节点24小时内是否发生OOM事件 负载 Pod状态 Pod状态检查 Pod负载状态 Pod在24小时内是否发生OOM Pod的24小时内CPU使用率最大值是否超过80% Pod的24小时内内存使用率最大值是否超过80% Pod配置 Pod中的容器是否配置Request Pod中的容器是否配置Limit Pod探针配置 Pod中的容器是否配置存活探针 Pod中的容器是否配置就绪探针 外部依赖 租户节点资源配额 租户云硬盘配额是否超过90% 租户ECS配额充足是否超过90%
  • 相关操作 通过UCS控制台,您还可以执行表2中的操作。 表2 相关操作 操作 说明 YAML创建 单击右上角“YAML创建”,可使用已有的YAML创建工作负载。 查看工作负载详情 单击已创建工作负载的名称,在“实例列表”页签下,可以查看Pod相关详情信息。 事件:可以设置查询条件,比如设置事件产生的时间段或搜索事件名称,查看相关事件。 容器列表:可以查看相应实例的容器名称、状态、镜像以及启停次数等。 查看YAML:可以查看相应实例的YAML文件。 编辑YAML 单击工作负载名称后的“编辑YAML”,可查看并编辑当前工作负载的YAML文件。 升级 单击工作负载名称后的“升级”。 更改工作负载信息,操作步骤与创建工作负载时一致。 单击“提交”,升级工作负载。 删除 单击工作负载名称后的“删除”,并单击“是”进行确认。 批量删除 勾选需要删除的工作负载。 单击左上角的“批量删除”。 单击“是”进行确认。
  • 使用须知 UCS的权限管理功能与当前联邦RBAC授权互不影响。使用UCS API时,前者生效;使用KubeConfig直接操作联邦时,后者生效。 在集群联邦和成员集群上分别创建的RBAC资源互相不感知、不影响。通过集群联邦入口配置的RBAC权限仅直接访问联邦时生效;直接访问成员集群时,仅成员集群上配置的RBAC生效。 在分配细粒度鉴权时,谨慎使用ClusterRole、ClusterRoleBinding等相关权限和角色配置,避免将资源查看权限赋予“Karmada-”为前缀的命名空间;建议使用Role、RoleBinding对指定用户命名空间的资源赋予权限。
  • 策略中心概述 随着公司不断增加开发和生产集群的数量,确保在日益扩大的环境中创建和执行一致的配置和安全策略变得越来越具挑战性,这可能会阻碍运维效率。为了解决这个问题,华为云UCS推出了基于OPA(Open Policy Agent)的Gatekeeper实现的策略中心功能。这一功能可以帮助您在多个集群中定义和执行一致的策略,统一资源的合规性状态。 通过策略中心,您可以创建、管理和监控跨多个集群(容器舰队)的策略实施情况。这样,您可以确保所有集群都遵循相同的安全和合规要求,从而提高运维效率。这种集中式策略管理能力使您能够更容易地应对复杂的企业环境,同时确保所有资源在任何时候都处于合规状态。华为云UCS策略中心将帮助您实现更高的运维效率和更强的安全性。 UCS策略中心的主要优势包括: 一致的策略管理 以集中、一致的方式将一组安全合规策略应用到多个容器舰队、集群中。 确保资源安全性 持续审计资源,以确保资源满足安全合规要求并且不出现违反策略的行为。 全局资源合规性视图 涵盖所有资源的全面合规性视图,大规模保护和管理集群资源。 父主题: 策略中心
  • 不符合策略实例的资源定义 示例中hostNetwork设置成了true,但是端口未在指定范围内,不符合策略实例。 apiVersion: v1 kind: Pod metadata: name: nginx-host-networking-ports-disallowed labels: app: nginx-host-networking-ports spec: hostNetwork: true containers: - name: nginx image: nginx ports: - containerPort: 9001 hostPort: 9001
  • 策略实例示例 以下策略实例展示了策略定义生效的资源类型,parameters中hostNetwork为true时,使用的端口必须在指定的端口范围内。 apiVersion: constraints.gatekeeper.sh/v1beta1 kind: K8sPSPHostNetworkingPorts metadata: name: psp-host-network-ports spec: match: kinds: - apiGroups: [""] kinds: ["Pod"] parameters: hostNetwork: bool min: 80 max: 9000
  • 符合策略实例的资源定义 示例中hostNetwork设置成了false,符合策略实例。 apiVersion: v1 kind: Pod metadata: name: nginx-host-networking-ports-allowed labels: app: nginx-host-networking-ports spec: hostNetwork: false containers: - name: nginx image: nginx ports: - containerPort: 9000 hostPort: 80
  • 相关操作 通过UCS控制台,您还可以执行表2中的操作。 表2 相关操作 操作 说明 YAML创建 单击右上角“YAML创建”,可使用已有的YAML创建配置项。 查看详情 单击配置项名称即可查看配置项数据详情。 编辑YAML 单击配置项名称后的“编辑YAML”,可查看并编辑当前配置项的YAML文件。 更新 单击配置项名称后的“更新”。 根据表1更改信息。 单击“确认”提交已修改的信息。 删除 单击配置项名称后的“删除”,并单击“是”进行确认。 批量删除 勾选需要删除的配置项。 单击左上角的“批量删除”。 单击“是”进行确认。
  • 创建配置项 登录UCS控制台,在左侧导航栏中选择“容器舰队”。 在“容器舰队”页签下找到已开通集群联邦的舰队,单击名称进入详情页。 在左侧导航栏中选择“配置项与密钥”,切换至“配置项”页签。 选择需要创建配置项的命名空间,并单击右上角“创建配置项”。 参照表1设置新增配置参数。 表1 新建配置参数说明 参数 参数说明 名称 新建的配置项名称,同一个命名空间里命名必须唯一。 命名空间 新建配置项所在的命名空间,默认为当前查看的命名空间。 描述 配置项的描述信息。 配置项数据 工作负载配置的数据可以在容器中使用,或被用来存储配置数据。 单击 ,输入键、值。其中,“键”代表配置名;“值”代表配置内容。 配置标签 标签以Key/value键值对的形式附加到各种对象上(如工作负载、节点、服务等)。 标签定义了这些对象的可识别属性,用来对它们进行管理和选择。 输入标签键、值。 单击“添加” 。 配置完成后,单击“确定”。
  • 策略实例示例 以下策略实例展示了策略定义生效的资源类型。 apiVersion: constraints.gatekeeper.sh/v1beta1 kind: K8sImageDigests metadata: name: container-image-must-have-digest spec: match: kinds: - apiGroups: [""] kinds: ["Pod"] namespaces: - "default"
  • 符合策略实例的资源定义 容器镜像包含digest,符合策略实例。 apiVersion: v1 kind: Pod metadata: name: opa-allowed spec: containers: - name: opa image: openpolicyagent/opa:0.9.2@sha256:04ff8fce2afd1a3bc26260348e5b290e8d945b1fad4b4c16d22834c2f3a1814a
  • k8clone备份使用方法 k8clone工具支持在Linux(x86、arm)和Windows环境中运行,使用方法相似。本文将以Linux(x86)环境为例进行介绍。 若使用Linux(arm)或Windows环境,请将下述命令中的k8clone-linux-amd64分别替换为k8clone-linux-arm64或k8clone-windows-amd64.exe。 在k8clone工具所在目录下执行./k8clone-linux-amd64 backup -h,可以查看k8clone工具备份的使用方法。 -k, --kubeconfig:指定kubectl的KubeConfig位置,默认是$HOME/.kube/config。kubeConfig文件:用于配置对Kubernetes集群的访问,KubeConfig文件中包含访问注册kubernetes集群所需要的认证凭据以及Endpoint(访问地址),详细介绍可参见Kubernetes文档。 -s, --api-server:Kubernetes API Server URL,默认是""。 -q, --context:Kubernetes Configuration Context,默认是""。 -n, --namespace:备份指定命名空间的云原生应用,多个命名空间用逗号分隔(如:ns1,ns2,ns3),默认是"",表示备份整个集群。 -e, --exclude-namespaces:排除指定命名空间对象的备份,不能和--namespace一起使用。 -x, --exclude-kind:排除指定资源类型的备份。 -y, --exclude-object:排除指定资源对象的备份。 -w, --exclude-having-owner-ref:排除拥有ownerReferences资源对象的备份,默认是false。 -d, --local-dir:备份数据放置的路径,默认是当前目录下k8clone-dump文件夹。 $ ./k8clone-linux-amd64 backup -h Backup Workload Data as yaml files Usage: k8clone backup [flags] Flags: -s, --api-server string Kubernetes api-server url -q, --context string Kubernetes configuration context -w, --exclude-having-owner-ref Exclude all objects having an Owner Reference -x, --exclude-kind strings Ressource kind to exclude. Eg. 'deployment' -e, --exclude-namespaces strings Namespaces to exclude. Eg. 'temp.*' as regexes. This collects all namespaces and then filters them. Don't use it with the namespace flag. -y, --exclude-object strings Object to exclude. Eg. 'configmap:kube-system/kube-dns' -h, --help help for backup -k, --kubeconfig string The kubeconfig of k8s cluster's. Default is the $HOME/.kube/config. -d, --local-dir string Where to dump yaml files (default "./k8clone-dump") -n, --namespace string Only dump objects from this namespace 示例如下: 整个集群对象的备份,默认路径为当前目录下“k8clone-dump”文件夹 ./k8clone-linux-amd64 backup 整个集群对象的备份,并指定备份数据路径 ./k8clone-linux-amd64 backup -d ./xxxx 指定命名空间对象的备份 ./k8clone-linux-amd64 backup -n default 排除命名空间对象的备份 ./k8clone-linux-amd64 backup -e kube-system,kube-public,kube-node-lease 排除指定资源类型的备份 ./k8clone-linux-amd64 backup -x endpoints,endpointslice 排除指定资源对象的备份 ./k8clone-linux-amd64 backup -y configmap:kube-system/kube-dns 排除拥有ownerReferences资源对象的备份 ./k8clone-linux-amd64 backup -w true
共100000条