【问题标题】:Service host/port undefined, Kubernetes/Google Container Engine服务主机/端口未定义,Kubernetes/Google Container Engine
【发布时间】:2015-02-03 02:58:31
【问题描述】:

我有一个名为 mongodb 的服务。根据文档,服务主机和端口应该通过 $MONGODB_SERVICE_HOST 和 $MONGODB_SERVICE_PORT 对同一集群中的其他 pod 可用。

但是,这些都没有在我的前端 pod 中设置。这需要什么条件才能运行?

前端控制器.json

{
  "id": "frontend",
  "kind": "ReplicationController",
  "apiVersion": "v1beta1",
  "desiredState": {
    "replicas": 1,
    "replicaSelector": {"name": "spatula", "role": "frontend"},
    "podTemplate": {
      "desiredState": {
        "manifest": {
          "version": "v1beta1",
          "id": "frontend",
          "containers": [{
            "name": "frontend",
            "image": "gcr.io/crafty_apex_841/spatula_frontend",
            "cpu": 100,
            "ports": [{"name": "spatula-server", "containerPort": 80}]
          }]
        }
      },
      "labels": { "name": "spatula", "role": "frontend" }
    }
  },
  "labels": { "name": "spatula", "role": "frontend" }
}

前端服务.json

{
  "apiVersion": "v1beta1",
  "kind": "Service",
  "id": "frontend",
  "port": 80,
  "containerPort": "spatula-server",
  "labels": { "name": "spatula", "role": "frontend" },
  "selector": { "name": "spatula", "role": "frontend" },
  "createExternalLoadBalancer": true
}

mongodb-service.json

{
  "apiVersion": "v1beta1",
  "kind": "Service",
  "id": "mongodb",
  "port": 27017,
  "containerPort": "mongodb-server",
  "labels": { "name": "spatula", "role": "mongodb" },
  "selector": { "name": "spatula", "role": "mongodb" }
}

mongodb-controller.json

{
  "id": "mongodb",
  "kind": "ReplicationController",
  "apiVersion": "v1beta1",
  "desiredState": {
    "replicas": 1,
    "replicaSelector": {"name": "spatula", "role": "mongodb"},
    "podTemplate": {
      "desiredState": {
        "manifest": {
          "version": "v1beta1",
          "id": "mongodb",
          "containers": [{
            "name": "mongodb",
            "image": "dockerfile/mongodb",
            "cpu": 100,
            "ports": [{"name": "mongodb-server", "containerPort": 27017}]
          }]
        }
      },
      "labels": { "name": "spatula", "role": "mongodb" }
    }
  },
  "labels": { "name": "spatula", "role": "mongodb" }
}

服务:

$ gcloud preview container services list

NAME                LABELS                                    SELECTOR                    IP                  PORT
mongodb             name=spatula,role=mongodb                 name=spatula,role=mongodb   10.111.240.154      27017

吊舱:

$ gcloud preview container pods list

POD                                    IP                  CONTAINER(S)        IMAGE(S)                           HOST                                                           LABELS                      STATUS
9ffd980f-ab56-11e4-ad76-42010af069b6   10.108.0.11         mongodb             dockerfile/mongodb                 k8s-spatula-node-1.c.crafty-apex-841.internal/104.154.44.77    name=spatula,role=mongodb   Running

【问题讨论】:

  • 添加了控制器和服务配置。

标签: docker kubernetes google-kubernetes-engine


【解决方案1】:

因为 pod 的环境变量仅在 pod 启动时创建,所以服务必须在给定 pod 之前存在,以便该 pod 看到服务的环境变量。您应该能够从您创建的所有新 pod 中看到它们。

如果您想了解更多信息,可以在the documentation 中找到有关服务工作原理的更多说明。

另外,Container Engine(版本 0.9.2 及更高版本)中所有新创建的集群都在集群中运行a SkyDNS service,您可以使用它从 pod 访问服务,即使是那些没有环境变量的。

【讨论】:

  • 我已删除所有 pod 并重新创建,但仍未设置 ENV 变量。我将在问题中添加更多细节。您还有其他想法吗?
  • 如果您还没有,您可以尝试附加到容器并手动检查机器上的变量吗?我尝试使用您的确切 mongodb 控制器和服务配置重新创建您的情况,并且确实在我创建的新 pod 中看到了变量。附加: 1. SSH 到前端 pod 所在的节点(由 get pods 调用返回)。 2. 使用“sudo docker ps”获取正在运行的容器ID。 3. 使用“docker exec -it bash”附加到容器。 4. 在 shell 中,运行“printenv”。
猜你喜欢
  • 1970-01-01
  • 2017-04-07
  • 1970-01-01
  • 1970-01-01
  • 2015-02-02
  • 2017-03-26
  • 2016-06-01
  • 2019-02-18
  • 1970-01-01
相关资源
最近更新 更多