命名空间的专用节点

伊萨克

在Kubernetes中,我们有多个环境,由不同的名称空间分隔。我想确保一组节点仅由特定的名称空间/环境使用。

  1. 特定标签的节点应拒绝所有不属于命名空间的Pod
  2. 来自特定名称空间的Pod应该始终选择配置了标签的节点。

实现它的方法是什么?听说过有关更改Webhook接纳控制器的知识,任何人都有一个示例,以了解其工作原理。

Arghya Sadhu

您可以使用mutation webhook来更改来自特定名称空间的传入pod请求,以在pod spec中添加节点相似性节点选择器

这里nodeSelector准入控制器示例有关如何使用它的完整指南

准备API服务器

假设您的集群已经使用kubeadm进行了部署,则kube-apiserver.yaml文件是Kubernetes API服务器的配置清单。它位于/ etc / kubernetes / manifests中。在--admission-control =标志中添加PodNodeSelector接纳控制器

然后将标签添加到节点

kubectl label node kubeprod01 env=production

然后在名称空间的注释中使用该标签。

apiVersion: v1
kind: Namespace
metadata:
  annotations:
    scheduler.alpha.kubernetes.io/node-selector: env=production

通过更改Webhook添加节点关联的示例。

func mutatePods(ar v1beta1.AdmissionReview, o *options) *v1beta1.AdmissionResponse {
    var reviewResponse = &v1beta1.AdmissionResponse{
        Allowed: true,
    }

    podResource := metav1.GroupVersionResource{Group: "", Version: "v1", Resource: "pods"}
    if ar.Request.Resource != podResource {
        glog.Errorf("expect resource to be %s", podResource)
        return nil
    }

    raw := ar.Request.Object.Raw
    pod := v1.Pod{}
    // glog.V(2).Infof("Object: %v", string(raw))
    if err := json.Unmarshal(raw, &pod); err != nil {
        glog.Error(err)
        return nil
    }

    addPodAffinityPatch := fmt.Sprintf(`[
         {"op":"add","path":"/spec/affinity","value":{"nodeAffinity":{"preferredDuringSchedulingIgnoredDuringExecution":[{"preference":{"matchExpressions":[{"key":"%s","operator":"NotIn","values":["%s"]}]},"weight":1}]}}}
    ]`, o.PodAffinityKey, o.PodAffinityValue)

    glog.V(2).Infof("patching pod")
    reviewResponse.Patch = []byte(addPodAffinityPatch)
    pt := v1beta1.PatchTypeJSONPatch
    reviewResponse.PatchType = &pt

    return reviewResponse
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

C ++中的命名空间专用成员

解析XML命名空间节点

将节点与命名空间匹配

XML命名空间,无法选择节点

如何命名专用于仅包含仅包含静态字段的类的命名空间?

从 XSL 中的命名空间节点获取子节点

XML中命名空间根节点的意义是什么?在哪里定义这样的命名空间?

使用命名空间创建SimpleXMLElement节点并防止命名空间重复

从使用命名空间的 XML 中选择节点/值

SoapFault的子节点中的xmlns =“”(空)命名空间

DOMDocument,使用多个关联的命名空间创建新元素节点

SQL Server XML query() - 缺少父节点或命名空间

如何在节点soap中添加“命名空间”以请求

如何从具有命名空间的XML中获取节点

NET更改XML根节点(名称+命名空间)的最佳方法

使用特定命名空间前缀的所有节点的 XPath 查询

使用VBA在存在命名空间时获取XML节点值

使用 groovy 脚本复制 xml 命名空间节点

如何获取具有命名空间的子节点值?

使用 xpath 访问具有命名空间的子节点

Hazelcast专用节点

命名空间与命名约定

命名(或引用)专用模板参数

专用Elasticsearch提取(协调)节点

当 xml 具有指向根节点的命名空间时,XElement 和 XName 崩溃

如何在SQL Server中使用命名空间获取XML节点值?

的Java XML节点变压器到字符串中删除命名空间

将命名空间从 java 传递到 xslt 并使用 java 中的参数作为 xslt 中的节点

在C#中使用命名空间在xml文档中查找特定节点