【问题标题】:Execute command from java application to kubernetes pod从 java 应用程序执行命令到 kubernetes pod
【发布时间】:2021-04-22 19:14:50
【问题描述】:

我一直在搜索网络以使用我的 java 应用程序在 Kubernetes pod 中执行命令。 结果很模糊,因此我想知道是否有办法让在一个 pod 中运行的 java 应用程序在另一个 pod 上执行命令?

【问题讨论】:

    标签: java kubernetes


    【解决方案1】:

    [是否]有一种方法可以让在一个 pod 中运行的 java 应用程序在另一个 pod 上执行命令?

    没有。您需要为第二个应用程序创建一个网络接口并对它进行 gRPC 或 HTTP 调用,或者将两个程序构建到同一个映像中,以便您可以将第二个程序作为普通子进程启动。

    一般来说,容器都是如此。尝试在非 Kubernetes Docker 容器中运行这两个部分(推荐用于实验和开发)或在同一个 Kubernetes pod 中运行两个容器(不推荐)时,您会遇到同样的问题。

    (有一个“但是”涉及使用 Kubernetes API,但这是一个相当复杂的设置,它涉及应用程序中特定于 Kubernetes 的代码,并且需要在 Kubernetes 部署中设置服务帐户和权限。我会避免这种情况,尤其是对于您的应用程序的核心数据流。)

    【讨论】:

      【解决方案2】:

      我想您可以使用将svcName.service.ns.cluster.local 解析为 ClusterIP 的服务或 kube-dns 与 pod 通信,并使用另一个 websocket 到该 pod 以侦听您的命令等。

      无法帮助您了解 Java 套接字或详细的代码结构,但我很确定这会有所帮助。

      Edit1:服务 yaml 文件的示例。

      对于podA的服务:

      apiVersion: v1
      kind: Service
      metadata:
        name: svc-nodeport-httpd
      spec:
        type: NodePort
        ports:
        - port: 3050
          targetPort: 80
          nodePort: 31000
        selector:
          app: apache_webserver
      

      创建一个 pod-port 到 node-port 的连接或

      集群IP。这是推荐的!

      apiVersion: v1
      kind: Service
      metadata:
        name: "myapp-service"
        namespace: "namespace"
      spec:
        ports:
        - name: appPort
          port: 8065
          protocol: TCP
          targetPort: http
        selector:
          app: "myapp"
        type: ClusterIP
      

      创建可用于内部流量的服务。

      【讨论】:

      • 会不会像......创建一个服务,该服务将在我想要执行命令的 pod 中包含命令列表并从我的应用程序运行的 pod 调用服务?
      • 我的意思是用于 pod 通信的 kubernetes-services。从 java 创建一个套接字以从 pod A 上的端口 X 侦听,从 kubernetes 创建一个服务以使用端口 X 创建对 pod 的轻松访问。从您的发送者 java 通过连接到 pod B 将信息发送到 pod A您创建的podAservice。为您添加了两个服务文件示例。希望对您有所帮助。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-26
      • 1970-01-01
      相关资源
      最近更新 更多