Получить полный идентификатор Kubernetes POD изнутри себя (работающий контейнер) - PullRequest
3 голосов
/ 11 ноября 2019

Как получить полный идентификатор контейнера изнутри себя в Kubernetes. Я хочу добавить идентификатор контейнера в журнал приложений, который работает как контейнер Kubernetes

Ответы [ 2 ]

1 голос
/ 11 ноября 2019

Существует два способа выставить поля Pod и Container в работающий контейнер:

  • Переменные среды
  • Файлы томов

Вместеэти два способа представления полей Pod и Container называются Downward API.

Итак, просто используя переменные окружения, вы можете вставить любые метаданные модуля в работающий контейнер.


Обновление комментария - В соответствии с документацией kubernetes каждое имя имеет UID, который добавляется к имени ресурса, например, модуль или контейнер, который предоставит способ получитьуникальный идентификатор, который будет использоваться для регистрации.

metadata.name = myimage + unique id

примечание * - единственным предостережением здесь является тот факт, что UID меняется при каждом обновлении, поэтому было бы лучше назначить уникальный идентификатор с вашей стороны для идентификации контейнера или контейнера. в сочетании с K8 UID.

Вот пример YAML.

apiVersion: v1
kind: Pod
metadata:
  name: dapi-envars-fieldref
spec:
  containers:
    - name: test-container
      image: k8s.gcr.io/busybox
      command: [ "sh", "-c"]
      args:
      - while true; do
          echo -en '\n';
          printenv MY_NODE_NAME MY_POD_NAME MY_POD_NAMESPACE;
          printenv MY_POD_IP MY_POD_SERVICE_ACCOUNT;
          sleep 10;
        done;
      env:
        - name: MY_POD_ID   // <--- here you inject env into container
          valueFrom:
            fieldRef:
              fieldPath: metadata.name   // <--- set value of the env var to pod name
        - name: MY_POD_SERVICE_ACCOUNT
          valueFrom:
            fieldRef:
              fieldPath: spec.serviceAccountName
  restartPolicy: Never

ссылка.

0 голосов
/ 11 ноября 2019

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

Это должно быть сделано для целей ведения журнала приложения, предполагая, что существует только один применение контейнер в капсуле (что в любом случае считается наилучшей практикой).

...