7.8 KiB
title | content_template |
---|---|
在联邦中设置放置策略 | templates/task |
{{% capture overview %}}
{{< deprecationfilewarning >}} {{< include "federation-deprecation-warning-note.md" >}} {{< /deprecationfilewarning >}}
此页面显示如何使用外部策略引擎对联邦资源强制执行基于策略的放置决策。
{{% /capture %}}
{{% capture prerequisites %}}
您需要一个正在运行的 Kubernetes 集群(它被引用为主机集群)。有关您的平台的安装说明,请参阅入门指南。
{{% /capture %}}
{{% capture steps %}}
Deploying 联邦并配置外部策略引擎
可以使用 kubefed init
部署联邦控制平面。
Deploying 联邦控制平面之后,必须在联邦 API 服务器中配置一个准入控制器,该控制器强制执行从外部策略引擎接收到的放置决策。
kubectl create -f scheduling-policy-admission.yaml
下图是准入控制器的 ConfigMap 示例:
{{< codenew file="federation/scheduling-policy-admission.yaml" >}}
ConfigMap 包含三个文件:
config.yml
指定调度策略
准入控制器配置文件的位置。scheduling-policy-config.yml
指定与外部策略引擎联系所需的 kubeconfig 文件的位置。 该文件还可以包含一个retryBackoff
值,该值以毫秒为单位控制初始重试 backoff 延迟。opa-kubeconfig
是一个标准的 kubeconfig,包含联系外部策略引擎所需的 URL 和凭证。
编辑联邦 API 服务器部署以启用 SchedulingPolicy
准入控制器。
kubectl -n federation-system edit deployment federation-apiserver
更新 Federation API 服务器命令行参数以启用准入控制器,
并将 ConfigMap 挂载到容器中。如果存在现有的 -enable-admissionplugins
参数,则追加 SchedulingPolicy
而不是添加另一行。
--enable-admission-plugins=SchedulingPolicy
--admission-control-config-file=/etc/kubernetes/admission/config.yml
将以下卷添加到联邦 API 服务器 pod:
- name: admission-config
configMap:
name: admission
添加以下卷挂载联邦 API 服务器的 apiserver
容器:
volumeMounts:
- name: admission-config
mountPath: /etc/kubernetes/admission
Deploying 外部策略引擎
Open Policy Agent (OPA) 是一个开源的通用策略引擎, 您可以使用它在联邦控制平面中执行基于策略的放置决策。
在主机群集中创建服务以联系外部策略引擎:
kubectl create -f policy-engine-service.yaml
下面显示的是 OPA 的示例服务。
{{< codenew file="federation/policy-engine-service.yaml" >}}
使用联邦控制平面在主机群集中创建部署:
kubectl create -f policy-engine-deployment.yaml
下面显示的是 OPA 的部署示例。
{{< codenew file="federation/policy-engine-deployment.yaml" >}}
通过 ConfigMaps 配置放置策略
外部策略引擎将发现在 Federation API 服务器的 kube-federation-scheduling-policy
命名空间中创建的放置策略。
如果命名空间尚不存在,请创建它:
kubectl --context=federation create namespace kube-federation-scheduling-policy
配置一个示例策略来测试外部策略引擎:
{{< code file="policy.rego" >}}
下面显示的是创建示例策略的命令:
kubectl --context=federation -n kube-federation-scheduling-policy create configmap scheduling-policy --from-file=policy.rego
这个示例策略说明了一些关键思想:
- 位置策略可以引用联邦资源中的任何字段。
- 放置策略可以利用外部上下文(例如,集群元数据)来做出决策。
- 管理策略可以集中管理。
- 策略可以定义简单的接口(例如
requirements -pci
注解),以避免在清单中重复逻辑。
测试放置政策
注释其中一个集群以表明它是经过 PCI 认证的。
kubectl --context=federation annotate clusters cluster-name-1 pci-certified=true
部署联邦副本来测试放置策略。
{{< codenew file="federation/replicaset-example-policy.yaml" >}}
下面显示的命令用于部署与策略匹配的副本集。
kubectl --context=federation create -f replicaset-example-policy.yaml
检查副本集以确认已应用适当的注解:
kubectl --context=federation get rs nginx-pci -o jsonpath='{.metadata.annotations}'
{{% /capture %}}