Как выполнить запуск в контейнере инициализации?

$ kubectl version

Client Version: version.Info{Major:"1", Minor:"9", GitVersion:"v1.9.6", GitCommit:"9f8ebd171479bec0ada837d7ee641dec2f8c6dd1", GitTreeState:"clean", BuildDate:"2018-03-21T15:21:50Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"9", GitVersion:"v1.9.6", GitCommit:"9f8ebd171479bec0ada837d7ee641dec2f8c6dd1", GitTreeState:"clean", BuildDate:"2018-03-21T15:13:31Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}

Посмотрите на диаграмму управления Sonarqube

requirements.yaml

dependencies:
- name: sonarqube
  version: 0.5.0
  repository: https://kubernetes-charts.storage.googleapis.com/

Попытка установить последнюю версию плагина java:

values.yaml

plugins:
   install:
     - "http://central.maven.org/maven2/org/sonarsource/java/sonar-java-plugin/5.3.0.13828/sonar-java-plugin-5.3.0.13828.jar"

Однако я получаю сообщение об ошибке в контейнере инициализации:

$ kubectl logs sonarqube-sonarqube-7b5dfd84cf-sglk5 -c install-plugins

sh: /opt/sonarqube/extensions/plugins/install_plugins.sh: Permission denied

$ kubectl describe po sonarqube-sonarqube-7b5dfd84cf-sglk5

Name:           sonarqube-sonarqube-7b5dfd84cf-sglk5
Namespace:      default
Node:           docker-for-desktop/192.168.65.3
Start Time:     Thu, 19 Apr 2018 15:22:04 -0500
Labels:         app=sonarqube
                pod-template-hash=3618984079
                release=sonarqube
Annotations:    <none>
Status:         Pending
IP:             10.1.0.250
Controlled By:  ReplicaSet/sonarqube-sonarqube-7b5dfd84cf
Init Containers:
  install-plugins:
    Container ID:  docker://b090f52b95d36e03b8af86de5a6729cec8590807fe23e27689b01e5506604463
    Image:         joosthofman/wget:1.0
    Image ID:      docker-pullable://joosthofman/wget@sha256:74ef45d9683b66b158a0acaf0b0d22f3c2a6e006c3ca25edbc6cf69b6ace8294
    Port:          <none>
    Command:
      sh
      -c
      /opt/sonarqube/extensions/plugins/install_plugins.sh
    State:          Waiting
      Reason:       CrashLoopBackOff

Есть ли способ exec в контейнер инициализации?

Моя попытка:

$ kubectl exec -it sonarqube-sonarqube-7b5dfd84cf-sglk5 -c install-plugins sh

error: unable to upgrade connection: container not found ("install-plugins")

Обновить

С предложением @ WarrenStrange:

$ kubectl get pods
NAME                                    READY     STATUS    RESTARTS   AGE
sonarqube-postgresql-59975458c6-mtfjj   1/1       Running   0          11m
sonarqube-sonarqube-685bd67b8c-nmj2t    1/1       Running   0          11m

$ kubectl get pods sonarqube-sonarqube-685bd67b8c-nmj2t -o yaml
...
 initContainers:
  - command:
    - sh
    - -c
    - 'mkdir -p /opt/sonarqube/extensions/plugins/ && cp /tmp/scripts/install_plugins.sh
      /opt/sonarqube/extensions/plugins/install_plugins.sh && chmod 0775 /opt/sonarqube/extensions/plugins/install_plugins.sh
      && /opt/sonarqube/extensions/plugins/install_plugins.sh '
    image: joosthofman/wget:1.0
    imagePullPolicy: IfNotPresent
    name: install-plugins
    resources: {}
    terminationMessagePath: /dev/termination-log
    terminationMessagePolicy: File
    volumeMounts:
    - mountPath: /opt/sonarqube/extensions
      name: sonarqube
      subPath: extensions
    - mountPath: /tmp/scripts/
      name: install-plugins
    - mountPath: /var/run/secrets/kubernetes.io/serviceaccount
      name: default-token-89d9n
      readOnly: true
...

Создайте новый манифест модуля, извлеченный из манифеста контейнера инициализации. Замените команду на sleep 6000 и выполните команды. Это позволяет ковыряться.


person Eric Francis    schedule 19.04.2018    source источник


Ответы (2)


Проблема в том, что контейнера не существует (см. CrashLoopBackOff).

Одна из вещей, которые я делаю с контейнерами инициализации (при условии, что у вас есть исходный код), - это переводить в спящий режим 600 при сбое в точке входа. Хотя бы для отладки. Это позволяет вам выполнить команду exec в контейнере, чтобы узнать причину сбоя.

person Warren Strange    schedule 19.04.2018

Учитывая это:

$ kubectl logs sonarqube-sonarqube-7b5dfd84cf-sglk5 -c install-plugins

sh: /opt/sonarqube/extensions/plugins/install_plugins.sh: Permission denied

Кажется, что Permission denied - это настоящая ошибка, произошедшая внутри контейнера install-plugin. Вы можете диагностировать joosthofman/wget:1.0, развернув его локально docker run -it --rm joosthofman/wget:1.0 sh. Это даст вам оболочку в контейнере, чтобы вы могли проверить его содержимое во время выполнения.

Я сделал это сам, и, во-первых, скрипт, который он пытается выполнить, даже не существует внутри контейнера.

/ # ls -l /opt/sonarqube/extensions/plugins/install_plugins.sh
ls: /opt/sonarqube/extensions/plugins/install_plugins.sh: No such file or directory
person JulioHM    schedule 23.04.2019