gpt4 book ai didi

docker - pod 无法互相交流

转载 作者:行者123 更新时间:2023-12-02 11:56:42 27 4
gpt4 key购买 nike

我有两个作业只能运行一次。一种称为Master,另一种称为Slave。顾名思义,主控Pod需要从属服务器提供一些信息,然后在线查询一些API。
关于如何进行通信的简单方案如下:

Slave --- port 6666 ---> Master ---- port 8888 ---> internet:www.example.com

为此,我创建了5个Yaml文件:
  • 用于创建主容器的job-master.yaml:
  • apiVersion: batch/v1
    kind: Job
    metadata:
    name: master-job
    labels:
    app: master-job
    role: master-job
    spec:
    template:
    metadata:
    name: master
    spec:
    containers:
    - name: master
    image: registry.gitlab.com/example
    command: ["python", "run.py", "-wait"]
    ports:
    - containerPort: 6666

    imagePullSecrets:
    - name: regcred
    restartPolicy: Never

  • 一种服务(ClusterIP),允许从属服务器将信息发送到端口6666上的主节点:
  • apiVersion: v1
    kind: Service
    metadata:
    name: master-service
    labels:
    app: master-job
    role: master-job
    spec:
    selector:
    app: master-job
    role: master-job
    ports:
    - protocol: TCP
    port: 6666
    targetPort: 6666
  • 一种服务(NodePort),允许主服务器在线获取信息:
  • apiVersion: v1
    kind: Service
    metadata:
    name: master-np-service
    spec:
    type: NodePort
    selector:
    app: master-job
    ports:
    - protocol: TCP
    port: 8888
    targetPort: 8888
    nodePort: 31000
  • 从属 Pane 的作业:
  • apiVersion: batch/v1
    kind: Job
    metadata:
    name: slave-job
    labels:
    app: slave-job
    spec:
    template:
    metadata:
    name: slave
    spec:
    containers:
    - name: slave
    image: registry.gitlab.com/example2
    ports:
    - containerPort: 6666
    #command: ["python", "run.py", "master-service.default.svc.cluster.local"]
    #command: ["python", "run.py", "10.106.146.155"]
    command: ["python", "run.py", "master-service"]
    imagePullSecrets:
    - name: regcred
    restartPolicy: Never
  • 和一个服务(ClusterIP),该服务允许从属容器将信息发送到主容器:
  • apiVersion: v1
    kind: Service
    metadata:
    name: slave-service
    spec:
    selector:
    app: slave-job
    ports:
    - protocol: TCP
    port: 6666
    targetPort: 6666

    但是无论我做什么(在注释行的job_slave.yaml文件中都可以看到),除非我将Master节点的IP放在Slave的命令部分中,否则它们无法相互通信。而且,主节点也无法与外界通信(即使我使用 configMap创建了 upstreamNameservers: | ["8.8.8.8"]一切都在minikube环境中运行。
    但是我无法确定我的问题是什么。任何帮助表示赞赏。

    最佳答案

    您的Job规范包括两部分:对Job本身的描述,以及对它创建的Pod的描述。 (在这里使用Job有点奇怪,我可能会选择Deployment,但在这里也适用。)Service对象的selector:与Pod的labels:相匹配。

    在YAML文件中,您显示作业具有正确的标签,但生成的Pod没有。您需要将标签(可能重复)添加到Pod规格部分:

    apiVersion: batch/v1
    kind: Job
    metadata:
    name: master-job
    labels: {...}
    spec:
    template:
    metadata:
    # name: will get ignored here
    labels:
    app: master-job
    role: master-job

    您应该能够使用 kubectl describe service master-service进行验证。在其输出的末尾将显示一行 Endpoints:。如果Service选择器和Pod标签不匹配,则会显示 <none>;如果它们确实匹配,您将看到Pod IP地址。

    (除非需要接受集群外部的请求,否则不需要 NodePort服务;它可以与用来接受集群内部的请求的服务相同。您不需要在其对象中包括对象的类型名称。您所显示的内容与集群外的交流没有任何明显的关联。)

    关于docker - pod 无法互相交流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57867829/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com