2015-02-03 7 views
0

У меня есть сервис с именем mongodb. Согласно документации, хост и порт службы должны быть доступны другим модулям в одном кластере через $ MONGODB_SERVICE_HOST и $ MONGODB_SERVICE_PORT.Service host/port undefined, Kubernetes/Google Container Engine

Однако ни один из них не установлен в моих интерфейсных контейнерах. Каковы требования для этого?

фронтенд-controller.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" } 
} 

фронтенд-service.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 
+0

Добавлен контроллер и сервисные конфигурации. – mz3

ответ

1

Поскольку переменные среды для стручков создаются только при запуске стручок, служба должна существовать до определенного стручка для того, чтобы pod, чтобы увидеть переменные среды службы. Вы должны быть в состоянии видеть их из всех созданных вами новых контейнеров.

Если вы хотите узнать больше, дополнительное объяснение того, как работают службы, можно найти в the documentation.

В качестве альтернативы все вновь созданные кластеры в контейнере Engine (версия 0.9.2 и выше) имеют a SkyDNS service, работающие в кластере, которые можно использовать для доступа к службам из контейнеров, даже без переменных окружения.

+0

Я удаляю все контейнеры и повторно созданный, но переменные ENV все еще не установлены. Я добавлю еще несколько деталей к вопросу. У тебя есть другие идеи? – mz3

+1

Если вы еще этого не сделали, можете ли вы попробовать подключиться к контейнеру и вручную проверить, какие переменные находятся на машине? Я попытался воссоздать вашу ситуацию, используя ваш точный контроллер mongodb и конфигурацию сервисов, и я вижу переменные в новых строках, которые я создаю. Чтобы прикрепить: 1. SSH к узлу, на котором включен интерфейс frontend (который был возвращен вызовом get pods). 2. Используйте «sudo docker ps», чтобы получить идентификатор работающего контейнера. 3. Прикрепите к контейнеру с помощью «docker exec -it bash». 4. Из оболочки запустите «printenv». –

 Смежные вопросы

  • Нет связанных вопросов^_^