Как я могу получить имя своего контейнера, когда он находится в контейнере в модуле k8s?

#kubernetes

Вопрос:

Я не знаю, как установить env, чтобы получить имя контейнера. например,

 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_CONTAINER_NAME
          value: "test-container"
 

Интересно, может ли значение env:MY_CONTAINER_NAME быть своего рода ссылкой?

Комментарии:

1. Что бы вы сделали с именем контейнера, если бы оно у вас было? (Модуль, как правило, будет иметь только один [основной] контейнер, и вы не сможете много сделать с именем контейнера, не имея также имени модуля.)

2. Вы можете использовать нисходящий API для получения имени модуля в переменной среды, но не имени контейнера.

Ответ №1:

если вам просто нужно имя контейнера, вы можете использовать HOSTNAME переменную, чтобы избежать определения новой переменной env:

 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 HOSTNAME
          sleep 10;
        done;
 

если вам нужна новая переменная env, вы можете использовать якоря в yaml:

 apiVersion: v1
kind: Pod
metadata:
  name: dapi-envars-fieldref
spec:
  containers:
    - name: amp;containername test-container
      image: k8s.gcr.io/busybox
      command: [ "sh", "-c"]
      args:
      - while true; do
          echo -en 'n';
          printenv MY_CONTAINER_NAME;
          sleep 10;
        done;
      env:
        - name: MY_CONTAINER_NAME
          value: *containername
 

и тогда вы получите это:

 $ kubectl logs dapi-envars-fieldref
test-container
 

Комментарии:

1. Имя хоста(8) обычно будет именем модуля , в отличие от имени контейнера внутри модуля.