【问题标题】:Linking containers based on pod names in kubernetes在 kubernetes 中根据 pod 名称链接容器
【发布时间】:2020-05-15 20:11:45
【问题描述】:

我尝试让不同的 pod 运行自己的容器,我尝试遵循链接两个 docker 容器的相同说明:

docker run -d -e POSTGRES_USER=name -e POSTGRES_PASSWORD=pass -e POSTGRES_DB=postgres --name db postgres:10

另一个容器:

docker run -p port:port --name image-name --link db:db -t image

和 Kubernetes 部署:

数据库

apiVersion: apps/v1
kind: Deployment
metadata:
  name: db
  labels:
    app: db
spec:
  replicas: 1
  selector:
    matchLabels:
      app: db
  template:
    metadata:
      labels:
        app: db
    spec:
      containers:
        - name: db
          image: postgres
          ports:
          - containerPort: 5432
          env:
          - name: "POSTGRES_DB"
            value: "postgres"
          - name: "POSTGRES_USERNAME"
            value: "name"
          - name: "POSTGRES_PASSWORD"
            value: "pass"

应用程序

apiVersion: apps/v1
kind: Deployment
metadata:
  name: APP
  labels:
    app: APP
spec:
  replicas: 1
  selector:
    matchLabels:
      app: APP
  template:
    metadata:
      labels:
        app: APP
    spec:
      containers:
        - name: APP
          image: image
          ports:
          - containerPort: port

现在的问题是,我是否需要在同一个 pod 中创建容器并将其命名为与 docker 命令(db=db)相似的名称? 还是我需要正确配置网络以便容器可以找到主机名?

【问题讨论】:

    标签: docker kubernetes


    【解决方案1】:

    您必须创建一个指向您的 pod(部署)的服务。通过服务,您可以管理跨部署的流量。

    有关更多信息,您可以查看此文档:https://kubernetes.io/docs/concepts/services-networking/service/

    如果您正在寻找内部 dns 通信

    请查看:https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/

    【讨论】:

      【解决方案2】:

      您需要在数据库上创建服务。 kubernetes 文档解释了执行此操作的各种选项。一旦你有了一个服务,你的 pod 将能够使用 kubernetes 提供给 pod 的 DNS 按名称查找该服务。该服务充当(在本例中为数据库)pod 的代理。

      【讨论】:

        【解决方案3】:

        在 Kubernetes 中,pod 被视为最小的单元,因此将它们放在单独的 pod 中更有意义,这样它们就有自己的生命周期。你的做法绝对是正确的;为了使它们工作,您需要公开数据库,以便您的应用程序可以连接到它,即将数据库公开为 ClusterIP 类型的服务,然后您可以通过集群内的服务名称访问它。

        一个简单的例子-

        apiVersion: v1
        kind: Service
        metadata:
          name: "postgres"
          labels:
            app.kubernetes.io/name: postgres
        spec:
          type: ClusterIP
          ports:
            - port: 5432
              targetPort: 5432
              protocol: TCP
              name: dbport
          selector:
            app.kubernetes.io/name: postgres
        

        【讨论】:

        • 我会说 pod 不是最小的单元,因为 pod 可能由 >1 个容器组成。抱歉,如果这是迂腐的,但可能存在在同一个 pod 但单独的容器中运行 db 和 app 的论点(这将违背普遍接受的建议,但有可能),在这种情况下根本不需要链接。
        猜你喜欢
        • 2017-07-05
        • 2019-02-12
        • 1970-01-01
        • 2018-08-09
        • 2019-02-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-17
        相关资源
        最近更新 更多