kubectl apply -f< spec.yaml>与fabric8 java api中的等效项 [英] kubectl apply -f <spec.yaml> equivalent in fabric8 java api

查看:719
本文介绍了kubectl apply -f< spec.yaml>与fabric8 java api中的等效项的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图使用io.fabric8 api通过pod-spec.yaml在kubernetes中创建一些资源.

I was trying to use io.fabric8 api to create a few resources in kubernetes using a pod-spec.yaml.

Config config = new ConfigBuilder()
                  .withNamespace("ag")
                  .withMasterUrl(K8_URL)
                  .build();
try (final KubernetesClient client = new DefaultKubernetesClient(config)) {

            LOGGER.info("Master: " + client.getMasterUrl());

            LOGGER.info("Loading File : " + args[0]);
            Pod pod = client.pods().load(new FileInputStream(args[0])).get();
            LOGGER.info("Pod created with name : " + pod.toString());

} catch (Exception e) {

            LOGGER.error(e.getMessage(), e);

}

如果资源类型为POD,则上面的代码有效.同样,对于其他资源类型,它也可以正常工作. 但是,如果yaml在同一文件中具有POD和服务等多种资源类型,那么如何使用fabric8 Api?

The above code works if the resource type is of POD. Similarly for other resource type it is working fine. But if the yaml has multiple resource type like POD and service in the same file, how to use fabric8 Api ?

我尝试使用client.load(new FileInputStream(args[0])).createOrReplace();,但是由于以下异常而崩溃:

I was trying to use client.load(new FileInputStream(args[0])).createOrReplace(); but it is crashing with the below exception:

java.lang.NullPointerException
    at java.net.URI$Parser.parse(URI.java:3042)
    at java.net.URI.<init>(URI.java:588)
    at io.fabric8.kubernetes.client.utils.URLUtils.join(URLUtils.java:48)
    at io.fabric8.kubernetes.client.dsl.base.BaseOperation.getMandatory(BaseOperation.java:208)
    at io.fabric8.kubernetes.client.dsl.base.BaseOperation.get(BaseOperation.java:177)
    at io.fabric8.kubernetes.client.handlers.PodHandler.reload(PodHandler.java:53)
    at io.fabric8.kubernetes.client.handlers.PodHandler.reload(PodHandler.java:32)
    at io.fabric8.kubernetes.client.dsl.internal.NamespaceVisitFromServerGetWatchDeleteRecreateWaitApplicableListImpl.createOrReplace(NamespaceVisitFromServerGetWatchDeleteRecreateWaitApplicableListImpl.java:202)
    at io.fabric8.kubernetes.client.dsl.internal.NamespaceVisitFromServerGetWatchDeleteRecreateWaitApplicableListImpl.createOrReplace(NamespaceVisitFromServerGetWatchDeleteRecreateWaitApplicableListImpl.java:62)
    at com.nokia.k8s.InterpreterLanuch.main(InterpreterLanuch.java:66)

使用了Yaml文件

apiVersion: v1
kind: Pod
metadata:
  generateName: zep-ag-pod
  annotations:
    kubernetes.io/psp: restricted
    spark-app-name: Zeppelin-spark-shared-process
  namespace: ag
  labels:
    app: zeppelin
    int-app-selector: shell-123

spec:
  containers:
    - name: ag-csf-zep
      image: bcmt-registry:5000/zep-spark2.2:9
      imagePullPolicy: IfNotPresent
      command: ["/bin/bash"]
      args: ["-c","echo Hi && sleep 60 && echo Done"]
      securityContext:
        allowPrivilegeEscalation: false
        capabilities:
          drop:
          - ALL
        runAsNonRoot: true
  securityContext:
    fsGroup: 2000
    runAsUser: 1510
  serviceAccount: csfzeppelin
  serviceAccountName: csfzeppelin
---
apiVersion: v1
kind: Service
metadata:
  name: zeppelin-service
  namespace: ag
  labels:
    app: zeppelin
spec:
  type: NodePort
  ports:
  - name: zeppelin-service
    port: 30099
    protocol: TCP
    targetPort: 8080
  selector:
    app: zeppelin

推荐答案

加载带有多个文档的文件时,无需指定资源类型.您只需要这样做:

You don't need to specify resource type whenever loading a file with multiple documents. You simply need to do:

  // Load Yaml into Kubernetes resources
  List<HasMetadata> result = client.load(new FileInputStream(args[0])).get();
  // Apply Kubernetes Resources
  client.resourceList(result).inNamespace(namespace).createOrReplace() 

这篇关于kubectl apply -f&lt; spec.yaml&gt;与fabric8 java api中的等效项的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆