华为云用户手册

  • 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 restore -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,默认是""。 -f, --restore-conf:指定restore.json的路径,默认是k8clone工具所在目录下。 -d, --local-dir:备份数据放置的路径,默认是k8clone工具所在目录下。 $ ./k8clone-linux-amd64 restore -hProcessRestore from backupUsage: k8clone restore [flags]Flags: -s, --api-server string Kubernetes api-server url -q, --context string Kubernetes configuration context -h, --help help for restore -k, --kubeconfig string The kubeconfig of k8s cluster's. Default is the $HOME/.kube/config. -d, --local-dir string Where to restore (default "./k8clone-dump.zip") -f, --restore-conf string restore conf file (default "./restore.json") 示例: ./k8clone-linux-amd64 restore -d ./k8clone-dump.zip -f ./restore.json
  • k8clone数据恢复原理 数据恢复的流程参考如下: 图1 数据恢复流程 在执行恢复操作前,需要准备一个数据恢复配置文件“restore.json”,目的是在应用恢复时自动更换PVC、StatefulSet的存储类名称,以及工作负载所使用镜像的Repository地址。 文件内容如下: { "StorageClass": "OldStorageClassName": "NewStorageClassName" //支持修改PVC、StatefulSet的StorageClassName字段 "ImageRepo": "OldImageRepo1": "NewImageRepo1", //eg:"dockerhub.com": "cn-north-4.swr.huaweicloud.com" "OldImageRepo2": "NewImageRepo2", //eg:"dockerhub.com/org1": "cn-north-4.swr.huaweicloud.com/org2" "NoRepo": "NewImageRepo3" //eg:"golang": "swr.cn-north-4.myhuaweicloud.com/paas/golang"} StorageClass:支持PVC、有状态应用VolumeClaimTemplates中存储类名称按照配置进行自动更换。 ImageRepo:支持工作负载所使用镜像的Repository地址的更换,工作负载包括Deployment(含initContainer)、StatefulSet、Orphaned Pod、Job、CronJob、Replica Set、Replication Controller、DaemonSet。
  • 启动后处理 在创建工作负载时,配置容器信息,选择“生命周期”。 在“启动后处理”页签,设置启动后处理的参数。 表3 启动后处理-参数说明 参数 说明 命令行方式 在容器中执行指定的命令。命令行可通过执行bash或执行二进制的方式实现,您可以参照示例配置需要执行的命令。 命令的格式为Command Args[1] Args[2]…(Command为系统命令或者用户自定义可执行程序,如果未指定路径则在默认路径下寻找可执行程序),如果需要执行多条命令,建议采用将命令写入脚本执行的方式。不支持后台执行和异步执行的命令。 如需要执行的命令如下: exec: command: - /install.sh - install_agent 请在执行脚本中填写: /install install_agent。这条命令表示容器创建成功后将执行install.sh。 HTTP请求方式 发起一个HTTP调用请求。配置参数如下: 路径:请求的URL路径,可选项。 端口:请求的端口,必选项。 主机地址:请求的IP地址,可选项,默认是容器所在的节点IP。
  • 停止前处理 在创建工作负载时,配置容器信息,选择“生命周期”。 在“停止前处理”页签,设置停止前处理的命令。 表4 停止前处理 参数 说明 命令行方式 在容器中执行指定的命令。命令行可通过执行bash或执行二进制的方式实现,您可以参照示例配置需要执行的命令。 命令的格式为Command Args[1] Args[2]…(Command为系统命令或者用户自定义可执行程序,如果未指定路径则在默认路径下寻找可执行程序),如果需要执行多条命令,建议采用将命令写入脚本执行的方式。 如需要执行的命令如下: exec: command: - /uninstall.sh - uninstall_agent 请在执行脚本中填写: /uninstall uninstall_agent。这条命令表示容器结束前将执行uninstall.sh。 HTTP请求方式 发起一个HTTP调用请求。配置参数如下: 路径:请求的URL路径,可选项。 端口:请求的端口,必选项。 主机地址:请求的IP地址,可选项,默认是容器所在的节点IP。
  • YAML样例 本节以nginx为例,说明kubectl命令设置容器生命周期的方法。 在以下配置文件中,您可以看到postStart命令在容器目录/bin/bash下写了个install.sh命令。 preStop执行uninstall.sh命令。 apiVersion: apps/v1kind: Deploymentmetadata: name: nginxspec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - image: nginx command: - sleep 3600 #启动命令 imagePullPolicy: Always lifecycle: postStart: exec: command: - /bin/bash - install.sh #启动后命令 preStop: exec: command: - /bin/bash - uninstall.sh #停止前命令 name: nginx imagePullSecrets: - name: default-secret
  • k8clone数据恢复原理 数据恢复的流程参考如下: 图1 数据恢复流程 在执行恢复操作前,需要准备一个数据恢复配置文件“restore.json”,目的是在应用恢复时自动更换PVC、StatefulSet的存储类名称,以及工作负载所使用镜像的Repository地址。 文件内容如下: { "StorageClass": "OldStorageClassName": "NewStorageClassName" //支持修改PVC、StatefulSet的StorageClassName字段 "ImageRepo": "OldImageRepo1": "NewImageRepo1", //eg:"dockerhub.com": "cn-north-4.swr.huaweicloud.com" "OldImageRepo2": "NewImageRepo2", //eg:"dockerhub.com/org1": "cn-north-4.swr.huaweicloud.com/org2" "NoRepo": "NewImageRepo3" //eg:"golang": "swr.cn-north-4.myhuaweicloud.com/paas/golang"} StorageClass:支持PVC、有状态应用VolumeClaimTemplates中存储类名称按照配置进行自动更换。 ImageRepo:支持工作负载所使用镜像的Repository地址的更换,工作负载包括Deployment(含initContainer)、StatefulSet、Orphaned Pod、Job、CronJob、Replica Set、Replication Controller、DaemonSet。
  • 应用恢复操作步骤 通过kubectl连接目标集群。具体方法可参考使用kubectl连接集群。 准备数据恢复配置文件:restore.json。 新建一个restore.json文件,按照格式修改,并将文件放置在k8clone工具所在目录下。 示例: { "StorageClass": { "csi-disk": "csi-disk-new" }, "ImageRepo": { "quay.io/coreos": "swr.cn-north-4.myhuaweicloud.com/paas" }} 进入k8clone工具所在目录,执行恢复命令,将备份数据恢复到目标集群。 示例: ./k8clone-linux-amd64 restore -d ./k8clone-dump.zip -f ./restore.json
  • 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 restore -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,默认是""。 -f, --restore-conf:指定restore.json的路径,默认是k8clone工具所在目录下。 -d, --local-dir:备份数据放置的路径,默认是k8clone工具所在目录下。 $ ./k8clone-linux-amd64 restore -hProcessRestore from backupUsage: k8clone restore [flags]Flags: -s, --api-server string Kubernetes api-server url -q, --context string Kubernetes configuration context -h, --help help for restore -k, --kubeconfig string The kubeconfig of k8s cluster's. Default is the $HOME/.kube/config. -d, --local-dir string Where to restore (default "./k8clone-dump.zip") -f, --restore-conf string restore conf file (default "./restore.json") 示例: ./k8clone-linux-amd64 restore -d ./k8clone-dump.zip -f ./restore.json
  • 启动命令 在默认情况下,镜像启动时会运行默认命令,如果想运行特定命令或重写镜像默认值,需要进行相应设置。 Docker的镜像拥有存储镜像信息的相关元数据,如果不设置生命周期命令和参数,容器运行时将运行镜像制作时提供的默认的命令和参数,Docker将这两个字段定义为ENTRYPOINT和 CMD。 如果在创建工作负载时填写了容器的运行命令和参数,将会覆盖镜像构建时的默认命令ENTRYPOINT、CMD,规则如下: 表1 容器如何执行命令和参数 镜像 ENTRYPOINT 镜像CMD 容器运行命令 容器运行参数 最终执行 [touch] [/root/test] 未设置 未设置 [touch /root/test] [touch] [/root/test] [mkdir] 未设置 [mkdir] [touch] [/root/test] 未设置 [/opt/test] [touch /opt/test] [touch] [/root/test] [mkdir] [/opt/test] [mkdir /opt/test] 在创建工作负载时,配置容器信息,选择“生命周期”。 在“启动命令”页签,输入运行命令和运行参数。 表2 容器启动命令 命令方式 操作步骤 运行命令 在容器中执行指定的命令。命令行可通过执行bash或执行二进制的方式实现,您可以参照示例配置需要执行的命令。 若运行命令有多个,多个命令之间用空格进行分隔。若命令本身带空格,则需要加引号("")。 说明: 多命令时,运行命令建议用/bin/sh或其他的shell,其他全部命令作为参数来传入。 运行参数 输入控制容器运行命令参数,例如--port=8080。 若参数有多个,多个参数以换行分隔。
  • 数据规划 在AWS基础设施上构建多云集群时,将自动在AWS控制台创建以下资源,请确保资源配额足够: 表1 资源数量 资源类型 EC2 NAT VPC 子网 路由表 互联网网关 弹性IP 安全组 网络ACL ELB 网络接口 存储卷 数量 3台 3个 1个 6个 7个 1个 3个 5个 1个 1个 4个 6块 表2 EC2资源规格 节点类型 数量 CPU (Cores) Mem (GiB) root盘 非root盘 备注 集群管理节点 3 8 32 100 200 t3.2xlarge型号 集群计算节点 按需 8 32 100 200 数量按需可扩展 表3 IAM 权限 权限类型 权限名称 IAMRole AWSIAMRoleNodes、AWSIAMRoleControlPlane、AWSIAMRoleControllers IAMInstanceProfile AWSIAMInstanceProfileNodes、AWSIAMInstanceProfileControlPlane、AWSIAMInstanceProfileControllers IAMManagedPolicy AWSIAMManagedPolicyCloudProviderNodes、AWSIAMManagedPolicyCloudProviderControlPlane、AWSIAMManagedPolicyControllers 父主题: 安装多云集群的业务规划
  • 策略实例示例 示例展示了该策略定义的生效类型。 apiVersion: constraints.gatekeeper.sh/v1beta1kind: K8sBlockWildcardIngressmetadata: name: block-wildcard-ingressspec: match: kinds: - apiGroups: ["extensions", "networking.k8s.io"] kinds: ["Ingress"]
  • 符合策略实例的资源定义 ingress配置的hostname不是空白或通配符类型,符合策略实例。 apiVersion: networking.k8s.io/v1kind: Ingressmetadata: name: non-wildcard-ingressspec: rules: - host: 'myservice.example.com' http: paths: - pathType: Prefix path: "/" backend: service: name: example port: number: 80
  • 不符合策略实例的资源定义 ingress配置的hostname是空白,不符合策略实例。 apiVersion: networking.k8s.io/v1kind: Ingressmetadata: name: wildcard-ingressspec: rules: - host: '' http: paths: - pathType: Prefix path: "/" backend: service: name: example port: number: 80apiVersion: networking.k8s.io/v1kind: Ingressmetadata: name: wildcard-ingressspec: rules: # Omitted host field counts as a wildcard too - http: paths: - pathType: Prefix path: "/" backend: service: name: example port: number: 80 ingress配置的hostname是包含通配符*,不符合策略实例。 apiVersion: networking.k8s.io/v1kind: Ingressmetadata: name: wildcard-ingressspec: rules: - host: '*.example.com' http: paths: - pathType: Prefix path: "/" backend: service: name: example port: number: 80
  • 工具包 在集群评估、镜像迁移、应用备份和应用迁移阶段,迁移过程已实现工具化。您需要预先下载这些工具并将它们上传到前述服务器。 对于Linux操作系统来说,使用下述工具前,需要运行chmod u+x 工具名命令(例如chmod u+x kspider-linux-amd64),授予可执行权限。 表1 准备工作 工具 说明 下载链接 备注 kspider kspider是一款用于采集源集群信息的工具,它向用户提供了集群的Kubernetes版本、规模、工作负载数量、存储以及正在使用的镜像等数据,这些信息有助于用户了解集群的当前状况,评估迁移风险,并选择合适的目标集群版本和规模。 Linux x86:https://ucs-migration.obs.cn-north-4.myhuaweicloud.com/toolkits/kspider-linux-amd64 Linux arm:https://ucs-migration.obs.cn-north-4.myhuaweicloud.com/toolkits/kspider-linux-arm64 Windows:https://ucs-migration.obs.cn-north-4.myhuaweicloud.com/toolkits/kspider-windows-amd64.exe 这些工具均支持在Linux(x86、arm)和Windows系统上运行,请根据服务器操作系统类型下载对应的工具。 image-migrator image-migrator是一个镜像迁移工具,能够自动将基于Docker Registry v2搭建的Docker镜像仓库或第三方云镜像仓库中的镜像迁移到SWR中。 Linux x86:https://ucs-migration.obs.cn-north-4.myhuaweicloud.com/toolkits/image-migrator-linux-amd64 Linux arm:https://ucs-migration.obs.cn-north-4.myhuaweicloud.com/toolkits/image-migrator-linux-arm64 Windows:https://ucs-migration.obs.cn-north-4.myhuaweicloud.com/toolkits/image-migrator-windows-amd64.exe k8clone k8clone是一个简便的Kubernetes元数据克隆工具,它可以将Kubernetes元数据(对象)保存为本地压缩包,然后将这些元数据恢复到目标集群中。 Linux x86:https://ucs-migration.obs.cn-north-4.myhuaweicloud.com/toolkits/k8clone-linux-amd64 Linux arm:https://ucs-migration.obs.cn-north-4.myhuaweicloud.com/toolkits/k8clone-linux-arm64 Windows:https://ucs-migration.obs.cn-north-4.myhuaweicloud.com/toolkits/k8clone-windows-amd64.exe
  • 符合策略实例的资源定义 示例中volumes中的类型均在上述定义的允许范围内,符合策略实例。 apiVersion: v1kind: Podmetadata: name: nginx-volume-types-allowed labels: app: nginx-volume-typesspec: containers: - name: nginx image: nginx volumeMounts: - mountPath: /cache name: cache-volume - name: nginx2 image: nginx volumeMounts: - mountPath: /cache2 name: demo-vol volumes: - name: cache-volume emptyDir: {} - name: demo-vol emptyDir: {}
  • 不符合策略实例的资源定义 示例一:CPU比例为40,不符合约束。 apiVersion: v1kind: Podmetadata: name: opa-disallowed labels: owner: me.agilebank.demospec: containers: - name: opa image: openpolicyagent/opa:0.9.2 args: - "run" - "--server" - "--addr=localhost:8080" resources: limits: cpu: "4" memory: "2Gi" requests: cpu: "100m" memory: "2Gi" 示例二:内存比例为20,不符合约束。 apiVersion: v1kind: Podmetadata: name: opa-disallowed labels: owner: me.agilebank.demospec: containers: - name: opa image: openpolicyagent/opa:0.9.2 args: - "run" - "--server" - "--addr=localhost:8080" resources: limits: cpu: "800m" memory: "2Gi" requests: cpu: "100m" memory: "100Mi"
  • 符合策略实例的资源定义 cpu比例为4,内存比例为1,符合约束。 apiVersion: v1kind: Podmetadata: name: opa-allowed labels: owner: me.agilebank.demospec: containers: - name: opa image: openpolicyagent/opa:0.9.2 args: - "run" - "--server" - "--addr=localhost:8080" resources: limits: cpu: "4" memory: "2Gi" requests: cpu: "1" memory: "2Gi"
  • 策略实例示例 以下策略实例展示了策略定义生效的资源类型,parameters的volumes字段定义了允许的类型列表。 apiVersion: constraints.gatekeeper.sh/v1beta1kind: K8sPSPVolumeTypesmetadata: name: psp-volume-typesspec: match: kinds: - apiGroups: [""] kinds: ["Pod"] parameters: volumes: # - "*" # * may be used to allow all volume types - configMap - emptyDir - projected - secret - downwardAPI - persistentVolumeClaim #- hostPath #required for allowedHostPaths - flexVolume #required for allowedFlexVolumes
  • 策略实例示例 限制容器的limit对request比例的最大值为1,cpu的limit对request比例最大值为10。 apiVersion: constraints.gatekeeper.sh/v1beta1kind: K8sContainerRatiosmetadata: name: container-must-meet-memory-and-cpu-ratiospec: match: kinds: - apiGroups: [""] kinds: ["Pod"] parameters: ratio: "1"cpuRatio: "10"
  • 不符合策略实例的资源定义 示例中volumes中的类型(hostPath)不在上述定义的允许范围内,不符合策略实例。 apiVersion: v1kind: Podmetadata: name: nginx-volume-types-disallowed labels: app: nginx-volume-typesspec: containers: - name: nginx image: nginx volumeMounts: - mountPath: /cache name: cache-volume - name: nginx2 image: nginx volumeMounts: - mountPath: /cache2 name: demo-vol volumes: - name: cache-volume hostPath: path: /tmp # directory location on host - name: demo-vol emptyDir: {}
  • YAML样例 apiVersion: apps/v1kind: Deploymentmetadata: name: env-example namespace: defaultspec: replicas: 1 selector: matchLabels: app: env-example template: metadata: labels: app: env-example spec: containers: - name: container-1 image: nginx:alpine imagePullPolicy: Always resources: requests: cpu: 250m memory: 512Mi limits: cpu: 250m memory: 512Mi env: - name: key # 自定义 value: value - name: key1 # 配置项键值导入 valueFrom: configMapKeyRef: name: configmap-example key: key1 - name: key2 # 密钥键值导入 valueFrom: secretKeyRef: name: secret-example key: key2 - name: key3 # 变量引用,用Pod定义的字段作为环境变量的值 valueFrom: fieldRef: apiVersion: v1 fieldPath: metadata.name - name: key4 # 资源引用,用Container定义的字段作为环境变量的值 valueFrom: resourceFieldRef: containerName: container1 resource: limits.cpu divisor: 1 envFrom: - configMapRef: # 配置项导入 name: configmap-example - secretRef: # 密钥导入 name: secret-example imagePullSecrets: - name: default-secret
  • 操作场景 环境变量是指容器运行环境中设定的一个变量,环境变量可以在工作负载部署后修改,为工作负载提供极大的灵活性。 通过控制台设置的环境变量与Dockerfile中的“ENV”效果相同。 容器启动后,容器中的内容不应修改。如果修改配置项(例如将容器应用的密码、证书、环境变量配置到容器中),当容器重启(例如节点异常重新调度Pod)后,会导致配置丢失,业务异常。 配置信息应通过入参等方式导入容器中,以免重启后配置丢失。 环境变量支持如下几种方式设置。 自定义:自行填写变量名称及变量值。 配置项导入:将配置项中所有键值都导入为环境变量。 配置项键值导入:将配置项中某个键的值导入作为某个环境变量的值。例如将configmap-example这个配置项中configmap_key的值configmap_value导入为环境变量key1的值,导入后容器中有一个名为key1的环境变量,其值为configmap_value。 密钥导入:将密钥中所有键值都导入为环境变量。 密钥键值导入:将密钥中某个键的值导入作为某个环境变量的值。例如将secret-example这个配置项中secret_key的值secret_value导入为环境变量key2的值,导入后容器中有一个名为key2的环境变量,其值为secret_value。 变量引用:用Pod定义的字段作为环境变量的值,例如Pod的名称。 资源引用:用Container定义的字段作为环境变量的值,例如容器的CPU限制。
  • 环境变量查看 如果configmap-example和secret-example的内容如下。 $ kubectl get configmap configmap-example -oyamlapiVersion: v1data: configmap_key: configmap_valuekind: ConfigMap...$ kubectl get secret secret-example -oyamlapiVersion: v1data: secret_key: c2VjcmV0X3ZhbHVl # c2VjcmV0X3ZhbHVl为secret_value的base64编码kind: Secret... 则进入Pod中查看的环境变量结果如下。 $ kubectl get podNAME READY STATUS RESTARTS AGEenv-example-695b759569-lx9jp 1/1 Running 0 17m$ kubectl exec env-example-695b759569-lx9jp -- printenv/ # envkey=value # 自定义环境变量key1=configmap_value # 配置项键值导入key2=secret_value # 密钥键值导入key3=env-example-695b759569-lx9jp # Pod的metadata.namekey4=1 # container1这个容器的limits.cpu,单位为Core,向上取整configmap_key=configmap_value # 配置项导入,原配置项中的键值直接会导入结果secret_key=secret_value # 密钥导入,原密钥中的键值直接会导入结果
  • 使用镜像 通过U CS 管理的集群及联邦,均支持使用镜像仓库创建工作负载。镜像上传成功后,在集群中创建工作负载时可选择“镜像创建”,以UCS接管的CCE集群为例,具体操作如下: 登录集群控制台。 在新页面的左侧导航栏中选择“工作负载”,然后单击右上角“镜像创建”按钮。 在“基本信息”栏输入工作负载参数,以创建无状态工作负载为例。 负载类型:无状态工作负载。 负载名称:负载名称可自定义。 实例数量:请根据业务需要自行选择。 描述:请输入描述信息。 时区同步:选择是否开启时区同步。开启后容器与节点使用相同时区(时区同步功能依赖容器中挂载的本地磁盘,请勿修改删除)。 在“容器配置”栏单击“选择镜像”。 在“我的镜像”页签下,选择已上传的镜像,单击“确定”。 如所选镜像为公开镜像,无需选取“镜像访问凭证”。 如所选镜像为用户在镜像仓库中上传的私有镜像,需选取“镜像访问凭证”,否则无法拉取成功。 单击“创建密钥”,可创建镜像仓库的镜像访问凭证,具体操作参见创建镜像密钥。 图2 容器配置 单击“创建工作负载”,完成创建。如您想了解更多创建工作负载的步骤,请参见无状态负载。
  • 产品功能 镜像全生命周期管理 容器镜像服务 支持镜像的全生命周期管理,包括镜像的上传、下载、删除等。 私有镜像仓库 容器 镜像服务 提供私有镜像库,并支持细粒度的权限管理,可以为不同用户分配相应的访问权限(读取、编辑、管理)。 镜像加速 容器镜像服务通过华为自主专利的镜像下载加速技术,使CCE集群下载镜像时在确保高并发下能获得更快的下载速度。 镜像仓库触发器 容器镜像服务支持容器镜像版本更新自动触发部署。您只需要为镜像设置一个触发器,通过触发器,可以在每次镜像版本更新时,自动更新使用该镜像部署的应用。 镜像安全扫描(通过集成 容器安全 HSS)
  • 策略实例示例 以下策略实例展示了策略定义生效的资源类型。 apiVersion: constraints.gatekeeper.sh/v1beta1kind: K8sPSPFSGroupmetadata: name: psp-fsgroupspec: match: kinds: - apiGroups: [""] kinds: ["Pod"] parameters: rule: "MayRunAs" #"MustRunAs" #"MayRunAs", "RunAsAny" ranges: - min: 1 max: 1000
  • 符合策略实例的资源定义 示例中fsGroup设为了500,符合策略实例。 apiVersion: v1kind: Podmetadata: name: fsgroup-disallowedspec: securityContext: fsGroup: 500 # directory will have group ID 500 volumes: - name: fsgroup-demo-vol emptyDir: {} containers: - name: fsgroup-demo image: busybox command: ["sh", "-c", "sleep 1h"] volumeMounts: - name: fsgroup-demo-vol mountPath: /data/demo
  • 不符合策略实例的资源定义 示例中fsGroup设为了2000,不符合策略实例。 apiVersion: v1kind: Podmetadata: name: fsgroup-disallowedspec: securityContext: fsGroup: 2000 # directory will have group ID 2000 volumes: - name: fsgroup-demo-vol emptyDir: {} containers: - name: fsgroup-demo image: busybox command: [ "sh", "-c", "sleep 1h" ] volumeMounts: - name: fsgroup-demo-vol mountPath: /data/demo
  • 策略实例示例 以下策略实例展示了策略定义生效的资源类型,parameters的allowedProfiles字段定义了允许的值列表。 apiVersion: constraints.gatekeeper.sh/v1beta1kind: K8sPSPAppArmormetadata: name: psp-apparmorspec: match: kinds: - apiGroups: [""] kinds: ["Pod"] parameters: allowedProfiles: - runtime/default
  • 不符合策略实例的资源定义 示例中apparmor的值不在上述定义的允许范围内,不符合策略实例。 apiVersion: v1kind: Podmetadata: name: nginx-apparmor-disallowed annotations: # apparmor.security.beta.kubernetes.io/pod: unconfined # runtime/default container.apparmor.security.beta.kubernetes.io/nginx: unconfined labels: app: nginx-apparmorspec: containers: - name: nginx image: nginx
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全