【发布时间】:2021-04-22 19:14:50
【问题描述】:
我一直在搜索网络以使用我的 java 应用程序在 Kubernetes pod 中执行命令。 结果很模糊,因此我想知道是否有办法让在一个 pod 中运行的 java 应用程序在另一个 pod 上执行命令?
【问题讨论】:
标签: java kubernetes
我一直在搜索网络以使用我的 java 应用程序在 Kubernetes pod 中执行命令。 结果很模糊,因此我想知道是否有办法让在一个 pod 中运行的 java 应用程序在另一个 pod 上执行命令?
【问题讨论】:
标签: java kubernetes
[是否]有一种方法可以让在一个 pod 中运行的 java 应用程序在另一个 pod 上执行命令?
没有。您需要为第二个应用程序创建一个网络接口并对它进行 gRPC 或 HTTP 调用,或者将两个程序构建到同一个映像中,以便您可以将第二个程序作为普通子进程启动。
一般来说,容器都是如此。尝试在非 Kubernetes Docker 容器中运行这两个部分(推荐用于实验和开发)或在同一个 Kubernetes pod 中运行两个容器(不推荐)时,您会遇到同样的问题。
(有一个“但是”涉及使用 Kubernetes API,但这是一个相当复杂的设置,它涉及应用程序中特定于 Kubernetes 的代码,并且需要在 Kubernetes 部署中设置服务帐户和权限。我会避免这种情况,尤其是对于您的应用程序的核心数据流。)
【讨论】:
我想您可以使用将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 A 上的端口 X 侦听,从 kubernetes 创建一个服务以使用端口 X 创建对 pod 的轻松访问。从您的发送者 java 通过连接到 pod B 将信息发送到 pod A您创建的podAservice。为您添加了两个服务文件示例。希望对您有所帮助。