繁体   English   中英

使用Java Kubernetes客户端API部署Pod并为其分配节点

[英]Deploy a Pod and assign it a node using Java Kubernetes Client API

我正在使用kubeadm创建一个kubernetes集群。 如何在特定节点上部署Pod。 在用于将Pod部署到简单minikube集群中的代码下面。 谢谢

        ApiClient client = Config.defaultClient();
        Configuration.setDefaultApiClient(client);

        CoreV1Api api = new CoreV1Api();
        V1ObjectMeta meta = new V1ObjectMeta();

        meta.name("ms2-pod");
        Map<String, String> labels = new HashMap<>();
        labels.put("app", "ms2-pod");
        meta.labels(labels);
        V1ContainerPort port = new V1ContainerPort();
        port.containerPort(9090);
        V1Container container = new V1Container();
        container.name("ms2-container");
        container.image("ms2");
        container.imagePullPolicy("IfNotPresent");
        container.ports(Arrays.asList(port));

        V1PodSpec spec = new V1PodSpec();
        spec.containers(Arrays.asList(container));
        V1Pod podBody = new V1Pod();
        podBody.apiVersion("v1");
        podBody.kind("Pod");
        podBody.metadata(meta);
        podBody.spec(spec);

        V1Pod pod = api.createNamespacedPod("default", podBody, null, null, null);

我们如何使用Java中的K8S Client Api充分利用kubeadm集群内部的kubectl功能?

您可以根据要执行的操作使用节点选择器或节点相似性或反相似性

  • Node Name ,这是将Pod调度到特定节点的最简单方法,由于其局限性,不建议使用它。
  • 节点选择器将允许您使用标签选择器选择具有特定标签的节点
  • 节点相似性的工作原理几乎与节点选择器相同,但是可以指定是否需要或首选选择器中定义的规则。 即使不满足约束,也可以在其他任何节点中调度Pod。

下面是一个使用节点选择器的示例(假设您向节点添加了值为“ nodeLabelValue”的标签“ nodeLabelKey”):

    ApiClient client = Config.defaultClient();
    Configuration.setDefaultApiClient(client);

    CoreV1Api api = new CoreV1Api();
    V1ObjectMeta meta = new V1ObjectMeta();

    meta.name("ms2-pod");
    Map<String, String> labels = new HashMap<>();
    labels.put("app", "ms2-pod");
    meta.labels(labels);
    V1ContainerPort port = new V1ContainerPort();
    port.containerPort(9090);
    V1Container container = new V1Container();
    container.name("ms2-container");
    container.image("ms2");
    container.imagePullPolicy("IfNotPresent");
    container.ports(Arrays.asList(port));

    V1PodSpec spec = new V1PodSpec();
    spec.containers(Arrays.asList(container));
    V1Pod podBody = new V1Pod();
    podBody.apiVersion("v1");
    podBody.kind("Pod");
    podBody.metadata(meta);
    podBody.spec(spec);

    Map<String, String> nodeSelectorMap = new HashMap<>();
    nodeSelectorMap.put("nodeLabelKey", "nodeLabelValue");
    spec.nodeSelector(nodeSelectorMap);

    V1Pod pod = api.createNamespacedPod("default", podBody, null, null, null);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM