华为云用户手册

  • 使用命名空间 在创建工作负载、Service、Ingress、存储声明等场景时都会用到命名空间,以创建工作负载为例: 登录U CS 控制台,在左侧导航栏中选择“容器舰队”。 在“容器舰队”页签下找到已开通集群联邦的舰队,单击名称进入详情页。 在左侧导航栏中选择“工作负载”,在“无状态负载”页签中单击右上角“镜像创建”。 设置工作负载基本信息,选择工作负载所在的命名空间。 图1 使用命名空间 继续完成工作负载其他配置的填写并创建。
  • 创建命名空间 登录UCS控制台,在左侧导航栏中选择“容器舰队”。 在“容器舰队”页签下找到已开通集群联邦的舰队,单击名称进入详情页。 在左侧导航栏中选择“命名空间”,单击右上角“创建命名空间”。 参照表1设置命名空间参数。 表1 命名空间基本信息 参数 参数说明 命名空间名称 新建命名空间的名称,命名必须唯一。 标签 Key/value键值对格式,给命名空间添加自定义标签,定义不同属性,通过这些标签了解各个命名空间的特点。 注解 Key/value键值对格式,给命名空间添加自定义注解。 描述 输入对命名空间的描述信息。 配置完成后,单击“确定”。 创建完成后,可单击“查看YAML”查看YAML文件,并支持下载。
  • 查看策略实施状态 在容器舰队或集群的策略详情页,可以查看策略实施详情和状态,以及舰队或集群的不合规资源、告警事件和强制拦截事件的情况。您可以根据这些数据评估集群的合规情况,并及时采取修复措施。 当前,不合规资源统计的上报时间大约在15至30分钟之间。 如果下发策略实例后未对违规资源进行拦截或告警,请检查是否已开启ValidatingAdmissionPolicy特性门控、是否已启用ValidatingAdmissionWebhook和MutatingAdmissionWebhook准入控制器,详情请参考准入控制器的作用是什么?
  • 创建策略实例 登录UCS控制台,在左侧导航栏中选择“策略中心”。 在列表中找到已启用策略中心功能的容器舰队或集群,单击“创建策略实例”。 填写如下参数: 图1 创建策略实例 策略定义:从内置的33个策略定义中选择一个,以便为您的集群或容器舰队配置资源审计规则。尽管当前不支持自定义策略定义,但这些预定义的策略定义基本可以满足您在合规性和安全性方面的需求。策略定义的详细介绍请参阅策略定义库概述。 策略执行方式:包括拦截和告警两种方式。拦截表示不符合策略要求的资源将无法创建,告警表示不符合策略要求的资源仅告警提醒,仍可以正常创建。 策略生效范围:选择生效的命名空间。 单击“创建”,创建完成后系统会自动分发策略,如果分发成功,策略实例将在集群中生效。 策略实例分发成功后可在集群中执行符合策略实例的动作,此时该动作可正常执行;若在集群中执行不符合策略实例的动作,该动作将被拒绝掉或者上报告警事件。
  • 修改/删除策略实例 作为平台工程师,您通常需要定期审视和更新策略实例,或者删除一些不再使用的策略实例。要执行这些操作,请参考以下步骤: 登录UCS控制台,在左侧导航栏中选择“策略中心”。 在列表中找到已启用策略中心功能的容器舰队或集群,单击舰队或集群名称,进入详情页面。 在“策略实施详情”中单击“策略实例”页签。 找到待操作的策略实例,单击操作列的“编辑”或“删除”,完成相关参数的修改,或者删除策略实例。
  • 注销舰队中的集群 登录UCS控制台,在左侧导航栏中单击“容器舰队”。 在“容器舰队”页签下单击舰队名称,进入舰队详情页。 在左侧导航栏中选择“容器集群”,在目标集群栏中,单击右上角的按钮。 弹出“注销集群”对话框,仔细阅读注意事项,确认风险后单击“确定”。 图7 注销集群 (可选)对于附着集群来说,注销集群成功后,还需前往目标集群卸载代理组件。 kubectl -n kube-system delete deployments/proxy-agent secret/proxy-agent-cert (可选)对于本地集群来说,注销集群成功后,您可以手动执行卸载命令,在本地主机环境中删除集群,清理资源: ./ucs-ctl delete cluster [集群名称] 如果命令执行失败,请参考如何手动清理本地集群节点?处理。
  • 关联权限 登录UCS控制台,在左侧导航栏中选择“容器舰队”。 在目标舰队栏中,单击右上角的按钮。 图4 为舰队关联权限 在弹出的页面单击“关联权限”,打开“修改权限”页面,将已创建好的权限和舰队的命名空间关联起来。 图5 修改权限 命名空间:支持“全部命名空间”和“指定命名空间”。全部命名空间包括当前舰队已有的命名空间和舰队后续新增的命名空间;“指定命名空间”即表示您自己选择命名空间的范围,UCS服务提供了几个常见的命名空间供您选择(如default、kube-system、kube-public),您也可以新增命名空间,但要自行确保新增的命名空间在集群中存在。 请注意,选择的命名空间仅对权限中命名空间级资源生效,不影响权限中的集群资源。关于命名空间级和集群级资源的介绍,请参见Kubernetes资源对象章节。 关联权限:从下拉列表中选择权限,支持一次性选择多个权限,以达到批量授权的目的。 如果针对不同命名空间,关联的权限不同(例如:为default命名空间关联readonly权限,为development命名空间关联develop权限),可以单击按钮添加多组授权关系。 单击“确定”,完成权限的关联。 如果后续需要修改舰队的权限,采用同样的方法,重新选择命名空间和权限即可。
  • 创建舰队 登录UCS控制台,在左侧导航栏中选择“容器舰队”,在“容器舰队”页签下单击“创建容器舰队”。 填写舰队信息。 图1 创建容器舰队 舰队名称:自定义舰队的名称,需以小写字母开头,由小写字母、数字、中划线(-)组成,且不能以中划线(-)结尾。 添加集群:列表中显示当前未加入舰队的集群,可以在创建舰队时添加集群,也可以在舰队创建完成后添加。如不选择任何集群,则会创建一个空的舰队,完成创建后请参考添加集群。 描述:添加舰队的描述信息。 集群加入容器舰队,将拥有所选容器舰队的权限,但会失去原有赋予的权限。 单击“确定”,创建舰队。
  • 添加集群 登录UCS控制台,在左侧导航栏中选择“容器舰队”。 在目标舰队栏中单击“添加集群”,或单击右上角的按钮。 您也可以单击舰队名称进入舰队详情页,在“容器集群”页面单击右上角“添加集群”。 图2 为舰队添加集群 勾选一个或多个已有集群。一个集群只能加入一个舰队,因此列表中显示的集群均为未加入舰队的集群。 图3 添加集群 集群加入容器舰队,将拥有所选容器舰队的权限,但会失去原有赋予的权限。 如果该舰队开通了集群联邦,集群会自动接入集群联邦。关于集群联邦的介绍,请参见开通集群联邦章节。 单击“确定”,完成集群添加。
  • 符合策略实例的资源定义 示例中hostPID和hostIPC均为false,符合策略实例。 apiVersion: v1 kind: Pod metadata: name: nginx-host-namespace-allowed labels: app: nginx-host-namespace spec: hostPID: false hostIPC: false containers: - name: nginx image: nginx
  • 不符合策略实例的资源定义 示例中hostPID和hostIPC均为true,不符合策略实例。 apiVersion: v1 kind: Pod metadata: name: nginx-host-namespace-disallowed labels: app: nginx-host-namespace spec: hostPID: true hostIPC: true containers: - name: nginx image: nginx
  • 策略实例示例 以下策略实例展示了策略定义生效的资源类型。 apiVersion: constraints.gatekeeper.sh/v1beta1 kind: K8sPSPHostNamespace metadata: name: psp-host-namespace spec: match: kinds: - apiGroups: [""] kinds: ["Pod"]
  • 符合策略实例的资源定义 示例中的container.seccomp.security.alpha.kubernetes.io/nginx注解的value在设定的值列表中,符合策略定义。 apiVersion: v1 kind: Pod metadata: name: nginx-seccomp-allowed annotations: container.seccomp.security.alpha.kubernetes.io/nginx: runtime/default labels: app: nginx-seccomp spec: containers: - name: nginx image: nginx
  • 策略实例示例 以下策略实例展示了策略定义生效的资源类型,parameters中allowedProfiles定义了允许的注解。 apiVersion: constraints.gatekeeper.sh/v1beta1 kind: K8sPSPSeccomp metadata: name: psp-seccomp spec: match: kinds: - apiGroups: [""] kinds: ["Pod"] parameters: allowedProfiles: - runtime/default - docker/default
  • 不符合策略实例的资源定义 示例中的container.seccomp.security.alpha.kubernetes.io/nginx注解的value没在设定的值列表中,不符合策略定义。 apiVersion: v1 kind: Pod metadata: name: nginx-seccomp-disallowed annotations: container.seccomp.security.alpha.kubernetes.io/nginx: unconfined labels: app: nginx-seccomp spec: containers: - name: nginx image: nginx
  • 集群内访问(ClusterIP) 登录集群控制台。 在左侧导航栏中选择“服务发现”,选择“服务”页签,并选择服务所在命名空间。如需新建命名空间,请参见创建命名空间。 单击右上角“创建服务”,设置集群内访问参数。 Service名称:自定义服务名称,可与工作负载名称保持一致。 访问类型:选择“集群内访问 ClusterIP”。 命名空间:工作负载所在命名空间。 选择器:添加标签,Service根据标签选择Pod,填写后单击“添加”。也可以引用已有工作负载的标签,单击“引用负载标签”,在弹出的窗口中选择负载,然后单击“确定”。 端口配置: 协议:请根据业务的协议类型选择。 服务端口:容器端口映射到集群虚拟IP上的端口,用虚拟IP访问工作负载时使用,端口范围为1-65535,可任意指定。 容器端口:工作负载程序实际监听的端口,需用户确定。例如nginx程序实际监听的端口为80。 单击“确定”,创建Service。
  • 节点访问(NodePort) 登录集群控制台。 在左侧导航栏中选择“服务发现”,选择“服务”页签,并选择服务所在命名空间。如需新建命名空间,请参见创建命名空间。 单击右上角“创建服务”,设置集群内访问参数。 Service名称:自定义服务名称,可与工作负载名称保持一致。 访问类型:选择“节点访问 NodePort”。 服务亲和: 集群级别:集群下所有节点的IP+访问端口均可以访问到此服务关联的负载,服务访问会因路由跳转导致一定性能损失,且无法获取到客户端源IP。 节点级别:只有通过负载所在节点的IP+访问端口才可以访问此服务关联的负载,服务访问没有因路由跳转导致的性能损失,且可以获取到客户端源IP。 命名空间:工作负载所在命名空间。 选择器:添加标签,Service根据标签选择Pod,填写后单击“添加”。也可以引用已有工作负载的标签,单击“引用负载标签”,在弹出的窗口中选择负载,然后单击“确定”。 端口配置: 协议:请根据业务的协议类型选择。 服务端口:容器端口映射到集群虚拟IP上的端口,用虚拟IP访问应用时使用,端口范围为1-65535,可任意指定。 容器端口:容器镜像中应用程序实际监听的端口,需用户确定。例如:nginx程序实际监听的端口为80。 节点端口:容器端口映射到节点私有IP上的端口,用私有IP访问应用时使用,端口范围为30000-32767,建议选择“自动生成”。 自动生成:系统会自动分配端口号。 指定端口:指定固定的节点端口,默认取值范围为30000-32767。若指定端口时,请确保同个集群内的端口唯一性。 单击“确定”,创建Service。
  • 负载均衡(LoadBalancer) 登录集群控制台。 在左侧导航栏中选择“服务发现”,选择“服务”页签,并选择服务所在命名空间。如需新建命名空间,请参见创建命名空间。 单击右上角“创建服务”,设置集群内访问参数。 Service名称:自定义服务名称,可与工作负载名称保持一致。 访问类型:选择“负载均衡 LoadBalancer”。 服务亲和: 集群级别:集群下所有节点的IP+访问端口均可以访问到此服务关联的负载,服务访问会因路由跳转导致一定性能损失,且无法获取到客户端源IP。 节点级别:只有通过负载所在节点的IP+访问端口才可以访问此服务关联的负载,服务访问没有因路由跳转导致的性能损失,且可以获取到客户端源IP。 命名空间:工作负载所在命名空间。 选择器:添加标签,Service根据标签选择Pod,填写后单击“添加”。也可以引用已有工作负载的标签,单击“引用负载标签”,在弹出的窗口中选择负载,然后单击“确定”。 端口配置: 协议:请根据业务的协议类型选择。 服务端口:容器端口映射到集群虚拟IP上的端口,用虚拟IP访问应用时使用,端口范围为1-65535,可任意指定。 容器端口:容器镜像中应用程序实际监听的端口,需用户确定。例如:nginx程序实际监听的端口为80。 注解:支持key/value对格式,请您根据自身业务以及厂家要求进行注解配置,填写完成后单击“添加”。 单击“确定”,创建Service。
  • Cilium underlay能力 在页面提供的本地集群配置文件“cluster-[集群名称].yaml”中添加以下配置: CILIUM_NETWORK_MODE: underlay 例图: 模式优势: 此模式下,Cilium会将所有未发送到其他容器的数据包委托给Linux内核的路由子系统。这意味着数据包将被路由直接转发,就好像本地进程发出数据包一样,减少了数据包的封装和转换。因此,在大流量场景下,该模式存在一定性能优势。 该模式下自动配置ipv4-native-routing-cidr,Cilium会在Linux内核中自动启用IP转发。 模式依赖: 在underlay模式下,运行Cilium的主机的网络必须能够使用分配给Pod或其他工作负载的地址转发IP流量,需要关闭节点的源目的地址检查,并且节点安全组按需放通容器网段的端口及协议。
  • 为什么需要Cilium Cilium是一种高性能、高可靠性的容器网络解决方案,它通过eBPF技术在Linux内核层面实现网络和安全通信。它支持多种传输层协议,例如TCP、UDP和HTTP,并提供了多种安全特性,例如应用层访问控制和服务网格支持。Cilium还支持Kubernetes网络策略,并提供了全局网络和服务发现功能,能够帮助管理员更好地管理和部署云原生应用和服务。 Cilium的eBPF 技术通过在Linux内核层面实时监控网络流量,实现了高效的安全数据包交换。该技术在网络功能虚拟化、容器网络和边缘计算等场景中都有广泛应用,能够帮助企业提升网络性能和安全性,为云原生应用提供更好的基础设施支持。 基本功能 为容器提供网络互通:Cilium通过为每个容器分配一个独特的IP地址来实现容器间的网络互通,同时支持多种网络协议。 具备网络安全检测能力:Cilium支持通过集成第三方的网络安全检测服务,如Snort等,来进行网络流量分析和检测。 自动进行 容器安全 策略管理:Cilium通过基于Kubernetes 的自定义资源定义(CRD)机制,为每个容器自动创建安全策略,保障容器的安全。 实现容器级别的负载均衡:Cilium支持实现容器级别的负载均衡,允许通过多种负载均衡算法来分配网络请求流量。 提供服务发现功能:Cilium支持借助基于Kubernetes的服务探测机制,自动发现容器内的服务,并将其注册到Kubernetes API中,以便于其他容器访问。
  • Cilium对接主机BGP 在页面提供的本地集群配置文件“cluster-[集群名称].yaml”中添加以下配置: CILIUM_BGP_ENABLE: true CILIUM_BGP_PEER_ADDRESS: 需要对接的交换机地址。 CILIUM_BGP_PEER_ASN: 需要对接的交换机BGP AS number(64512-65535)。 LOAD_BALANCER_CIDR:需要广播出去的负载均衡网段,可提供给metalLB等开源插件使用。 例图: 将需要对外暴露容器网络的节点IP,作为neighbor address(交换机邻居地址)配置在主机所在的BGP网络中,容器的ASN默认为65010。 Cilium的BGP能力是以节点粒度对外宣告节点容器路由,实现集群外节点服务直接访问集群内Pod。
  • 相关操作 通过UCS控制台,您还可以执行表1中的操作。 表1 相关操作 操作 说明 YAML创建 单击右上角“YAML创建”,可使用已有的YAML创建服务。 查看详情 选择服务所在的命名空间。 (可选)根据服务名称进行搜索。 单击服务名称即可查看服务详情,包括基本信息以及各集群的部署信息。 在服务详情页的部署集群栏中单击“查看YAML”,可查看各个集群中部署的服务实例YAML,并支持下载。 编辑YAML 单击服务名称后的“编辑YAML”,可查看并编辑当前服务的YAML文件。 更新 单击服务名称后的“更新”。 根据服务参数更改信息。 单击“确认”提交已修改的信息。 删除 单击服务名称后的“删除”,并单击“是”进行确认。 批量删除 勾选需要删除的服务。 单击左上角的“批量删除”。 单击“是”进行确认。
  • 创建工作负载后设置 登录UCS控制台,在左侧导航栏中选择“容器舰队”。 在“容器舰队”页签下找到已开通集群联邦的舰队,单击名称进入详情页。 在左侧导航栏中选择“服务与路由”,选择“服务”页签。 选择服务所在命名空间,并单击右上角“创建服务”。如需新建命名空间,请参见创建命名空间。 设置访问参数。 Service名称:自定义服务名称,可与工作负载名称保持一致。 服务类型:选择“集群内访问 ClusterIP”。 端口配置: 协议:TCP或UDP,请根据业务的协议类型选择。 服务端口:容器端口映射到集群虚拟IP上的端口,用虚拟IP访问应用时使用,端口范围为1-65535,可任意指定。 容器端口:容器镜像中应用程序实际监听的端口,需用户确定。例如:nginx程序实际监听的端口为80。 命名空间:服务所在命名空间。 选择器:服务通过选择器与负载(标签)关联。单击“引用负载标签”,可选择已有的工作负载。 负载类型:选择需要关联的负载类型。 工作负载:选择一个已有的工作负载。如工作负载列表未显示,请单击刷新。 标签:选择工作负载后自动获取对应的标签,不可修改。 单击“确认”。创建成功后可在“服务”页签的列表中查看。
  • 创建工作负载时设置 创建Deployment、StatefulSet、DaemonSet等不同类型的工作负载时添加Service的方法一致。 参考创建无状态负载、创建有状态负载或创建守护进程集,在服务配置步骤,单击,进行工作负载服务配置。 Service名称:新增服务名称,用户可自定义。 访问类型:选择“集群内访问 ClusterIP”。 端口配置: 协议:TCP或UDP,请根据业务的协议类型选择。 服务端口:容器端口映射到集群虚拟IP上的端口,用虚拟IP访问应用时使用,端口范围为1-65535,可任意指定。 容器端口:容器镜像中应用程序实际监听的端口,需用户确定。例如:nginx程序实际监听的端口为80。 设置完成后,单击“确认”。 单击“下一步:调度与差异化”,进行集群调度与差异化配置。设置完成后,单击“创建工作负载”完成创建。 获取访问地址。 单击左侧导航栏“服务与路由”,选择“服务”页签。 单击所添加的Service名称进入“服务详情”界面,获取部署集群的访问地址。
  • 基础规划 配置 支持版本 集群版本 v1.25.15-r7及以上 操作系统 Huawei Cloud EulerOS 2.0 GPU类型 T4、V100 GPU驱动版本 470.57.02、470.103.01、470.141.03、510.39.01、510.47.03 容器运行时 containerd 插件 集群中需要同时安装以下插件: volcano插件:1.10.1及以上版本 gpu-device-plugin插件:2.0.0及以上版本
  • 步骤一:安装插件 如果您的集群中已安装符合基础规划的插件,您可以跳过此步骤。 更改驱动版本后,需要重启节点才能生效。 登录UCS控制台,单击集群名称进入集群,在左侧导航栏中选择“插件管理”,查看“已安装插件”中是否存在volcano插件与gpu-device-plugin插件。 若未安装volcano插件,请安装该插件,具体操作请参见volcano。 若未安装gpu-device-plugin插件,请安装该插件,具体操作请参见gpu-device-plugin。
  • 符合策略实例的资源定义 externalIPs中的IP为允许列表中的IP,符合策略实例。 apiVersion: v1 kind: Service metadata: name: allowed-external-ip spec: selector: app: MyApp ports: - name: http protocol: TCP port: 80 targetPort: 8080 externalIPs: - 203.0.113.0
  • 不符合策略实例的资源定义 externalIPs中的IP不为允许列表中的IP,不符合策略实例。 apiVersion: v1 kind: Service metadata: name: disallowed-external-ip spec: selector: app: MyApp ports: - name: http protocol: TCP port: 80 targetPort: 8080 externalIPs: - 1.1.1.1
  • 策略实例示例 服务的externalIP仅允许allowedIPs中定义的IP。 apiVersion: constraints.gatekeeper.sh/v1beta1 kind: K8sExternalIPs metadata: name: external-ips spec: match: kinds: - apiGroups: [""] kinds: ["Service"] parameters: allowedIPs: - "203.0.113.0"
  • 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条