#kubernetes
Вопрос:
Я пытаюсь создать несколько контейнеров в одном модуле. Я столкнулся со следующей проблемой:
Файл YAML:
apiVersion: v1
kind: Pod
metadata:
name: multi-containers
spec:
restartPolicy: Never
volumes:
- name: multi-data
emptyDir: {}
containers:
- name: nginx-multicontainerone
image: nginx
volumeMounts:
- name: multi-data
mountPath: /one
- name: nginx-multicontainertwo
image: nginx
volumeMounts:
- name: multi-data
mountPath: /two
- name: debian-container
image: debian
volumeMounts:
- name: multi-data
mountPath: /pod-data
command: ["/bin/sh"]
args: ["-c", "echo Hello from the debian container > /pod-data/index.html"]
Ниже приведен вывод команды описать:
Kubectl описывает мультиконтейнеры pod
Name: multi-containers
Namespace: default
Priority: 0
Node: docker-desktop/192.168.65.4
Start Time: Mon, 01 Nov 2021 20:07:08 0530
Labels: <none>
Annotations: <none>
Status: Running
IP: 10.1.0.238
IPs:
IP: 10.1.0.238
Containers:
nginx-multicontainerone:
Container ID: docker://91561db271c29670880de55dda6a5f1724de42583d5712807f37dbc1597aa2ea
Image: nginx
Image ID: docker-pullable://nginx@sha256:644a70516a26004c97d0d85c7fe1d0c3a67ea8ab7ddf4aff193d9f301670cf36
Port: <none>
Host Port: <none>
State: Running
Started: Mon, 01 Nov 2021 20:07:28 0530
Ready: True
Restart Count: 0
Environment: <none>
Mounts:
/one from multi-data (rw)
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-n6hst (ro)
nginx-multicontainertwo:
Container ID: docker://049e08584f49e7970fac5b1fbb60dbf67c9928944123336c62ec423a7c656239
Image: nginx
Image ID: docker-pullable://nginx@sha256:644a70516a26004c97d0d85c7fe1d0c3a67ea8ab7ddf4aff193d9f301670cf36
Port: <none>
Host Port: <none>
State: Terminated
Reason: Error
Exit Code: 1
Started: Mon, 01 Nov 2021 20:07:32 0530
Finished: Mon, 01 Nov 2021 20:07:34 0530
Ready: False
Restart Count: 0
Environment: <none>
Mounts:
/two from multi-data (rw)
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-n6hst (ro)
debian-container:
Container ID: docker://8eb1b494e3da1672cef86bbe34af11f3e6f2e148ab56fbb969aca1f81205d5fa
Image: debian
Image ID: docker-pullable://debian@sha256:4d6ab716de467aad58e91b1b720f0badd7478847ec7a18f66027d0f8a329a43c
Port: <none>
Host Port: <none>
Command:
/bin/sh
Args:
-c
echo Hello from the debian container > /pod-data/index.html
State: Terminated
Reason: Completed
Exit Code: 0
Started: Mon, 01 Nov 2021 20:07:35 0530
Finished: Mon, 01 Nov 2021 20:07:35 0530
Ready: False
Restart Count: 0
Environment: <none>
Mounts:
/pod-data from multi-data (rw)
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-n6hst (ro)
Conditions:
Type Status
Initialized True
Ready False
ContainersReady False
PodScheduled True
Volumes:
multi-data:
Type: EmptyDir (a temporary directory that shares a pod's lifetime)
Medium:
SizeLimit: <unset>
kube-api-access-n6hst:
Type: Projected (a volume that contains injected data from multiple sources)
TokenExpirationSeconds: 3607
ConfigMapName: kube-root-ca.crt
ConfigMapOptional: <nil>
DownwardAPI: true
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 66s default-scheduler Successfully assigned default/multi-containers to docker-desktop
Normal Pulling 65s kubelet Pulling image "nginx"
Normal Pulled 47s kubelet Successfully pulled image "nginx" in 18.2903658s
Normal Created 47s kubelet Created container nginx-multicontainerone
Normal Started 47s kubelet Started container nginx-multicontainerone
Normal Pulling 47s kubelet Pulling image "nginx"
Normal Pulled 44s kubelet Successfully pulled image "nginx" in 3.285316s
Normal Created 43s kubelet Created container nginx-multicontainertwo
Normal Started 43s kubelet Started container nginx-multicontainertwo
Normal Pulling 43s kubelet Pulling image "debian"
Normal Pulled 40s kubelet Successfully pulled image "debian" in 3.3076706s
Normal Created 40s kubelet Created container debian-container
Normal Started 40s kubelet Started container debian-container
Команда: kubectl получить модули Результат: несколько контейнеров 1/3
Еще не готово 0 14м
Основная цель этого упражнения: я использую общий том emptyDir и пытаюсь получить доступ index.html в контейнерах «nginx-мультиконтейнер», «nginx-мультиконтейнер два»
Комментарии:
1. Поскольку все контейнеры в модуле используют один и тот же сетевой интерфейс, первый контейнер получает порт по умолчанию (80) для Nginx в вашем модуле. Впоследствии другие контейнеры Nginx выйдут из строя при попытке привязки к одному и тому же порту. Попробуйте назначить разные конфигурации портов для каждого экземпляра Nginx. Поскольку вы не добавили свою конфигурацию Nginx, я не могу быть полностью уверен, что это так.
2. Спасибо за быстрый ответ @ashu. Я собираюсь обновить его. Не могли бы вы, пожалуйста, сообщить мне, есть ли какой-либо способ или команды для проверки журналов ошибок (для устранения неполадок такого типа ошибок)
3. Вы можете получить определенные журналы контейнеров в модуле с
kubectl logs -p POD-NAME -c CONTAINER-NAME
помощью .4. Спасибо @clarj. Я устал от вышеприведенной команды, но она выдает мне только «Ошибка с сервера (плохой запрос): предыдущий завершенный контейнер «nginx-мультиконтейнер» в модуле «мультиконтейнеры» не найден»
Ответ №1:
Я запустил ваш модуль на миникубе, и мне удалось воспроизвести проблему. Поскольку все контейнеры в модуле используют один и тот же сетевой интерфейс, первый контейнер получает порт по умолчанию (80) для Nginx в вашем модуле. Впоследствии другой контейнер Nginx выходит из строя при попытке привязки к тому же порту. Чтобы проверить журналы отказавшего контейнера, вы можете использовать следующую команду.
kubectl logs multi-containers nginx-multicontainertwo
Когда я запустил его, я получил следующий вывод.
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2021/11/01 15:02:10 [emerg] 1#1: bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
2021/11/01 15:02:10 [emerg] 1#1: bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
2021/11/01 15:02:10 [notice] 1#1: try again to bind() after 500ms
2021/11/01 15:02:10 [emerg] 1#1: bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
2021/11/01 15:02:10 [emerg] 1#1: bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
2021/11/01 15:02:10 [notice] 1#1: try again to bind() after 500ms
2021/11/01 15:02:10 [emerg] 1#1: bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
2021/11/01 15:02:10 [emerg] 1#1: bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
2021/11/01 15:02:10 [notice] 1#1: try again to bind() after 500ms
2021/11/01 15:02:10 [emerg] 1#1: bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
2021/11/01 15:02:10 [emerg] 1#1: bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
2021/11/01 15:02:10 [notice] 1#1: try again to bind() after 500ms
2021/11/01 15:02:10 [emerg] 1#1: bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
2021/11/01 15:02:10 [emerg] 1#1: bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
2021/11/01 15:02:10 [notice] 1#1: try again to bind() after 500ms
2021/11/01 15:02:10 [emerg] 1#1: still could not bind()
nginx: [emerg] still could not bind()
Попробуйте назначить разные конфигурации портов для каждого экземпляра Nginx.