华为云用户手册

  • 重定向 开启重定向,可以在客户端将对目标地址的请求重定向到配置的新的目标地址。 YAML设置如下: apiVersion: networking.istio.io/v1beta1kind: VirtualServicemetadata: name: ratings-routespec: hosts: - ratings.prod.svc.cluster.local http: - match: - uri: exact: /v1/getProductRatings redirect: # 配置重定向参数 uri: /v1/bookRatings authority: newratings.default.svc.cluster.local 请根据实际需求调整配置参数。 父主题: 服务路由协议
  • 设置命名空间配额 资源配额可以限制命名空间下的资源使用,进而支持以命名空间为粒度的资源划分。 通过设置命名空间级别的资源配额,实现多团队或多用户在共享集群资源的情况下限制团队、用户可以使用的资源总量,包括限制命名空间下创建某一类型对象的数量以及对象消耗计算资源(CPU、内存)的总量。 系统创建的kube-public、kube-system等命名空间不支持设置资源配额。 登录集群控制台。 在左侧导航栏中选择“命名空间”,单击对应命名空间后的“管理配额”。 设置资源配额。 所有配额均默认为不限制,如需设置资源配额,请输入大于等于1的整型数值。若手动限制CPU或内存的配额,则创建工作负载时必须指定CPU或内存请求值。 配额累计使用量包含系统默认创建的资源,如default命名空间下系统默认创建的Kubernetes服务(该服务可通过后端kubectl工具查看)等,故建议命名空间下的资源配额略大于实际期望值以去除系统默认创建资源的影响。 CPU(Core):限制命名空间下工作负载实例(Pod)能申请CPU资源的最大值,单位为“核”。 内存(MiB):限制命名空间下工作负载实例能申请内存资源的最大值,单位为MiB。 有状态工作负载(StatefulSet):限制命名空间下能创建有状态负载的最大数量。 无状态工作负载(Deployment):限制命名空间下能创建无状态负载的最大数量。 普通任务(Job):限制命名空间下能创建普通任务的最大数量。 定时任务(CronJob):限制命名空间下能创建定时任务的最大数量。 容器组(Pod):限制命名空间下能创建Pod的最大数量,包含停止状态的Pod。 容器组(不包含停止状态的Pod):限制命名空间下能创建Pod的最大数量,不包含停止状态的Pod。 服务(Service):限制命名空间下能创建服务的最大数量,包含停止状态的Service。 服务(不包含停止状态的Service):限制命名空间下能创建服务的最大数量,不包含停止状态的Service。 存储卷声明(PersistentVolumeClaim):限制命名空间下能创建存储卷声明的最大数量。 配置项(ConfigMap):限制命名空间下能创建配置项的最大数量。 密钥(Secret):限制命名空间下能创建密钥的最大数量。 单击“确定”。
  • 操作步骤 登录集群控制台。 在左侧导航栏中选择“服务”,选择“路由”页签,并选择路由所在命名空间。如需新建命名空间,请参见创建命名空间。 单击右上角“创建路由”,设置路由配置参数。 名称:新增路由的名称,用户可自定义。 命名空间:路由所在命名空间。 TLS配置: 服务器证书:选择IngressTLS类型的服务器证书。若无符合条件的证书,可单击“创建IngressTLS类型的密钥证书”,请参考创建密钥创建一个指定类型的密钥证书。如需获取TLS证书,请参考如何获取TLS密钥证书?。 SNI(Server Name Indication):输入 域名 并选择对应的证书。SNI是TLS的扩展协议,在该协议下允许同一个IP地址和端口号下对外提供多个基于TLS的访问域名,且不同的域名可以使用不同的安全证书。 转发策略配置:请求的访问地址与转发规则匹配时(转发规则由域名、URL组成,例如:10.117.117.117:80/helloworld),此请求将被转发到对应的目标Service处理。您可添加多条转发策略。 域名:可选项,输入实际访问的域名地址。请确保所填写的域名已注册并备案,一旦配置了域名规则后,必须使用域名访问。 URL:需要注册的访问路径,例如:/healthz。该访问路径需与后端应用暴露的URL一致,否则将返回404错误。 目标服务名称:选择服务名称,需要先创建NodePort服务,具体可参考节点访问(NodePort)。 目标服务访问端口:选择目标服务后,对应的容器端口将自动获取。 Ingress Class:支持选择集群内已创建的Ingress Class,或手动输入规划的Ingress Class名称。 注解:支持key/value对格式,请您根据自身业务以及厂家要求进行注解配置,填写完成后单击“添加”。 单击“确定”,创建Ingress。
  • 创建配置项 登录集群控制台,单击左侧导航栏的“配置项与密钥”,选择“配置项”页签。您还可以直接创建配置项或基于YAML来创建,若希望通过YAML创建,请跳转至4。 选择需要创建配置项的命名空间。 直接创建配置项。单击“创建配置项”。 参照表1设置新增配置参数。 表1 新建配置参数说明 参数 参数说明 名称 新建的配置项名称,同一个命名空间里命名必须唯一。 命名空间 新建配置项所在的命名空间,默认为当前查看的命名空间。 描述 配置项的描述信息。 配置项数据 工作负载配置的数据可以在容器中使用,或被用来存储配置数据。 单击 ,输入键、值。其中,“键”代表配置名;“值”代表配置内容。 说明: 配置项可用于创建工作负载存储卷和设置工作负载环境变量,设置工作负载环境变量时,该配置项数据不可为空。 配置标签 标签以Key/value键值对的形式附加到各种对象上(如工作负载、节点、服务等)。 标签定义了这些对象的可识别属性,用来对它们进行管理和选择。 输入标签键、值。 单击“确认添加” 。 基于YAML创建配置项。在创建配置项页面右侧单击“YAML创建”。 若需要通过上传文件的方式创建资源,请确保资源描述文件已创建。支持json或yaml格式,详细请参见ConfigMap资源文件配置说明。 您可以导入或直接编写文件内容,格式为YAML或JSON。 方式一:导入编排文件。 单击“导入”,导入格式为YAML或JSON的文件。编排内容中可直接展示YAML或JSON文件的内容。 方式二:直接编排内容。 在编排内容区域框中,输入YAML或JSON文件内容。 配置完成后,单击“确定”。 配置项列表中会出现新创建的配置项。
  • ConfigMap资源文件配置说明 ConfigMap资源文件支持json和yaml两种文件格式,且文件大小不得超过2MB。 json文件格式 文件名称为configmap.json,配置示例如下: { "kind": "ConfigMap", "apiVersion": "v1", "metadata": { "name": "paas-broker-app-017", "namespace": "test" }, "data": { "context": "{\"applicationComponent\":{\"properties\":{\"custom_spec\":{}},\"node_name\":\"paas-broker-app\",\"stack_id\":\"0177eae1-89d3-cb8a-1f94-c0feb7e91d7b\"},\"softwareComponents\":[{\"properties\":{\"custom_spec\":{}},\"node_name\":\"paas-broker\",\"stack_id\":\"0177eae1-89d3-cb8a-1f94-c0feb7e91d7b\"}]}" }} yaml文件格式 文件名称为configmap.yaml,配置示例如下: apiVersion: v1kind: ConfigMapmetadata: name: test-configmap namespace: defaultdata: data-1: "value-1" data-2: "value-2"
  • 相关操作 通过集群控制台,您还可以执行表2中的操作。 表2 相关操作 操作 说明 查看详情 单击配置项名称即可查看配置项数据详情。 编辑YAML 单击配置项名称后的“编辑YAML”,可查看并编辑当前配置项的YAML文件。 更新 单击配置项名称后的“更新”。 根据表1更改信息。 单击“确定”提交已修改的信息。 删除 单击配置项名称后的“删除”,并单击“是”进行确认。 批量删除 勾选需要删除的配置项。 单击左上角的“批量删除”。 单击“是”进行确认。
  • 产品功能 容器洞察:提供基于Kubernetes原生类型的容器监控能力,支持集群、节点、工作负载的资源全景,支持节点的资源占用、工作负载的资源消耗,以及近一小时的CPU/内存指标展示,全面监控集群的健康状态和负荷程度。 健康诊断:对集群健康状态进行周期性检查,可以对集群、节点资源使用情况,工作负载、Pod资源状态进行快速诊断。 仪表盘:仪表盘可将不同图表展示到同一个屏幕上,通过不同的仪表形式来展示资源数据,例如,曲线图、数字图等,进而全面、深入地掌握监控数据。
  • 产品优势 容器智能分析深度整合云原生基金会(CNCF)的监控项目Prometheus,同时遵循OpenTracing/OpenTelemetry规范。对关键指标、事件等运维数据进行统一采集、存储和可视化展现,精心打造云原生应用的良好可观测性能力。 将云原生基础设施监控和应用负载监控进行关联,提供全栈监控,使用户能够随时随地清晰地感知基础设施和应用负载状态。 能够对Kubernetes集群、容器组(Pod)等进行详细监控,对业务提供端到端追踪和可视化,提供集群健康诊断能力,大大缩短问题分析定位时间。 提供开箱即用的插件安装、数据采集、仪表盘监控能力,相比基于开源产品打造的监控产品,在可靠性、高可用、安装部署便捷性上更具有竞争力,能够更好的为您的云原生应用保驾护航。
  • 节点访问(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。
  • 集群内访问(ClusterIP) 登录集群控制台。 在左侧导航栏中选择“服务”,选择“服务”页签,并选择服务所在命名空间。如需新建命名空间,请参见创建命名空间。 单击右上角“创建服务”,设置集群内访问参数。 Service名称:自定义服务名称,可与工作负载名称保持一致。 访问类型:选择“集群内访问 ClusterIP”。 命名空间:工作负载所在命名空间。 选择器:添加标签,Service根据标签选择Pod,填写后单击“添加”。也可以引用已有工作负载的标签,单击“引用负载标签”,在弹出的窗口中选择负载,然后单击“确定”。 端口配置: 协议:请根据业务的协议类型选择。 服务端口:容器端口映射到集群虚拟IP上的端口,用虚拟IP访问工作负载时使用,端口范围为1-65535,可任意指定。 容器端口:工作负载程序实际监听的端口,需用户确定。例如nginx程序实际监听的端口为80。 单击“确定”,创建Service。
  • 相关操作 密钥创建完成后,您还可以执行表2中的操作。 kube-system命名空间下的密钥资源不能通过控制台更新,也不能删除,只能查看。 表2 其他操作 操作 说明 编辑YAML 单击密钥名称后的“编辑YAML”,可编辑当前密钥的YAML文件。 更新密钥 选择需要更新的密钥名称,单击“更新”。 根据表1更改信息。 单击“确定”。 删除密钥 选择要删除的密钥,单击“删除”。 根据系统提示删除密钥。 批量删除密钥 勾选需要删除的密钥名称。 单击页面左上角的“批量删除”,删除勾选的密钥。 根据系统提示删除密钥。
  • Secret资源文件配置说明 本章节主要介绍Secret类型的资源描述文件的配置示例。 例如现在有一个工作负载需要获取账号密码,可以通过Secret来实现: yaml文件格式 定义的Secret文件secret.yaml内容如下。其中Value需要用Base64,Base64编码方法请参见如何进行Base64编码。 apiVersion: v1kind: Secretmetadata: name: mysecret # secret的名称 namespace: default #命名空间,默认为defaultdata: username: bXktdXNlcm5hbWUK #用户名,需要用Base64编码 password: ****** #需要用Base64编码type: Opaque # type建议不要做修改 json文件格式 定义的Secret文件secret.json内容如下。 { "apiVersion": "v1", "kind": "Secret", "metadata": { "name": "mysecret", "namespace": "default" }, "data": { "username": "bXktdXNlcm5hbWUK", "password": "******" }, "type": "Opaque"}
  • 通过控制台配置工作负载升级 在创建工作负载时,单击“展开高级配置”。 参考表1,设置升级策略。 表1 参数说明 参数 描述 升级方式 设置不同的升级策略,有如下两种。 RollingUpdate:滚动升级,即逐步创建新Pod再删除旧Pod,为默认策略。 Recreate:替换升级,即先把当前Pod删掉再重新创建Pod。 最大无效实例数(maxUnavailable) 与spec.replicas相比,可以有多少个Pod失效,也就是删除的比例,默认值是25%,比如spec.replicas为4,那升级过程中就至少有3个Pod存在,即删除Pod的步伐是1。同样这个值也可以设置成数字。 仅Deployment支持配置。 最大浪涌(maxSurge) 与spec.replicas相比,可以有多少个Pod存在,默认值是25%,比如spec.replicas为 4,那升级过程中就不能超过5个Pod存在,即按1个的步伐升级,实际升级过程中会换算成数字,且换算会向上取整。这个值也可以直接设置成数字。 仅Deployment支持配置。 实例可用最短时间(minReadySeconds) 指定新创建的 Pod 在没有任意容器崩溃情况下的最小就绪时间, 只有超出这个时间 Pod 才被视为可用。默认值为 0(Pod 在准备就绪后立即将被视为可用)。 最大保留版本数(revisionHistoryLimit) 用来设定出于回滚目的所要保留的旧 ReplicaSet 数量。 这些旧 ReplicaSet 会消耗 etcd 中的资源,并占用 kubectl get rs 的输出。 每个 Deployment 修订版本的配置都存储在其 ReplicaSets 中;因此,一旦删除了旧的 ReplicaSet, 将失去回滚到 Deployment 的对应修订版本的能力。 默认情况下,系统保留 10 个旧 ReplicaSet,但其理想值取决于新 Deployment 的频率和稳定性。 升级最大时长(progressDeadlineSeconds) 指定系统在报告 Deployment 进展失败 之前等待 Deployment 取得进展的秒数。 这类报告会在资源状态中体现为 Type=Progressing、Status=False、 Reason=ProgressDeadlineExceeded。Deployment 控制器将持续重试 Deployment。 将来,一旦实现了自动回滚,Deployment 控制器将在探测到这样的条件时立即回滚 Deployment。 如果指定,则此字段值需要大于 .spec.minReadySeconds 取值。 缩容时间窗(terminationGracePeriodSeconds) 优雅删除时间,默认为30秒,删除Pod时发送SIGTERM终止信号,然后等待容器中的应用程序终止执行,如果在terminationGracePeriodSeconds时间内未能终止,则发送SIGKILL的系统信号强行终止。 图1 升级策略
  • 通过命令行配置升级示例 Deployment的升级可以是声明式的,也就是说只需要修改Deployment的YAML定义即可,比如使用kubectl edit命令将上面Deployment中的镜像修改为nginx:alpine。修改完成后再查询ReplicaSet和Pod,发现创建了一个新的ReplicaSet,Pod也重新创建了。 $ kubectl edit deploy nginx$ kubectl get rsNAME DESIRED CURRENT READY AGEnginx-6f9f58dffd 2 2 2 1mnginx-7f98958cdf 0 0 0 48m$ kubectl get podsNAME READY STATUS RESTARTS AGEnginx-6f9f58dffd-tdmqk 1/1 Running 0 1mnginx-6f9f58dffd-tesqr 1/1 Running 0 1m Deployment可以通过maxSurge和maxUnavailable两个参数控制升级过程中同时重新创建Pod的比例,这在很多时候是非常有用,配置如下所示。 spec: strategy: rollingUpdate: maxSurge: 1 maxUnavailable: 0 type: RollingUpdate 在前面的例子中,由于spec.replicas是2,如果maxSurge和maxUnavailable都为默认值25%,那实际升级过程中,maxSurge允许最多3个Pod存在(向上取整,2*1.25=2.5,取整为3),而maxUnavailable则不允许有Pod Unavailable(向上取整,2*0.75=1.5,取整为2),也就是说在升级过程中,一直会有2个Pod处于运行状态,每次新建一个Pod,等这个Pod创建成功后再删掉一个旧Pod,直至Pod全部为新Pod。
  • 通过命令行回退工作负载版本 例如上面升级的新版镜像有问题,可以执行kubectl rollout undo命令进行回滚。 $ kubectl rollout undo deployment nginxdeployment.apps/nginx rolled back Deployment之所以能如此容易的做到回滚,是因为Deployment是通过ReplicaSet控制Pod的,升级后之前ReplicaSet都一直存在,Deployment回滚做的就是使用之前的ReplicaSet再次把Pod创建出来。Deployment中保存ReplicaSet的数量可以使用revisionHistoryLimit参数限制,默认值为10。
  • 不同Region U CS 华为云集群迁移流程 在华为云UCS管理的Kubernetes集群间进行迁移,将应用程序从一个地理区域迁移到另一个地理区域,以满足数据合规性、延迟和可用性等需求。迁移流程如图1所示。 图1 迁移流程 主要包含四个步骤: 集群评估 在这个阶段,您将根据源集群的现状来评估适合迁移的目标集群类型。UCS的kspider工具能够自动收集源集群的信息,包括Kubernetes版本、规模、工作负载、存储等数据,并根据收集到的数据为您提供推荐的目标集群信息。具体请参见集群评估。 数据迁移 在这个阶段,您将把镜像和相关依赖服务的数据迁移到目标Region。镜像的跨区域迁移可以使用 容器镜像服务 SWR的“镜像同步”功能。 对于依赖服务的数据迁移,您可以查看华为云对应云产品的跨区域迁移指导来完成。具体请参见数据迁移。 应用备份 在这个阶段,您将对源Region集群中的应用进行备份。UCS的k8clone工具可以自动收集Kubernetes元数据,并将其以压缩包的形式保存到本地,从而实现集群中应用的备份。具体请参见应用备份。 应用迁移 在这个阶段,您将利用备份数据恢复的方法,将源Region集群中的应用迁移到目标Region集群。具体请参见应用迁移。 父主题: 不同Region UCS华为云集群迁移
  • 同Region UCS华为云集群迁移流程 在同一地理区域内的华为云UCS管理的Kubernetes集群间进行迁移,实现资源优化、应用升级或其他管理需求。迁移流程如图1所示。 图1 迁移流程 主要包含四个步骤: 集群评估 在这个阶段,您将根据源集群的现状来评估适合迁移的目标集群类型。UCS的kspider工具能够自动收集源集群的信息,包括Kubernetes版本、规模、工作负载、存储等数据,并根据收集到的数据为您提供推荐的目标集群信息。具体请参见集群评估。 存储迁移 在这个阶段,您将把云硬盘的数据迁移到目标AZ。具体请参见存储迁移。 应用备份 在这个阶段,您将对源AZ集群中的应用进行备份。UCS的k8clone工具可以自动收集Kubernetes元数据,并将其以压缩包的形式保存到本地,从而实现集群中应用的备份。具体请参见应用备份。 应用迁移 在这个阶段,您将利用备份数据恢复的方法,将源AZ集群中的应用迁移到目标AZ集群。具体请参见应用迁移。 父主题: 同Region UCS华为云集群迁移
  • 创建策略实例 登录UCS控制台,在左侧导航栏中选择“策略中心”。 在列表中找到已启用策略中心功能的容器舰队或集群,单击“创建策略实例”。 填写如下参数: 图1 创建策略实例 策略定义:从内置的33个策略定义中选择一个,以便为您的集群或容器舰队配置资源审计规则。尽管当前不支持自定义策略定义,但这些预定义的策略定义基本可以满足您在合规性和安全性方面的需求。策略定义的详细介绍请参阅策略定义库概述。 策略执行方式:包括拦截和告警两种方式。拦截表示不符合策略要求的资源将无法创建,告警表示不符合策略要求的资源仅告警提醒,仍可以正常创建。 策略生效范围:选择生效的命名空间。 单击“创建”,创建完成后系统会自动分发策略,如果分发成功,策略实例将在集群中生效。 策略实例分发成功后可在集群中执行符合策略实例的动作,此时该动作可正常执行;若在集群中执行不符合策略实例的动作,该动作将被拒绝掉或者上报告警事件。
  • 修改/删除策略实例 作为平台工程师,您通常需要定期审视和更新策略实例,或者删除一些不再使用的策略实例。要执行这些操作,请参考以下步骤: 登录UCS控制台,在左侧导航栏中选择“策略中心”。 在列表中找到已启用策略中心功能的容器舰队或集群,单击舰队或集群名称,进入详情页面。 在“策略实施详情”中单击“策略实例”页签。 找到待操作的策略实例,单击操作列的“编辑”或“删除”,完成相关参数的修改,或者删除策略实例。
  • 查看策略实施状态 在容器舰队或集群的策略详情页,可以查看策略实施详情和状态,以及舰队或集群的不合规资源、告警事件和强制拦截事件的情况。您可以根据这些数据评估集群的合规情况,并及时采取修复措施。 图2 策略实施详情 当前,不合规资源统计的上报时间大约在15至30分钟之间。 如果下发策略实例后未对违规资源进行拦截或告警,请检查是否已开启ValidatingAdmissionPolicy特性门控、是否已启用ValidatingAdmissionWebhook和MutatingAdmissionWebhook准入控制器,详情请参考准入控制器的作用是什么?
  • 符合策略实例的资源定义 示例中sysctls的name符合策略实例。 apiVersion: v1kind: Podmetadata: name: nginx-forbidden-sysctls-disallowed labels: app: nginx-forbidden-sysctlsspec: containers: - name: nginx image: nginx securityContext: sysctls: - name: net.core.somaxconn value: "1024"
  • 策略实例示例 以下策略实例展示了策略定义生效的资源类型,parameters中的forbiddenSysctls定义了sysctls中不能允许的名称。 apiVersion: constraints.gatekeeper.sh/v1beta1kind: K8sPSPForbiddenSysctlsmetadata: name: psp-forbidden-sysctlsspec: match: kinds: - apiGroups: [""] kinds: ["Pod"] parameters: forbiddenSysctls: # - "*" # * may be used to forbid all sysctls - kernel.*
  • 不符合策略实例的资源定义 示例中sysctls的name(kernel.msgmax)不符合策略实例。 apiVersion: v1kind: Podmetadata: name: nginx-forbidden-sysctls-disallowed labels: app: nginx-forbidden-sysctlsspec: containers: - name: nginx image: nginx securityContext: sysctls: - name: kernel.msgmax value: "65536" - name: net.core.somaxconn value: "1024"
  • 策略实例示例 以下策略实例展示了策略定义生效的资源类型,parameters中定义了对runAsUser、runAsGroup、supplementalGroups和fsGroup等字段的约束。 apiVersion: constraints.gatekeeper.sh/v1beta1kind: K8sPSPAllowedUsersmetadata: name: psp-pods-allowed-user-rangesspec: match: kinds: - apiGroups: [""] kinds: ["Pod"] parameters: runAsUser: rule: MustRunAs # MustRunAsNonRoot # RunAsAny ranges: - min: 100 max: 200 runAsGroup: rule: MustRunAs # MayRunAs # RunAsAny ranges: - min: 100 max: 200 supplementalGroups: rule: MustRunAs # MayRunAs # RunAsAny ranges: - min: 100 max: 200 fsGroup: rule: MustRunAs # MayRunAs # RunAsAny ranges: - min: 100 max: 200
  • 基本信息 策略类型:安全 推荐级别:L3 生效资源类型:Pod 参数: exemptImages: 字符串数组runAsUser: rule: 字符串 ranges: - min: 整型 max: 整型runAsGroup: rule: 字符串 ranges: - min: 整型 max: 整型supplementalGroups: rule: 字符串 ranges: - min: 整型 max: 整型fsGroup: rule: 字符串 ranges: - min: 整型 max: 整型
  • 不符合策略实例的资源定义 示例中runAsUser等参数不在范围内,不符合策略实例。 apiVersion: v1kind: Podmetadata: name: nginx-users-disallowed labels: app: nginx-usersspec: securityContext: supplementalGroups: - 250 fsGroup: 250 containers: - name: nginx image: nginx securityContext: runAsUser: 250 runAsGroup: 250
  • 符合策略实例的资源定义 示例中runAsUser等参数均在范围内,符合策略实例。 apiVersion: v1kind: Podmetadata: name: nginx-users-allowed labels: app: nginx-usersspec: securityContext: supplementalGroups: - 199 fsGroup: 199 containers: - name: nginx image: nginx securityContext: runAsUser: 199 runAsGroup: 199
  • 通过控制台配置调度策略 登录UCS控制台,进入集群联邦页面。 在创建工作负载时,在“高级配置”中找到“调度策略”。 表1 节点亲和性设置 参数名 参数描述 必须满足 即硬约束,设置必须要满足的条件,对应于requiredDuringSchedulingIgnoredDuringExecution,多条规则间是一种“或”的关系,即只需要满足一条规则即会进行调度。 尽量满足 即软约束,设置尽量满足的条件,对应于preferredDuringSchedulingIgnoredDuringExecution,无论是满足其中一条或者是都不满足都会进行调度。 在“节点亲和性”、“工作负载亲和性”、“工作负载反亲和性”下单击添加调度策略。 表2 调度策略设置 参数名 参数描述 标签名 对应节点的标签,可以使用默认的标签也可以用户自定义标签。 操作符 可以设置六种匹配关系(In, NotIn, Exists, DoesNotExist. Gt, and Lt)。 In:是否在标签值的列表中 NotIn:是否不在标签值的列表中 Exists:某个标签存在 DoesNotExist:某个标签不存在 Gt:标签的值大于某个值(字符串比较) Lt:标签的值小于某个值(字符串比较) 标签值 请填写标签值。 命名空间 仅支持在工作负载亲和/工作负载反亲和调度策略中使用。 指定调度策略生效的命名空间。 拓扑域 仅支持在工作负载亲和/工作负载反亲和调度策略中使用。 先圈定拓扑域(topologyKey)指定的范围,然后再选择策略定义的内容。 权重 仅支持在“尽量满足”策略中添加。
  • 通过Kubectl命令创建MCS对象 使用kubectl连接集群联邦,详细操作请参见使用kubectl连接集群联邦。 创建并编辑 mcs.yaml 文件,文件内容定义如下所示,参数定义请参见表1。 vi mcs.yaml 示例YAML定义的MCS对象关联了名为foo的Service,支持在cluster A中访问到部署在cluster B中的该Service。 apiVersion: networking.karmada.io/v1alpha1 kind: MultiClusterService metadata: name: foo # MCS对象名称 namespace: default # MCS对象所在命名空间名称spec: types: - CrossCluster # 类型为集群间服务发现 providerClusters: # Service的下发集群 - name: clusterB consumerClusters: # Service的访问集群 - name: clusterA 表1 关键参数说明 参数 是否必填 参数类型 描述 metadata.name 是 String MCS对象的名称,应与关联Service保持一致。 metadata.namespace 否 String MCS对象所在命名空间名称,应与关联Service所在命名空间名称保持一致。不填则默认为default。 spec.types 是 String 流量方向,实现集群间服务发现能力应配置为CrossCluster。 spec.providerClusters.name 否 String Service的下发集群名称,应配置为Service的部署集群。不填则默认将Service下发至集群联邦内所有集群。 注意: 若Service部署在cluster B,但在下发集群中配置了cluster A与cluster B,则该Service会同时下发至cluster A与cluster B,覆盖A中的原同名Service。 spec.consumerClusters.name 否 String Service的访问集群名称,应配置为期望通过MCS实现跨集群访问Service的集群名称。不填则默认设置为所有集群联邦内集群可访问该Service。 执行如下命令创建MCS对象。 kubectl apply -f mcs.yaml 执行如下命令查看MCS对象的状态。其中foo为MCS对象的名称。 kubectl describe mcs foo YAML文件中的status字段记录了MCS的状态,当status字段中出现如下内容时,表明Endpoint Slices下发并同步成功,集群间服务发现能力可用。 status: conditions: - lastTransitionTime: "2023-11-20T02:30:49Z" message: EndpointSlices are propagated to target clusters. reason: EndpointSliceAppliedSuccess status: "True" type: EndpointSliceApplied 创建完成后,可以执行如下命令操作MCS对象。其中foo为MCS对象的名称。 获取MCS对象:kubectl get mcs foo 更新MCS对象:kubectl edit mcs foo 删除MCS对象:kubectl delete mcs foo 若MCS实例删除状态异常,一直显示“删除中”,则异常实例需要强制删除并清理资源。具体操作请参见MCS/MCI实例删除异常如何排查?
共100000条
提示

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