华为云用户手册

  • 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
  • 环境变量查看 如果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 # 密钥导入,原密钥中的键值直接会导入结果
  • 流量策略概述 流量策略要解决的问题类似如下: 动态修改服务间访问的负载均衡策略,比如配置一致性哈希将流量转发到特定的服务实例上; 同一个服务有两个版本在线,将一部分流量切到某个版本上; 服务保护,如限制并发连接数、限制请求数、隔离有故障的服务实例等; 动态修改服务中的内容,或者模拟一个服务运行故障等。 应用服务网格ASM当前支持重试、超时、连接池、熔断、负载均衡、HTTP头域、故障注入等流量治理能力,可满足大多数业务场景的治理需求。 父主题: 流量策略
  • TLS 在更新流量策略内容时,可选择是否开启。 在VirtualService中,Tls是一种TLSRoute类型的路由集合,用于处理非终结的TLS和HTTPS的流量,使用SNI(Server Name Indication),即客户端在TLS握手阶段建立连接使用的服务Host名做路由选择。 下图中,service1服务对service2服务的访问会自动启用双向认证,对service1服务和service2服务的代码都无须修改,而且对双方的证书密钥也无须维护。 父主题: 流量策略
  • HTTP协议服务路由 HTTP是当前最通用、内容最丰富的协议,控制也最多,是ASM服务上支持最完整的一种协议。服务网格处理的是七层流量,指的主要就是这部分能力。 表1 HTTP协议服务路由参数 匹配条件参数 URI StringMatch类型,统一资源标识符,可选完全匹配/前缀匹配/正则匹配 输入URI,复选框可选择是否忽略大小写 Scheme StringMatch类型,表示协议采集,可选完全匹配/前缀匹配/正则匹配 输入Scheme Method StringMatch类型,表示请求方法,可选完全匹配/前缀匹配/正则匹配 输入Method Authority StringMatch类型,表示权限配置,可选完全匹配/前缀匹配/正则匹配 输入Authority 头域 Cookie内容 基于HTTP Cookie 计算哈希,可选完全匹配/前缀匹配/正则匹配 输入值 自定义Header 基于HTTP Header 计算哈希,可选完全匹配/前缀匹配/正则匹配 输入键值对 用户代理 根据所需操作系统,选择用户代理 端口 表示请求的服务端口,下拉列表中选择一个可用的端口号 参数 表示匹配URL中的请求参数,可选完全匹配/前缀匹配/正则匹配 输入键值对 源负载标签 map类型的键值对,表示请求来源的负载匹配标签 源命名空间 匹配源服务的命名空间 服务目标参数 版本 选择服务子集版本 流量权重 可以控制实例上接收的流量比例,输入值必须在0到100之间
  • TLS协议服务路由 在服务路由中,tls是一种TLSRoute类型的路由集合,用于处理非终结的TLS和HTTPS的流量,使用客户端在TLS握手阶段建立连接使用的服务Host名做路由选择。 表2 TLS协议服务路由参数 匹配条件参数 sniHost 用于匹配TLS请求的SNI。SNI的值必须是服务路由的hosts的子集 目标子网 目标IP地址匹配的IP子网 端口 访问的目标端口 源负载标签 map类型的键值对,表示请求来源的负载匹配标签 源命名空间 匹配源服务的命名空间 服务目标参数 版本 选择服务子集版本 流量权重 可以控制实例上接收的流量比例,输入值必须在0到100之间
  • CORS 当一个资源向该资源所在服务器的不同的域发起请求时,就会产生一个跨域的HTTP请求。出于安全原因,浏览器会限制从脚本发起的跨域HTTP请求。通过跨域资源共享CORS机制可允许Web应用服务器进行跨域访问控制,使跨域数据传输安全进行。 YAML设置如下: apiVersion: networking.istio.io/v1beta1kind: VirtualServicemetadata: name: ratings-routespec: hosts: - ratings.prod.svc.cluster.local http: - route: - destination: host: ratings.prod.svc.cluster.local subset: v1 corsPolicy: # 配置跨域资源共享 allowOrigins: - exact: https://example.com allowMethods: - POST - GET allowCredentials: false allowHeaders: - X-Foo-Bar maxAge: "24h" 请根据实际需求调整配置参数。 父主题: 服务路由
  • 配置无条件触发自动切流 集群管理员进行集群升级等操作,若出现升级策略不恰当、升级配置有误、操作人员执行失误等问题,可能会导致集群不可用。本小节指导您在进行集群升级前,通过创建无条件触发的Remedy对象,将MCI流量从目标集群上摘除。 创建Remedy对象可在特定触发条件下执行特定动作。集群管理员准备升级目标集群时(如member1),可以创建如下Remedy对象,将MCI流量从member1上摘除。 示例YAML定义了一个Remedy对象,触发条件为空,表示无条件触发,集群联邦控制器会立即将member1上的流量摘除。在集群升级成功之后,删除该Remedy对象,member1上的流量会自动恢复,由此保证单集群的升级不会影响服务的高可用。详细的Remedy对象参数说明请参见表1。 apiVersion: remedy.karmada.io/v1alpha1kind: Remedymetadata: name: foospec: clusterAffinity: clusterNames: - member1 actions: - TrafficControl 表1 Remedy参数说明 参数 描述 spec.clusterAffinity.clusterNames 策略关注的集群名列表。仅在该列表中的集群会执行指定动作,为空时不会执行任何动作。 spec.decisionMatches 触发条件列表。当上述集群列表中指定的集群满足任一触发条件时,即会执行指定动作。当列表为空时,表示无条件触发。 conditionType 触发条件的类型。当前仅支持ServiceDomainNameResolutionReady类型,即CPD上报的CoreDNS 域名 解析状态。 operator 判断逻辑,仅支持Equal和NotEqual两种值,即等于和不等于。 conditionStatus 触发条件的状态。 actions 策略要执行的动作,目前仅支持TrafficControl,即流量控制。 父主题: 配置MCI自动切流
  • 重试 开启重试,服务访问失败时会自动重试,提高总体访问成功率和质量。 YAML设置如下: apiVersion: networking.istio.io/v1beta1kind: VirtualServicemetadata: name: ratings-routespec: hosts: - ratings.prod.svc.cluster.local http: - route: - destination: host: ratings.prod.svc.cluster.local subset: v1 retries: # 配置重试参数 attempts: 3 perTryTimeout: 2s retryOn: connect-failure,refused-stream,503 请根据实际需求调整配置参数。 父主题: 服务路由
  • 如何计算Pod扩缩数量? HPA Controller基于当前指标值和期望指标值来计算扩缩比例,再依据当前Pod数与扩缩比例计算出期望Pod数。当前Pod数与期望Pod数的计算方法如下: 当前Pod数 = 所有集群中状态为Ready的Pod数量 在计算期望Pod数时,HPA Controller会选择最近5分钟内计算所得的Pod数的最大值,以避免之前的自动扩缩操作还未完成,就直接执行新的扩缩的情况。 期望Pod数 = 当前Pod数 * ( 当前指标值 / 期望指标值 ) 例如,当以CPU利用率为扩缩容参考指标时,若当前指标值为100%,期望指标值为50%,那么按照公式计算出的期望Pod数即为当前Pod数的两倍。
  • 操作步骤 登录U CS 控制台,在左侧导航栏中单击“服务网格”。 单击服务网格名称,进入详情页。 在左侧导航栏,单击“服务中心”下的“网格服务”,进入网格服务列表页。 单击待查看的服务名,进入服务详情页,选择“服务健康”页签。 查看到服务健康下三个页签:“错误率”、“请求时延”和“吞吐”。每个页签都可以选择不同的时间细粒度,也可以根据实际需要选择是否开启“定时刷新”。 查看“错误率”的相关参数。 服务访问错误率 其他服务访问productpage错误率 其他服务访问productpage请求错误QPS productpage访问其他服务错误率 productpage访问其他服务请求错误QPS 查看“请求时延”的相关参数。 其他服务访问productpage延时 productpage访问其他服务延时 查看“吞吐”的相关参数。 其他服务访问productpage请求吞吐 其他服务访问productpage响应码出现次数 productpage访问其他服务请求吞吐 productpage访问其他服务响应码出现次数
  • FederatedHPA工作原理 FederatedHPA的工作原理如图1,实现流程如下: HPA Controller通过API定期查询工作负载的指标数据。 karmada-apiserver收到查询请求,会路由到之前通过 API服务 注册的karmada-metrics-adapter。 karmada-metrics-adapter收到查询请求,会查询并收集集群中工作负载的指标数据。 karmada-metrics-adapter将计算的指标数据返回至HPA Controller。 HPA Controller基于返回的指标数据计算所需的Pod扩缩数量,并保持负载伸缩的稳定性。 图1 FederatedHPA工作原理
  • 如何计算指标数据? 指标数据分为系统指标与自定义指标,计算方法如下: 系统指标 主要包括CPU利用率和内存利用率两个指标,系统指标的查询与监控依赖Metrics API。例如,您希望控制工作负载对CPU资源的利用率在合理水平,可基于CPU利用率指标为其创建FederatedHPA策略。 利用率 = 工作负载Pod的实际资源使用量 / 资源申请量 自定义指标 主要提供Kubernetes Object相关的自定义监控指标,自定义指标的查询与监控依赖Custom Metrics API。例如,您可以基于每秒请求量、每秒写入次数等其他适合工作负载的自定义指标为其创建FederatedHPA策略。
  • 如何保证负载伸缩的稳定性? 为了保证负载伸缩的稳定性,HPA controller设置了以下功能: 稳定窗口 在监控到指标数据达到期待值(即满足伸缩标准)时,HPA controller会在所设定的稳定窗口期内持续检测,如果检测结果显示该时间段内的指标数据持续达到期待值,才会进行伸缩。默认扩容稳定窗口时长为0秒,缩容稳定窗口时长为300秒,支持修改。在实际配置过程中,为避免服务抖动,稳定窗口的配置的原则是快速扩容,低速缩容。 容忍度 容忍度 = abs ( 当前指标值 / 期望指标值 -1 ) 其中abs为绝对值。当指标值的变动在设定的容忍度范围之内时,不会触发工作负载的弹性伸缩。UCS负载伸缩策略默认伸缩容忍度为0.1,不支持修改。
  • YAML编辑基于组合条件的分流 当前数据选择YAML,在编辑栏进行编辑。YAML设置示例如下(根据实际需求调整配置参数): apiVersion: v1kind: VirtualServicemetadata: name: reviews-routespec: hosts: - reviews.prod.svc.cluster.local http: - route: - destination: host: reviews.prod.svc.cluster.local subset: v2 weight: 25 - destination: host: reviews.prod.svc.cluster.local subset: v1 weight: 75 - match: - headers: end-user: exact: jason uri: prefix: "/ratings/v2/" route: - destination: host: ratings.prod.svc.cluster.local
  • 负载伸缩实现机制 UCS的负载伸缩能力是由FederatedHPA和CronFederatedHPA两种负载伸缩策略所实现的,如图1所示。 创建FederatedHPA策略,支持基于系统指标与自定义指标对工作负载进行扩缩。指标到达所配置的期望值时,触发工作负载扩缩。 创建CronFederatedHPA策略,支持基于固定时间周期对工作负载进行扩缩。到达所配置的触发时间时,触发工作负载扩缩。 图1 负载伸缩策略机制
  • 为什么需要负载伸缩 由于企业应用流量的不断变化,容器工作负载的资源需求也在不断变化。在部署、管理容器工作负载时,若时刻保持业务高峰期的资源数量,会造成大量的资源浪费;若为工作负载设置资源限制,则达到资源使用上限后可能会造成应用异常。Kubernetes中的HPA(Horizontal Pod Autoscaler)策略可基于监控资源指标变动实现单集群工作负载自动扩缩,暂不适用于多集群工作负载。 UCS为您提供多集群工作负载的自动扩缩能力。UCS负载伸缩能力可基于工作负载的系统指标变动、自定义指标变动或固定的时间周期对工作负载进行自动扩缩,以提升多集群工作负载的可用性和稳定性。
  • UCS负载伸缩的优势 UCS负载伸缩能力的优势主要在于: 多集群:多集群场景下的负载伸缩,可以对集群联邦中的多个集群实行统一的负载伸缩策略。 高可用:在业务高峰期快速扩容以保证工作负载的可用性,在业务平缓期快速缩容以节约资源成本。 多功能:支持基于系统指标变动、自定义指标变动和固定时间周期进行负载伸缩,实现复杂场景下的负载伸缩。 多场景:使用场景广泛,典型的场景包含在线业务弹性、大规模计算训练、深度学习GPU或共享GPU的训练与推理。
  • 集群联邦支持的资源及操作 集群联邦支持的Kubernetes资源及相关操作见表1。表内为“√”表明集群联邦支持对该Kubernetes资源进行该操作,表内为“部分支持”表明集群联邦部分支持对该Kubernetes资源进行该操作,表内为空则表明集群联邦不支持对该Kubernetes资源进行该操作。 表1 集群联邦支持的资源及操作 组/版本 资源 GET LIST WATCH CREATE UPDATE PATCH DELETE core/v1 pods √ √ √ √ √ √ √ pods/log √ - - - - - - pods/exec √ - - √ - - - pods/status √ - - - - - - configmaps √ √ √ √ √ √ √ secrets √ √ √ √ √ √ √ services √ √ √ √ √ √ √ nodes √ √ √ - √ √ - namespaces √ √ √ √ √ √ √ endpoints √ √ - - - - - events √ √ - - - - - limitranges √ √ - - - - - resourcequotas √ √ - - - - - persistentvolumeclaims √ √ - - - - - persistentvolumes √ √ - - - - - serviceaccounts √ √ - - - - - admissionregistration.k8s.io/v1 mutatingwebhookconfigurations √ √ - - - - - validatingwebhookconfigurations √ √ - - - - - apiextensions.k8s.io/v1 customresourcedefinitions √ √ √ √ √ √ √ apiregistration.k8s.io/v1 apiservices √ √ - - - - - apps/v1 deployments √ √ √ √ √ √ √ deployments/scale √ - - - √ - - deployments/status √ - - - - - - daemonsets √ √ √ √ √ √ √ daemonsets/status √ - - - - - - statefulsets √ √ √ √ √ √ √ statefulsets/status √ - - - - - - replicasets √ √ - - - - - autoscaling/(v1、v2、v2beta1、v2beta2) horizontalpodautoscalers √ √ √ √ √ √ √ batch/v1 jobs √ √ √ √ √ √ √ jobs/status √ - - - - - - cronjobs √ √ √ √ √ √ √ cronjobs/status √ - - - - - - discovery.k8s.io/v1 endpointslices √ √ - - - - - events.k8s.io/v1 events √ √ - - - - - networking.k8s.io/v1 ingresses √ √ √ √ 部分支持 部分支持 √ ingressclasses √ √ - - - - - networkpolicies √ √ - - - - - policy/(v1、v1beta1) poddisruptionbudgets √ √ √ √ √ √ √ rbac.authorization.k8s.io/v1 clusterrolebindings √ √ √ √ √ √ √ clusterroles √ √ √ √ √ √ √ rolebindings √ √ √ √ √ √ √ roles √ √ √ √ √ √ √ storage.k8s.io/v1 storageclasses √ √ - - - - - 对于集群中的自定义资源,在集群联邦中注册该CRD后,才可支持通过集群联邦入口进行操作。 Ingress对象的UPDATE和PATCH操作仅支持集群联邦控制面中的资源,不支持成员集群中的资源。
  • 通过kubectl连接集群联邦 登录UCS控制台,单击目标容器舰队名进入“容器舰队信息”页面,在“舰队基本信息”中单击“kubectl”。 图1 kubectl连接信息 参照页面中的提示信息,选择对应的项目名称、虚拟私有云(VPC)、控制节点子网以及有效期,单击“下载”,下载kubectl配置文件。 下载下来的文件名为“舰队名_kubeconfig.json”。 图2 kubectl连接联邦实例 舰队名_kubeconfig.json文件中存在安全泄露风险,请您务必妥善保存。 kubectl配置文件有效期可根据实际需求选择,下拉列表内可选范围为:5年、1年、6个月、30天、15天、14天、13天...1天,最短为1天。 在执行机上安装和配置kubectl。 拷贝kubectl及其配置文件到上述所选的vpc和子网下的执行机的/home目录下。 登录到您的执行机,配置kubectl。 cd /homechmod +x kubectlmv -f kubectl /usr/local/binmkdir -p $HOME/.kubemv -f 舰队名_kubeconfig.json $HOME/.kube/config --请根据实际舰队名修改命令中“舰队名”
  • 符合策略实例的资源定义 示例中seLinuxOptions参数均在参数列表中,符合策略实例。 apiVersion: v1kind: Podmetadata: name: nginx-selinux-allowed labels: app: nginx-selinuxspec: 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/v1beta1kind: K8sPSPSELinuxV2metadata: name: psp-selinux-v2spec: match: kinds: - apiGroups: [""] kinds: ["Pod"] parameters: allowedSELinuxOptions: - level: s0:c123,c456 role: object_r type: svirt_sandbox_file_t user: system_u
  • 策略实例示例 以下策略实例展示了策略定义生效的资源类型。 apiVersion: constraints.gatekeeper.sh/v1beta1kind: K8sPSPPrivilegedContainermetadata: name: psp-privileged-containerspec: match: kinds: - apiGroups: [""] kinds: ["Pod"] excludedNamespaces: ["kube-system"]
  • 符合策略实例的资源定义 示例中privileged设置为false,符合策略实例。 apiVersion: v1kind: Podmetadata: name: nginx-privileged-allowed labels: app: nginx-privilegedspec: containers: - name: nginx image: nginx securityContext: privileged: false
  • 不符合策略实例的资源定义 示例中privileged设置为true,不符合策略实例。 apiVersion: v1kind: Podmetadata: name: nginx-privileged-disallowed labels: app: nginx-privilegedspec: containers: - name: nginx image: nginx securityContext: privileged: true
  • 不符合策略实例的资源定义 示例中seLinuxOptions参数不在参数列表中,不符合策略实例。 apiVersion: v1kind: Podmetadata: name: nginx-selinux-disallowed labels: app: nginx-selinuxspec: containers: - name: nginx image: nginx securityContext: seLinuxOptions: level: s1:c234,c567 user: sysadm_u role: sysadm_r type: svirt_lxc_net_t
  • 策略定义库概述 UCS为您提供了预置的策略定义库,通过这个库,您可以创建具体的策略实例,进而将策略实例定义细节的任务委托给具备专业知识的个人或团队。这种做法不仅实现了关注点的隔离,还将策略实例的逻辑与定义进行了分离。 为了帮助您更好地理解策略定义的工作原理,每个预置策略定义都包含以下三个部分:一个示例策略实例,用于展示如何使用该策略定义;一个违反策略实例的资源定义,用于说明不符合该策略要求的资源样例;一个符合策略实例的资源定义,用于展示满足策略要求的资源样例。这些内容将帮助您更清晰地了解各种策略定义的应用场景及其执行标准。 所有策略实例都包含一个“match”部分,这部分定义了策略实例应用的目标对象。通过“match”部分,您可以精准指定策略实例适用的资源类型、命名空间或其他特定条件,从而确保策略实例仅对满足这些条件的对象起作用。 表1为安全类策略定义,共16个,它们专注于确保集群和资源的安全性;表2为合规类策略定义,总共17个,它们针对不同方面的合规要求。 表1 安全类策略定义 策略定义名称 类型 推荐级别 生效对象 参数 k8spspvolumetypes 安全 L3 Pod volumes:数组 k8spspallowedusers 安全 L3 Pod exemptImages:字符串数组 runAsUser rule:字符串 ranges min:整型 max:整型 runAsGroup rule:字符串 ranges min:整型 max:整型 supplementalGroups rule:字符串 ranges min:整型 max:整型 fsGroup rule:字符串 ranges min:整型 max:整型 k8spspselinuxv2 安全 L3 Pod allowedSELinuxOptions:对象数组,包含level、role、type、user四个字符串对象 exemptImages:字符串数组 k8spspseccomp 安全 L3 Pod allowedLocalhostFiles:数组 allowedProfiles:数组 exemptImages:字符串数组 k8spspreadonlyrootfilesystem 安全 L3 Pod exemptImages:字符串数组 k8spspprocmount 安全 L3 Pod exemptImages:字符串数组 procMount:字符串 k8spspprivilegedcontainer 安全 L3 Pod exemptImages:字符串数组 k8spsphostnetworkingports 安全 L3 Pod exemptImages:字符串数组 hostNetwork max:整型 min:整型 k8spsphostnamespace 安全 L3 Pod 无 k8spsphostfilesystem 安全 L3 Pod allowedHostPaths pathPrefix:字符串 k8spspfsgroup 安全 L3 Pod rule:字符串,支持MayRunAs、MustRunAs和RunAsAny ranges max:整型 min:整型 k8spspforbiddensysctls 安全 L3 Pod allowedSysctls:数组 forbiddenSysctls:数组 k8spspflexvolumes 安全 L3 Pod allowedFlexVolumes:数组 k8spspcapabilities 安全 L3 Pod allowedCapabilities:数组 exemptImages:字符串数组 requiredDropCapabilities:数组 k8spspapparmor 安全 L3 Pod allowedProfiles:数组 exemptImages:字符串数组 k8spspallowprivilegeescalationcontainer 安全 L3 Pod exemptImages:字符串数组 表2 合规类策略定义 策略定义名称 类型 推荐级别 生效对象 参数 k8srequiredprobes 合规 L1 Pod probes:数组 probeTypes:数组 k8srequiredlabels 合规 L1 Deployment labels key / allowedRegex:键值对数组 message:字符串 k8srequiredannotations 合规 L1 Pod annotations key / allowedRegex:键值对数组 message:字符串 k8sreplicalimits 合规 L1 Deployment、ReplicaSet、CronJob ranges min_replicas:整型 max_replicas:整型 noupdateserviceaccount 合规 L1 Pod allowedGroups:数组 allowedUsers:数组 k8simagedigests 合规 L1 Pod exemptImages:字符串数组 k8sexternalips 合规 L1 Service allowedIPs:字符串数组 k8sdisallowedtags 合规 L1 Pod tags:字符串数组 exemptImages:字符串数组 k8srequiredresources 合规 L1 Pod exemptImages:字符串数组 limits cpu memory requests cpu memory k8scontainerratios 合规 L1 Pod ratio:字符串 cpuRatio:字符串 exemptImages:字符串数组 k8scontainerrequests 合规 L1 Pod cpu:字符串 memory:字符串 exemptImages:字符串数组 k8scontainerlimits 合规 L1 Pod cpu:字符串 memory:字符串 exemptImages:字符串数组 k8sblockwildcardingress 合规 L1 Ingress 无 k8sblocknodeport 合规 L1 Service 无 k8sblockloadbalancer 合规 L1 Pod 无 k8spspautomountserviceaccounttokenpod 合规 L1 Pod 无 k8sallowedrepos 合规 L1 Pod repos:字符串数组 父主题: 使用策略定义库
  • 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。
  • 应用恢复操作步骤 通过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
共100000条
提示

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