华为云用户手册

  • 不符合策略实例的资源定义 示例中hostPath中pathPrefix以/tmp开头,不符合策略实例。 apiVersion: v1kind: Podmetadata: name: nginx-host-filesystem labels: app: nginx-host-filesystem-disallowedspec: containers: - name: nginx image: nginx volumeMounts: - mountPath: /cache name: cache-volume readOnly: true volumes: - name: cache-volume hostPath: path: /tmp # directory location on host
  • 基本信息 策略类型:合规 推荐级别:L1 生效资源类型:* 参数: annotations: 键值对数组,key/ allowedRegex key: a8r.io/owner # Matches email address or github user allowedRegex: ^([A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}|[a-z]{1,39})$
  • 约束与限制 关闭监控前,请仔细阅读以下注意事项,避免数据丢失或者相关资源继续产生费用。 kube-prometheus-stack插件处于“安装中”、“升级中”、“删除中”和“回滚中”时不允许关闭监控。 kube-prometheus-stack插件处于“运行中”、“部分就绪”和“安装失败”时关闭监控:对于华为云集群,系统将会更新kube-prometheus-stack插件以关闭数据上报功能;对于本地集群和附着集群,系统将会卸载kube-prometheus-stack插件。 kube-prometheus-stack插件处于“回滚失败”、“不可用”、“安装失败”、“删除失败”和“未知”状态时,关闭监控将会卸载kube-prometheus-stack插件。 通过私网接入的本地集群和附着集群,关闭监控时会检查私网接入点(开启监控时创建的VPCEP终端节点和DNS内网 域名 )是否有其他集群在使用,若没有则会删除此私网接入点。 华为云集群使用云硬盘(csi-disk-topology)存储类型的PVC作为插件数据的临时存储,集群关闭监控后,命名空间monitoring下的PVC不会自动删除,为避免继续产生费用,请前往CCE控制台手动删除(需要先卸载kube-prometheus-stack插件,再删除)。
  • 不同规格的资源配额要求 安装log-agent插件时,需确保集群中有足够的CPU、内存等可调度资源,不同插件规格的资源配额要求请参见表1。 表1 不同规格的资源配额要求 插件规格 容器实例 CPU配额 内存配额 小规格 (实例数为1) fluent-bit 申请:100m 限制:500m 申请:200Mi 限制:500Mi cop-logs 申请:100m 限制:1 申请:100Mi 限制:500Mi log-operator 申请:100m 限制:500m 申请:100Mi 限制:500Mi otel-collector 申请:200m 限制:1 申请:1Gi 限制:2Gi 大规格 (实例数为2) fluent-bit 申请:100m 限制:500m 申请:200Mi 限制:500Mi cop-logs 申请:100m 限制:1 申请:100Mi 限制:500Mi log-operator 申请:100m 限制:500m 申请:100Mi 限制:500Mi otel-collector 申请:200m 限制:1 申请:1Gi 限制:2Gi
  • 应用恢复操作步骤 通过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
  • 策略实例 策略实例用于告知Gatekeeper应执行哪个策略定义以及如何执行。策略实例的详细说明请参见官方文档。 下面是一个策略实例示例,该示例使用先前提到的K8sRequiredLabels策略定义,确保Gatekeeper在所有命名空间上强制执行指定的标签。 apiVersion: constraints.gatekeeper.sh/v1beta1kind: K8sRequiredLabelsmetadata: name: ns-must-have-gkspec: enforcementAction: deny match: kinds: - apiGroups: [""] kinds: ["Namespace"] parameters: labels: ["gatekeeper"] 改策略实例示例指定了使用“K8sRequiredLabels”策略定义并将执行策略的操作设置为“deny”,这意味着Gatekeeper将拒绝违反策略的请求。“match”部分限制了此策略实例仅适用于命名空间资源。“parameters”部分指定了必须存在于资源上的标签,本例中为“gatekeeper”。
  • 策略实例示例 以下策略实例展示了策略定义生效的资源类型,parameters中allowedProfiles定义了允许的注解。 apiVersion: constraints.gatekeeper.sh/v1beta1kind: K8sPSPSeccompmetadata: name: psp-seccompspec: match: kinds: - apiGroups: [""] kinds: ["Pod"] parameters: allowedProfiles: - runtime/default - docker/default
  • 不符合策略实例的资源定义 示例中的container.seccomp.security.alpha.kubernetes.io/nginx注解的value没在设定的值列表中,不符合策略定义。 apiVersion: v1kind: Podmetadata: name: nginx-seccomp-disallowed annotations: container.seccomp.security.alpha.kubernetes.io/nginx: unconfined labels: app: nginx-seccompspec: containers: - name: nginx image: nginx
  • 符合策略实例的资源定义 示例中的container.seccomp.security.alpha.kubernetes.io/nginx注解的value在设定的值列表中,符合策略定义。 apiVersion: v1kind: Podmetadata: name: nginx-seccomp-allowed annotations: container.seccomp.security.alpha.kubernetes.io/nginx: runtime/default labels: app: nginx-seccompspec: containers: - name: nginx image: nginx
  • 本地IDC集群迁移上云流程 U CS 容器迁移支持将本地IDC自建的Kubernetes集群应用迁移到UCS华为云集群或本地集群,实现应用程序的云端部署和运维管理。迁移流程如图1所示。 图1 迁移流程 主要包含四个步骤: 集群评估 在这个阶段,您将根据源集群的现状来评估适合迁移的目标集群类型。UCS的kspider工具能够自动收集源集群的信息,包括Kubernetes版本、规模、工作负载、存储等数据,并根据收集到的数据为您提供推荐的目标集群信息。具体请参见集群评估。 数据迁移 在这个阶段,您将把镜像和相关依赖服务的数据迁移到云端。UCS的image-migrator是一个自动化镜像迁移工具,可以将基于Docker Registry v2搭建的Docker镜像仓库中的镜像迁移到SWR中;对于依赖服务的数据迁移,您可以使用华为云的其他云产品来配套实现。具体请参见镜像迁移和依赖服务迁移。 应用备份 在这个阶段,您将对本地IDC集群中的应用进行备份。UCS的k8clone工具可以自动收集Kubernetes元数据,并将其以压缩包的形式保存到本地,从而实现集群中应用的备份。具体请参见应用备份。 应用迁移 在这个阶段,您将利用备份数据恢复的方法,将本地IDC集群中的应用迁移到UCS华为云集群或本地集群。具体请参见应用迁移。 父主题: 本地IDC集群迁移上云
  • 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。
  • 第三方云集群跨云迁移流程 UCS容器迁移支持将第三方云Kubernetes托管集群应用迁移到UCS华为云集群或多云集群,实现跨云迁移和统一管理。迁移流程如图1所示。 图1 迁移流程 主要包含四个步骤: 集群评估 在这个阶段,您将根据源集群的现状来评估适合迁移的目标集群类型。UCS的kspider工具能够自动收集源集群的信息,包括Kubernetes版本、规模、工作负载、存储等数据,并根据收集到的数据为您提供推荐的目标集群信息。具体请参见集群评估。 数据迁移 在这个阶段,您将把镜像和相关依赖服务的数据迁移到云端。UCS的image-migrator是一个自动化镜像迁移工具,可以将第三方云镜像仓库中的镜像迁移到SWR中;对于依赖服务的数据迁移,您可以使用华为云的其他云产品来配套实现。具体请参见镜像迁移和依赖服务迁移。 应用备份 在这个阶段,您将对第三方云集群中的应用进行备份。UCS的k8clone工具可以自动收集Kubernetes元数据,并将其以压缩包的形式保存到本地,从而实现集群中应用的备份。具体请参见应用备份。 应用迁移 在这个阶段,您将利用备份数据恢复的方法,将第三方云集群中的应用迁移到UCS华为云集群或多云集群。具体请参见应用迁移。 父主题: 第三方云集群跨云迁移
  • 步骤一:源集群数据采集 通过kubectl连接源集群。具体方法可参考使用kubectl连接集群。 使用默认参数配置,采集集群中所有命名空间的数据。执行方法:./kspider-linux-amd64 执行后的输出详细信息如下: [~]# ./kspider-linux-amd64The Cluster version is v1.15.6-r1-CCE2.0.30.B001There are 5 NamespacesThere are 2 NodesName CPU Memory IP Arch OS Kernel MachineID10.1.18.64 4 8008284Ki [10.1.18.64 10.1.18.64] amd64 linux 3.10.0-1127.19.1.el7.x86_64 ef9270ed-7eb3-4ce6-a2d8-f1450f85489a10.1.19.13 4 8008284Ki [10.1.19.13 10.1.19.13] amd64 linux 3.10.0-1127.19.1.el7.x86_64 2d889590-9a32-47e5-b947-09c5bda81849There are 9 PodsThere are 0 LonePods: There are 2 StatefulSets: Name Namespace NodeAffinityminio default falseminio minio falseThere are 3 Deployments: Name Namespace NodeAffinityrctest default trueflink-operator-controller-manager flink-operator-system falserctest minio falseThere are 1 DaemonSets: Name Namespace NodeAffinityds-nginx minio falseThere are 0 Jobs: There are 0 CronJobs: There are 4 PersistentVolumeClaims: Namespace/Name Podsdefault/pvc-data-minio-0 default/minio-0minio/obs-testing minio/ds-nginx-9hmds,minio/ds-nginx-4jsfgminio/pvc-data-minio-0 minio/minio-0There are 5 PersistentVolumes: Name Namespace pvcName scName size keypvc-bd36c70f-75bf-4000-b85c-f9fb169a14a8 minio-pv obs-testing csi-obs 1Gi pvc-bd36c70f-75bf-4000-b85c-f9fb169a14a8pvc-c7c768aa-373a-4c52-abea-e8b486d23b47 minio-pv pvc-data-minio-0 csi-disk-sata 10Gi 1bcf3d00-a524-45b1-a773-7efbca58f36apvc-4f52462b-3b4c-4191-a63b-5a36a8748c05 minio obs-testing csi-obs 1Gi pvc-4f52462b-3b4c-4191-a63b-5a36a8748c05pvc-9fd92c99-805a-4e65-9f22-e238130983c8 default pvc-data-minio-0 csi-disk 10Gi 590afd05-fc68-4c10-a598-877100ca7b3fpvc-a22fd877-f98d-4c3d-a04e-191d79883f97 minio pvc-data-minio-0 csi-disk-sata 10Gi 48874130-df77-451b-9b43-d435ac5a11d5There are 7 Services: Name Namespace ServiceTypeheadless-lxprus default ClusterIPkubernetes default ClusterIPminio default NodePortflink-operator-controller-manager-metrics-service flink-operator-system ClusterIPflink-operator-webhook-service flink-operator-system ClusterIPheadless-lxprus minio ClusterIPminio minio NodePortThere are 0 Ingresses: There are 6 Images: Namegcr.io/flink-operator/flink-operator:v1beta1-6flink:1.8.2swr.cn-north-4.myhuaweicloud.com/paas/minio:latestnginx:stable-alpine-perlswr.cn-north-4.myhuaweicloud.com/everest/minio:latestgcr.io/kubebuilder/kube-rbac-proxy:v0.4.0There are 2 Extra Secrets: SecretTypecfe/secure-opaquehelm.sh/release.v1 在kspider执行完毕后,当前目录下将生成两个文件: cluster-*.json:此文件包含了源集群及应用的采集数据,这些数据可用于分析和规划迁移过程。 preferred-*.json:此文件包含了推荐的目标集群信息。基于源集群的规模和节点规格进行初步评估,文件将提供关于目标集群版本和规模的建议。 查看源集群及应用的采集数据。 您可以用文本编辑器或JSON查看器打开“cluster-*.json”文件以查看数据。在实际操作中,您需要将文件名中的“*”替换为实际的时间戳或序列号,以找到并打开正确的文件。 “cluster-*.json”文件说明如下: { K8sVersion:Kubernetes版本,字符串类型 Namespaces:命名空间数量,字符串类型 Pods:Pod总数量,整型 Nodes:节点总信息,以IP为key,展示节点信息 IP地址 CPU:CPU,字符串类型 Arch:CPU架构,字符串类型 Memory:内存,字符串类型 HugePages1Gi:1G大页内存,字符串类型 HugePages2Mi:2M大页内存,字符串类型 OS:节点OS,字符串类型 KernelVersion:OS内核版本,字符串类型 RuntimeVersion:节点容器运行及版本,字符串类型 InternalIP:内部IP,字符串类型 ExternalIP:外部IP,字符串类型 MachineID:节点ID,字符串类型。说明:CCE中能够保证与ECS的ID一致 Workloads:工作负载 Deployment:工作负载类型,支持Deployment(无状态负载)、StatefulSet(有状态负载)、DaemonSet(守护进程集)、CronJob(定时任务)、Job(普通任务)、LonePod(独立Pod) default:命名空间名称 Count:数量,整型 Items:详细信息,数组类型 Name:工作负载名称,字符串类型 Namespace:命名空间名称,字符串类型 NodeAffinity:节点亲和性,布尔型 Replicas:副本数量,整型 Storage:存储 PersistentVolumes:持久卷 pv-name:以PV名称为key VolumeID:卷ID,字符串类型 Namespace:命名空间,字符串类型 PvcName:绑定PVC的名称,字符串类型 ScName:存储类的名称,字符串类型 Size:申请空间大小,字符串类型 Pods:使用PV的Pod名称,字符串类型 NodeIP:Pod所在的节点IP,字符串类型 VolumePath:该Pod挂载节点的路径,字符串类型 OtherVolumes:其它类型卷 类型:AzureFile、AzureDisk、GCEPersistentDisk、AWSElasticBlockStore、Cinder、Glusterfs、NFS、CephFS、FlexVolume、FlexVolume、DownwardAPI 卷ID/卷名称/卷共享路径等为key Pods:使用其的Pod,字符串类型 NodeIP:Pod所在的节点IP,字符串类型 卷ID/卷名称/卷共享路径等唯一标识卷信息的信息,字符串类型 Networks:网络 LoadBalancer:负载均衡类型 service:网络类型,包括service和ingress Name:名称,字符串类型 Namespace:命名空间名称,字符串类型 Type:类型,字符串类型 ExtraSecrets:扩展secret类型 secret类型名,字符串类型 Images:镜像 镜像repo,字符串类型} 示例: { "K8sVersion": "v1.19.10-r0-CCE22.3.1.B009", "Namespaces": 12, "Pods": 33, "Nodes": { "10.1.17.219": { "CPU": "4", "Memory": "7622944Ki", "HugePages1Gi": "0", "HugePages2Mi": "0", "Arch": "amd64", "OS": "EulerOS 2.0 (SP9x86_64)", "KernelVersion": "4.18.0-147.5.1.6.h687.eulerosv2r9.x86_64", "RuntimeVersion": "docker://18.9.0", "InternalIP": "10.1.17.219", "ExternalIP": "", "MachineID": "0c745e03-2802-44c2-8977-0a9fd081a5ba" }, "10.1.18.182": { "CPU": "4", "Memory": "7992628Ki", "HugePages1Gi": "0", "HugePages2Mi": "0", "Arch": "amd64", "OS": "EulerOS 2.0 (SP5)", "KernelVersion": "3.10.0-862.14.1.5.h520.eulerosv2r7.x86_64", "RuntimeVersion": "docker://18.9.0", "InternalIP": "10.1.18.182", "ExternalIP": "100.85.xxx.xxx", "MachineID": "2bff3d15-b565-496a-817c-063a37eaf1bf" } }, "Workloads": { "CronJob": {}, "DaemonSet": { "default": { "Count": 1, "Items": [ { "Name": "kubecost-prometheus-node-exporter", "Namespace": "default", "NodeAffinity": false, "Replicas": 3 } ] } }, "Deployment": { "default": { "Count": 1, "Items": [ { "Name": "kubecost-cost-analyzer", "Namespace": "default", "NodeAffinity": false, "Replicas": 1 } ] }, "kubecost": { "Count": 1, "Items": [ { "Name": "kubecost-kube-state-metrics", "Namespace": "kubecost", "NodeAffinity": false, "Replicas": 1 } ] } }, "Job": {}, "LonePod": {}, "StatefulSet": { "minio-all": { "Count": 1, "Items": [ { "Name": "minio", "Namespace": "minio-all", "NodeAffinity": false, "Replicas": 1 } ] } } }, "Storage": { "PersistentVolumes": { "demo": { "VolumeID": "demo", "Namespace": "fluid-demo-test", "PvcName": "demo", "ScName": "fluid", "Size": "100Gi", "Pods": "", "NodeIP": "", "VolumePath": "" }, "pvc-fd3a5bb3-119a-44fb-b02e-96b2cf9bb36c": { "VolumeID": "82365752-89b6-4609-9df0-007d964b7fe4", "Namespace": "minio-all", "PvcName": "pvc-data-minio-0", "ScName": "csi-disk", "Size": "10Gi", "Pods": "minio-all/minio-0", "NodeIP": "10.1.23.159", "VolumePath": "/var/lib/kubelet/pods/5fc47c82-7cbd-4643-98cd-cea41de28ff2/volumes/kubernetes.io~csi/pvc-fd3a5bb3-119a-44fb-b02e-96b2cf9bb36c/mount" } }, "OtherVolumes": {} }, "Networks": { "LoadBalancer": {} }, "ExtraSecrets": [ "cfe/secure-opaque", "helm.sh/release.v1" ], "Images": [ "nginx:stable-alpine-perl", "ghcr.io/koordinator-sh/koord-manager:0.6.2", "swr.cn-north-4.myhuaweicloud.com/paas/minio:latest", "swr.cn-north-4.myhuaweicloud.com/everest/e-backup-test:v1.0.0", "gcr.io/kubecost1/cost-model:prod-1.91.0", "gcr.io/kubecost1/frontend:prod-1.91.0" ]}
  • kspider工作原理 kspider工具的架构如图1所示,包含三个模块:采集模块、连接管理和分析模块。采集模块可以收集源集群的数据,包括命名空间、工作负载、节点、网络等;连接管理模块负责与源集群的API Server建立连接;分析模块分为聚合输出和评估推荐两部分,旨在输出源集群的采集数据(生成“cluster-*.json”文件)以及提供目标集群的推荐信息(生成“preferred-*.json”文件)。 图1 kspider架构
  • 步骤二:目标集群评估 在kspider执行完毕后,除了“cluster-*.json”文件之外,还会在当前目录下生成“preferred-*.json”文件。这个文件基于源集群的规模和节点规格进行初步评估,并提供关于目标集群版本和规模的推荐信息。这有助于您更好地规划和准备迁移过程。 “preferred-*.json”文件说明如下: { K8sVersion:Kubernetes版本,字符串类型 Scale:集群规模,字符串类型 Nodes:节点信息 CPU:CPU,字符串类型 Memory:内存,字符串类型 Arch:架构,字符串类型 KernelVersion:OS内核版本,字符串类型 ProxyMode:集群Proxy模式,字符串类型 ELB:是否依赖ELB,布尔型} 上述文件中每个字段的评估规则如下: 表1 评估规则 字段 评估规则 Kubernetes版本 如果是1.21以下版本,推荐UCS集群主要发行版本(例如1.21,随着时间发展会发生变化),大于主要发行版本时,将推荐UCS集群的最新版本。 集群规模 源集群节点数<25,推荐50节点规模 25≤源集群节点数<100,推荐200节点规模 100≤源集群节点数<500,推荐1000节点规模 源集群节点数≥500,推荐2000节点规模 CPU+内存 统计数量最多的那一种规格 架构 统计数量最多的那一种规格 OS内核版本 统计数量最多的那一种规格 集群Proxy模式 根据集群规模来设置,大于1000节点规模的集群,推荐使用ipvs,1000以内的推荐使用iptables。 是否依赖ELB 源集群是否有负载均衡类型的Service 示例: { "K8sVersion": "v1.21", "Scale": 50, "Nodes": { "CPU": "4", "Memory": "7622952Ki", "Arch": "amd64", "KernelVersion": "3.10.0-862.14.1.5.h520.eulerosv2r7.x86_64" }, "ELB": false, "ProxyMode": "iptables"} 评估结果仅供参考,最终选择什么版本、规模的目标集群还需要您综合判断。
  • kspider使用方法 kspider工具支持在Linux(x86、arm)和Windows环境中运行,使用方法相似。本文将以Linux(x86)环境为例进行介绍。 若使用Linux(arm)或Windows环境,请将下述命令中的kspider-linux-amd64分别替换为kspider-linux-arm64或kspider-windows-amd64.exe。 根据容器迁移准备工作章节的要求,准备一台服务器并上传kspider工具,然后进行解压缩。在kspider工具所在目录下执行./kspider-linux-amd64 -h,您可以查看该工具的使用方法。 -k, --kubeconfig:指定kubectl的KubeConfig位置,默认是$HOME/.kube/config。kubeConfig文件:用于配置对Kubernetes集群的访问,KubeConfig文件中包含访问注册Kubernetes集群所需要的认证凭据以及Endpoint(访问地址),详细介绍可参见Kubernetes文档。 -n, --namespaces:指定采集的命名空间,默认排除了kube-system、kube-public、kube-node-lease等系统命名空间。 -q, --quiet:静态退出。 -s, --serial:根据采集信息输出汇聚文件(cluster-{serial}.json)和推荐文件(preferred-{serial}.json)唯一标识的序号。 $ ./kspider-linux-amd64 -hA cluster information collection and recommendation tool implement by Go.Usage: kspider [flags]Aliases: kspider, kspiderFlags: -h, --help help for kspider -k, --kubeconfig string The kubeconfig of k8s cluster's. Default is the $HOME/.kube/config. (default "$HOME/.kube/config") -n, --namespaces string Specify a namespace for information collection. If multiple namespaces are specified, separate them with commas (,), such as ns1,ns2. default("") is all namespaces -q, --quiet command to execute silently -s, --serial string User-defined sequence number of the execution. The default value is the time when the kspider is started. (default "1673853404")
  • 不符合策略实例的资源定义 示例中allowPrivilegeEscalation的值不为false,不符合策略实例。 apiVersion: v1kind: Podmetadata: name: nginx-privilege-escalation-disallowed labels: app: nginx-privilege-escalationspec: containers: - name: nginx image: nginx securityContext: allowPrivilegeEscalation: true
  • 策略实例示例 以下策略实例展示了策略定义生效的资源类型。 apiVersion: constraints.gatekeeper.sh/v1beta1kind: K8sImageDigestsmetadata: name: container-image-must-have-digestspec: match: kinds: - apiGroups: [""] kinds: ["Pod"] namespaces: - "default"
  • 策略实例示例 以下策略实例展示了策略定义生效的资源类型。 apiVersion: constraints.gatekeeper.sh/v1beta1kind: K8sPSPReadOnlyRootFilesystemmetadata: name: psp-readonlyrootfilesystemspec: match: kinds: - apiGroups: [""] kinds: ["Pod"]
  • 符合策略实例的资源定义 容器镜像包含digest,符合策略实例。 apiVersion: v1kind: Podmetadata: name: opa-allowedspec: containers: - name: opa image: openpolicyagent/opa:0.9.2@sha256:04ff8fce2afd1a3bc26260348e5b290e8d945b1fad4b4c16d22834c2f3a1814a
  • 策略实例示例 示例展示了ClusterRole和Role资源仅能关联到allowedRoles中定义的Role。 apiVersion: constraints.gatekeeper.sh/v1beta1kind: K8sDisallowAnonymousmetadata: name: no-anonymousspec: match: kinds: - apiGroups: ["rbac.authorization.k8s.io"] kinds: ["ClusterRoleBinding"] - apiGroups: ["rbac.authorization.k8s.io"] kinds: ["RoleBinding"] parameters: allowedRoles: - cluster-role-1
  • 不符合策略实例的资源定义 ClusterRole关联到cluster-role-2 Role中,不符合策略实例。 apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata: name: cluster-role-binding-2roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-role-2subjects:- apiGroup: rbac.authorization.k8s.io kind: Group name: system:authenticated- apiGroup: rbac.authorization.k8s.io kind: Group name: system:unauthenticated
  • 符合策略实例的资源定义 示例中readOnlyRootFilesystem字段为true,符合策略实例。 apiVersion: v1kind: Podmetadata: name: nginx-readonlyrootfilesystem-allowed labels: app: nginx-readonlyrootfilesystemspec: containers: - name: nginx image: nginx securityContext: readOnlyRootFilesystem: true
  • 符合策略实例的资源定义 示例中allowPrivilegeEscalation的值为false,符合策略实例。 apiVersion: v1kind: Podmetadata: name: nginx-privilege-escalation-allowed labels: app: nginx-privilege-escalationspec: containers: - name: nginx image: nginx securityContext: allowPrivilegeEscalation: false
  • 配置含义 在CPU配额和内存配额设置中,申请值与限制值的含义如下: 申请值用于预分配资源,当集群中的节点没有申请值所要求的资源数量时,容器会创建失败。 限制值用于设置容器使用资源的最大上限,避免异常情况下节点资源消耗过多,避免极端场景下因节点资源耗尽导致已运行的容器业务被驱逐。 创建工作负载时,建议设置CPU和内存的资源上下限。同一个节点上部署的工作负载,对于未设置资源上下限的工作负载,如果其异常资源泄露会导致其它工作负载分配不到资源而异常。未设置资源上下限的工作负载,工作负载监控信息也会不准确。
  • 策略实例示例 以下策略实例展示了策略定义生效的资源类型。 apiVersion: constraints.gatekeeper.sh/v1beta1kind: K8sPSPAllowPrivilegeEscalationContainermetadata: name: psp-allow-privilege-escalation-containerspec: match: kinds: - apiGroups: [""] kinds: ["Pod"]
  • 不符合策略实例的资源定义 示例中readOnlyRootFilesystem字段为false,不符合策略实例。 apiVersion: v1kind: Podmetadata: name: nginx-readonlyrootfilesystem-disallowed labels: app: nginx-readonlyrootfilesystemspec: containers: - name: nginx image: nginx securityContext: readOnlyRootFilesystem: false
  • 符合策略实例的资源定义 ClusterRole关联到cluster-role-1 Role中,符合策略实例。 apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata: name: cluster-role-binding-1roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-role-1subjects:- apiGroup: rbac.authorization.k8s.io kind: Group name: system:authenticated- apiGroup: rbac.authorization.k8s.io kind: Group name: system:unauthenticated
  • 使用示例 以集群包含一个资源为4Core 8GB的节点为例,已经部署一个包含两个实例的工作负载到该集群上,并设置两个实例(实例1,实例2)的资源为{CPU申请,CPU限制,内存申请,内存限制}={1Core,2Core,2GB,2GB}。 那么节点上CPU和内存的资源使用情况如下: 节点CPU可分配量=4Core-(实例1申请的1Core+实例2申请的1Core)=2Core 节点内存可分配量=8GB-(实例1申请的2GB+实例2申请的2GB)=4GB 因此节点还剩余2Core 4GB的资源可供下一个新增的实例使用。
共100000条
提示

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