Как настроить несколько сервисов / контейнеров в Kubernetes? - PullRequest
1 голос
/ 18 апреля 2019

Я новичок в Докере и Кубернетесе.Используемые технологии:

  • Dotnet Core 2.2
  • Asp.NET Core WebAPI 2.2
  • Докер для Windows (Edge) с включенной поддержкой Kubernetes
  • Код

У меня две службы, размещенные в двух док-контейнерах container1 и container2.

Ниже приведен мой deploy.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: webapi-dockerkube
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: webapi-dockerkube
    spec:
      containers:
      - name: webapi-dockerkube
        image: "webapidocker:latest"
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
        livenessProbe:
          httpGet:
            path: /api/values
            port: 80
        readinessProbe:
          httpGet:
            path: /api/values
            port: 80
      - name: webapi-dockerkube2
        image: "webapidocker2:latest"
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
        livenessProbe:
          httpGet:
            path: /api/other/values
            port: 80
        readinessProbe:
          httpGet:
            path: /api/other/values
            port: 80

Когда я запускаю команду:

kubectl create -f .\deploy.yaml

Я получаю статус CrashLoopBackOff.

Но то же самое работает нормально, когда у меня настроен только один контейнер.При проверке логов я получаю следующую ошибку: Error from server (BadRequest): a container name must be specified for pod webapi-dockerkube-8658586998-9f8mk, choose one of: [webapi-dockerkube webapi-dockerkube2]

Ответы [ 2 ]

4 голосов
/ 18 апреля 2019

Вы запускаете два контейнера в одном модуле, которые связывают оба порта 80. Это невозможно в одном модуле. Думайте о модуле как о «сервере», и у вас не может быть двух процессов, привязанных к одному и тому же порту.

Решение в вашей ситуации: используйте разные порты внутри модуля или используйте отдельные модули. Из вашего развертывания, похоже, нет общих ресурсов, таких как файловая система, поэтому было бы легко разделить контейнеры на отдельные модули.

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

0 голосов
/ 18 апреля 2019
apiVersion: v1
kind: Pod
metadata:
  name: two-containers
spec:

  restartPolicy: Never

  volumes:
  - name: shared-data
    emptyDir: {}

  containers:

  - name: nginx-container
    image: nginx
    volumeMounts:
    - name: shared-data
      mountPath: /usr/share/nginx/html

  - name: debian-container
    image: debian
    volumeMounts:
    - name: shared-data
      mountPath: /pod-data
    command: ["/bin/sh"]
    args: ["-c", "echo Hello from the debian container > /pod-data/index.html"] 

здесь пример совместного использования мультиконтейнера. Вы можете использовать этот шаблон

Также вы можете проверить журналы использования

Kubectl logs

Проверить причину аварийного возврата назад

...