Есть ли способы управления имиджем Kubernetes в автономном режиме? - PullRequest
1 голос
/ 28 января 2020

Я новичок в kubernetes. Недавно мне удалось управлять kubernetes с онлайн-сервером. Но когда я перехожу в изолированную область (автономный сервер), я не могу развернуть образ kubectl. Но все мое окружение работает хорошо, и я застрял в этом. Различное просто inte rnet соединение.

В настоящее время я не могу развернуть панель управления kubernetes и некоторые изображения на автономном сервере. Этот пример моей команды kubectl на автономном сервере (я скачал файл tar на онлайн-сервере):

# docker load < nginx.tar

# kubectl create deployment test-nginx --image=nginx

# kubectl get pods --all-namespaces
NAMESPACE     NAME                                   READY   STATUS             RESTARTS   AGE
default       test-nginx-7d97ffc85d-2s4lh            0/1     ImagePullBackOff   0          50s
kube-system   coredns-6955765f44-2s54f               1/1     Running            1          26h
kube-system   coredns-6955765f44-wmtq9               1/1     Running            1          26h
kube-system   etcd-devkubeapp01                      1/1     Running            1          26h
kube-system   kube-apiserver-devkubeapp01            1/1     Running            1          26h
kube-system   kube-controller-manager-devkubeapp01   1/1     Running            1          26h
kube-system   kube-flannel-ds-amd64-czn8z            1/1     Running            0          26h
kube-system   kube-flannel-ds-amd64-d58x4            1/1     Running            0          26h
kube-system   kube-flannel-ds-amd64-z9w9x            1/1     Running            0          26h
kube-system   kube-proxy-9wxj2                       1/1     Running            0          26h
kube-system   kube-proxy-mr76b                       1/1     Running            1          26h
kube-system   kube-proxy-w5pvm                       1/1     Running            0          26h
kube-system   kube-scheduler-devkubeapp01            1/1     Running            1          26h

# kubectl get nodes
NAME           STATUS   ROLES     AGE   VERSION
devkubeapp01   Ready    master    26h   v1.17.2
devkubeapp02   Ready    minion1   26h   v1.17.2
devkubeapp03   Ready    minion2   25h   v1.17.2 

# docker images
REPOSITORY                           TAG                 IMAGE ID            CREATED             SIZE
nginx                                latest              5ad3bd0e67a9        6 days ago          127MB
k8s.gcr.io/kube-proxy                v1.17.2             cba2a99699bd        10 days ago         116MB
k8s.gcr.io/kube-apiserver            v1.17.2             41ef50a5f06a        10 days ago         171MB
k8s.gcr.io/kube-controller-manager   v1.17.2             da5fd66c4068        10 days ago         161MB
k8s.gcr.io/kube-scheduler            v1.17.2             f52d4c527ef2        10 days ago         94.4MB
k8s.gcr.io/coredns                   1.6.5               70f311871ae1        2 months ago        41.6MB
k8s.gcr.io/etcd                      3.4.3-0             303ce5db0e90        3 months ago        288MB
quay.io/coreos/flannel               v0.11.0-amd64       ff281650a721        12 months ago       52.6MB
k8s.gcr.io/pause                     3.1                 da86e6ba6ca1        2 years ago         742kB

Мой Pod не может работать нормально, поэтому статус CreateContainer превращается в ImagePullBackOff (я пробовал на онлайн-сервере когда я отключил Inte rnet, статус такой же => ImagePullBackOff). Кто-нибудь может помочь решить это? Поддерживает ли kubernetes автономную среду для развертывания образа?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 29 января 2020

Как уже говорилось в моем предыдущем комментарии:

Я подозреваю, что ваш imagePullPolicy может быть неправильно сконфигурирован.

и дополнительно подтвержден предоставленными вами журналами:

Ошибка сервера (BadRequest): контейнер "nginx" в модуле "test- nginx -7d97ffc85d-2s4lh" ожидает запуска: пытается и не удается получить изображение

проблема заключается в конфигурации imagePullPolicy .

Как указано в официальной документации :

Предварительно извлеченные изображения

По умолчанию kubelet будет пытаться извлечь каждое изображение из указанного реестра. Однако, если свойство imagePullPolicy контейнера установлено на IfNotPresent или Never, то используется локальное изображение (предпочтительно или исключительно, соответственно).

Если вы хотите полагаться на предварительно вытянутые изображения в качестве замены проверки подлинности реестра, вы должны убедиться, что все узлы в кластере имеют одинаковые предварительно извлеченные образы.

Таким образом, как уже упоминалось в @Eduardo, вы должны убедиться, что у вас есть одни и те же изображения на всех узлах и ваш imagePullPolicy правильно настроен.

Однако, убедитесь, что контейнер всегда использует одну и ту же версию изображения, вы можете указать его digest , например sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2. Дайджест однозначно идентифицирует указанную c версию изображения, поэтому он не обновляется Kubernetes, если вы не измените значение дайджеста.

Таким образом, вы избежите проблем в будущем, поскольку сохраните точно такую ​​же версию из всего кластера изображений - самая большая ловушка в этом сценарии.

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

0 голосов
/ 28 января 2020

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

Вам необходимо:

  1. docker load < nginx.tar во всех узлах
  2. Убедитесь, что при развертывании используется imagePullPolicy со значением IfNotPresent или Never (по умолчанию) значение Always, что может быть вашей проблемой).
...