☸️ Minikube: развертывание контейнера с использованием частного реестра образов

by itisgood

Это руководство предназначено главным образом для того, чтобы проверить личный образ на вашем локальном экземпляре k8s.

У вас должен быть личный реестр с образом, который вы хотите развернуть, в противном случае – используйте общедоступный образ.

Начало работы

Как установить minikube

☸️ Локальные Kubernetes для Linux — MiniKube или MicroK8s

Как только Minikube установлен, запустите его:

minikube start
Установка скажет вам:
  Starting control plane node minikube in cluster minikube
💾  Downloading Kubernetes v1.18.3 preload ...
    > preloaded-images-k8s-v3-v1.18.3-docker-overlay2-amd64.tar.lz4: 526.01 MiB
🔥  Creating hyperkit VM (CPUs=2, Memory=2200MB, Disk=20000MB) ...
🐳  Preparing Kubernetes v1.18.3 on Docker 19.03.8 ...
🔎  Verifying Kubernetes components...
🌟  Enabled addons: default-storageclass, storage-provisioner
🏄  Done! kubectl is now configured to use "minikube"

Так что вам даже не нужно обновлять kubectl.

Просмотр нод кластера k8s

Должна быть только одна нода с именем minikube:

$ kubectl get nodes
NAME       STATUS   ROLES    AGE     VERSION
minikube   Ready    master   2m13s   v1.18.3
Следующие несколько шагов выполняются в пространстве имен default:

Добавим секрет частного реджестри

kubectl create secret docker-registry regcred \
--docker-server= \
--docker-username= \
--docker-password= \
--docker-email=
Проверим секрет
kubectl get secret regcred --output=yaml

Он закодирован в base64, поэтому для просмотра актуально использование:

kubectl get secret regcred --output="jsonpath={.data.\.dockerconfigjson}" | base64 --decode

Создадим под, который использует этот секрет

В файле my-pod.yml:

apiVersion: v1
kind: Pod
metadata:
  name: private-reg
  labels:
    name: private-reg
spec:
  containers:
  - name: private-reg-container
    image: 
  imagePullSecrets:
  - name: regcred

Установим и просмотрим этот под:

kubectl apply -f my-pod.yml
kubectl get pod private-reg

Если у вас есть проблема ImagePullBackoff, прокрутите страницу вниз.

Более подходящим способом в k8s было бы использование deployment вместо развертывания пода:
kubectl create deployment my-project --image=k8s.gcr.io/echoserver:1.4

Pod работает, как посмотреть интерфейс

По умолчанию Pod доступен только по его внутреннему IP-адресу в кластере Kubernetes.

Чтобы выставить под за пределами kubernetes, вам нужно создать сервис.

kubectl expose deployment my-project --type=LoadBalancer --port=8080

или если вы только что развернули под – вам нужно обновить спецификацию, чтобы включить label:

kubectl expose po private-reg--type=LoadBalancer --port=8080

 Убедитесь, сервис поднят:

kubectl get svc

В облачных провайдерах, которые поддерживают балансировщики нагрузки, для доступа к Сервису будет предоставлен внешний IP-адрес. В Minikube тип LoadBalancer делает Службу доступной через команду minikube service.

minikube service 

Поиск причины ошибки ImagePullBackoff

В моем случае под не развернулся:

$ kubectl get po
NAME          READY   STATUS             RESTARTS   AGE
private-reg   0/1     ImagePullBackOff   0          45s

Посмотрим описание:

kubectl describe pod private-reg

Ошибка, которую я увидел, была:

Failed to pull image "//:": rpc 
error: code = Unknown desc = Error response from daemon: pull access denied for //,
repository does not exist or may require 'docker login': denied:
requested access to the resource is denied
Обычно это происходит, если ваше имя пользователя, пароль,адрес реджестри или имя и образа неверны.
см. также другие ошибки:

You may also like

Leave a Comment