Это руководство предназначено главным образом для того, чтобы проверить личный образ на вашем локальном экземпляре 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, прокрутите страницу вниз.
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