Могу ли я получить идентификатор контейнера паузы Pod через API Kubernetes? - PullRequest
0 голосов
/ 17 октября 2018

Когда я перечисляю модули в кластере (на определенном узле и во всех пространствах имен), то каждый из перечисленных модулей также содержит статусы контейнеров, и в нем я получаю идентификаторы механизма времени выполнения каждого из перечисленных контейнеров.

Для иллюстрации, я использую этот скрипт Python3 для доступа к API кластера через официальный клиент Python Kubernetes;это слегка измененная версия из Как найти все Бобы Kubernetes на одном и том же узле у Блока, используя официальный клиент Python?

from kubernetes import client, config
import os

def main():

    # it works only if this script is run by K8s as a POD
    config.load_incluster_config()
    # use this outside pods
    # config.load_kube_config()

    # grab the node name from the pod environment vars
    node_name = os.environ.get('KUHBERNETES_NODE_NAME', None)

    v1 = client.CoreV1Api()
    print("Listing pods with their IPs on node: ", node_name)
    # field selectors are a string, you need to parse the fields from the pods here
    field_selector = 'spec.nodeName='+node_name
    ret = v1.list_pod_for_all_namespaces(watch=False, field_selector=field_selector)
    for i in ret.items:
        print("%s\t%s\t%s" %
              (i.status.pod_ip, i.metadata.namespace, i.metadata.name))
        for c in i.status.container_statuses:
            print("\t%s\t%s" %
                  (c.name, c.container_id))

if __name__ == '__main__':
    main()

Примечание: Бит использует подходящий ServiceAccount, который позволяетчтобы вывести список модулей во всех пространствах имен.

Типичный вывод результатов при запуске в настройке мини-куба может выглядеть следующим образом:

Listing pods with their IPs on node:  minikube
172.17.0.5      cattle-system   cattle-cluster-agent-c949f5b48-llm65
        cluster-register        docker://f12fcb1acbc2e7c01c24dbd831ed53ab2a6df2353abe80988ae132c39f7c68c6
10.0.2.15       cattle-system   cattle-node-agent-hmq86
        agent   docker://e335a3d30ea37887ac2a1a1cc339eabb0a0098471f86db1926cfe02eef2c6b8f
172.17.0.6      gw      pyk8s
        py8ks   docker://1272747b52983e8f745bd118b2d935c1d314e9c6cc310e88013021ba974bc030
172.17.0.4      kube-system     coredns-c4cffd6dc-7lsdn
        coredns docker://8b0c3c67532ee2d7d16958a33cb942d5bd09ed37ded1d570830b5f7e5f7a09ab
10.0.2.15       kube-system     etcd-minikube
        etcd    docker://5e0e0ee48248e9779a2a5f9347a39c58743562b10719a31d7d6fc0af5e79e093
10.0.2.15       kube-system     kube-addon-manager-minikube
        kube-addon-manager      docker://96908bc5d5fd9b87779c8a8544591e5aeda2d58956fb365ab595681605b01001
10.0.2.15       kube-system     kube-apiserver-minikube
        kube-apiserver  docker://0711ec9a2321b1b5a801ab2b19409a1edc731058aa994978f989185efc4c8294
10.0.2.15       kube-system     kube-controller-manager-minikube
        kube-controller-manager docker://16d2e11a8dea2a46cd44bc97a5f894e7ff9da2da70f3c24376b4189dd912336e
172.17.0.2      kube-system     kube-dns-86f4d74b45-wbdf6
        dnsmasq docker://653c7ef27760a820449ee518b59e39ab4a7f65cade996ed85313c98038827f67
        kubedns docker://6cf6aaeac1192cf1d580293e03164db57bc70bce41cf91e5cac081010fe48cf7
        sidecar docker://9816e10d8455988aa400f98df32cfa69ce89fbfc3e3e1554145d9d6418c02157
10.0.2.15       kube-system     kube-proxy-ll7lq
        kube-proxy      docker://6b8c7ce1ae3c8fbc487bf05ccca9105dffaf675f916cdb62a595d8be7902e69b
10.0.2.15       kube-system     kube-scheduler-minikube
        kube-scheduler  docker://ab79e46ba900753d86b7000061720551a199c0ea6eee923fcd86bda2d86cc54a
172.17.0.3      kube-system     kubernetes-dashboard-6f4cfc5d87-bmnl8
        kubernetes-dashboard    docker://a73ef6b30fb87826a4a71ba428a01511278a759d69fade82ddd654911ec3f14f
10.0.2.15       kube-system     storage-provisioner
        storage-provisioner     docker://51eaf90bc3ae11baa354a436e366730c19206c73743c6517a0ad9eb8f0b89896

Обратите внимание, что в нем перечислены идентификаторы контейнеров контейнеров., кроме идентификаторов контейнеров паузы.Существует ли метод API, позволяющий также получать / перечислять идентификаторы контейнеров контейнеров паузы в пакетах?

Я пытался искать такие вещи, как "kubernetes api pod pause pause container" ... но я не получил ничего полезногоответы, кроме обычных результатов API для containerStatuses и т. д.

1 Ответ

0 голосов
/ 26 октября 2018

После некоторого исследования того, как работает шайба Docker в Kubernetes, становится ясно, что контейнеры паузы не видны в API кластера Kubernetes.Это связано с тем, что контейнеры pause являются артефактом, необходимым для некоторых механизмов контейнеров, таких как Docker, но не для других (CRI-O, если я не ошибаюсь).

Однако, когда низкоуровневое представление контейнера Docker имеет виднеобходимо и должно быть связано с представлением pod, запланированным для узла Kubernetes, тогда можно использовать предсказуемую схему именования контейнеров Docker, используемую в оболочке Kubernetes Docker.Shim создает имена контейнеров в виде k8s_conainer_pod_namespace_uid_attempt с необязательным суффиксом _random в случае, если ошибка связана с ошибкой конфликта имен Docker <= 1.11. </p>

  • k8s - фиксированный префикс, который запускаетshim рассматривает этот контейнер как контейнер Kubernetes.
  • контейнер - это имя, указанное в спецификации модуля.Обратите внимание, что Kubernetes допускает только строчные буквы z, 0-9 и тире.Таким образом, контейнеры паузы получают «зарезервированное» имя «POD» в верхнем регистре.
  • pod - это имя модуля.
  • namespace - это имя пространства имен в соответствии с назначением, или «по умолчанию».
  • pID UID с устаревшими форматами.
  • попытка - это счетчик, начинающийся с 0, который необходим shim для правильного управления обновлениями pod, то есть очистки контейнера и т. Д.

См. Также:

...