Black lives matter.
We stand in solidarity with the Black community.
Racism is unacceptable.
It conflicts with the core values of the Kubernetes project and our community does not tolerate it.
We stand in solidarity with the Black community.
Racism is unacceptable.
It conflicts with the core values of the Kubernetes project and our community does not tolerate it.
Minikube — это инструмент, позволяющий легко запускать Kubernetes на локальной машине. Для тех, кто хочет попробовать Kubernetes или рассмотреть возможность его использования в повседневной разработке, Minikube станет отличным вариантом, потому что он запускает одноузловой кластер Kubernetes внутри виртуальной машины (VM) на компьютере пользователя.
Minikube поддерживает следующие возможности Kubernetes:
Посмотрите страницу Установка Minikube.
Эта простая демонстрация поможет запустить, использовать и удалить Minikube на локальной машине. Следуйте перечисленным ниже шагам, чтобы начать знакомство с Minikube.
Запустите Minikube и создайте кластер:
minikube start
Вывод будет примерно следующим:
Starting local Kubernetes cluster...
Running pre-create checks...
Creating machine...
Starting local Kubernetes cluster...
Дополнительную информацию о запуске кластера в определенной версии Kubernetes, виртуальной машине или среде выполнения контейнера смотрите в разделе Запуск кластера.
Теперь вы можете работать со своим кластером через CLI-инструмент kubectl. Для получения дополнительной информации смотрите раздел Работа с кластером.
Давайте создадим развёртывание (Deployment) в Kubernetes, используя существующий образ echoserver
, представляющий простой HTTP-сервер, и сделаем его доступным на порту 8080 с помощью --port
.
kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.10
Вывод будет примерно следующим:
deployment.apps/hello-minikube created
Чтобы получить доступ к объекту Deployment hello-minikube
извне, создайте объект сервиса (Service):
kubectl expose deployment hello-minikube --type=NodePort --port=8080
Опция --type=NodePort
определяет тип сервиса.
Вывод будет примерно следующим:
service/hello-minikube exposed
Под (Pod) hello-minikube
теперь запущен, но нужно подождать, пока он начнёт функционировать, прежде чем обращаться к нему.
Проверьте, что под работает:
kubectl get pod
Если в столбце вывода STATUS
выводится ContainerCreating
, значит под все еще создается:
NAME READY STATUS RESTARTS AGE
hello-minikube-3383150820-vctvh 0/1 ContainerCreating 0 3s
Если в столбце STATUS
указано Running
, то под теперь в рабочем состоянии:
NAME READY STATUS RESTARTS AGE
hello-minikube-3383150820-vctvh 1/1 Running 0 13s
Узнайте URL-адрес открытого (exposed) сервиса, чтобы просмотреть подробные сведения о сервисе:
minikube service hello-minikube --url
Чтобы ознакомиться с подробной информацией о локальном кластере, скопируйте и откройте полученный из вывода команды на предыдущем шаге URL-адрес в браузере.
Вывод будет примерно следующим:
Hostname: hello-minikube-7c77b68cff-8wdzq
Pod Information:
-no pod information available-
Server values:
server_version=nginx: 1.13.3 - lua: 10008
Request Information:
client_address=172.17.0.1
method=GET
real path=/
query=
request_version=1.1
request_scheme=http
request_uri=http://192.168.99.100:8080/
Request Headers:
accept=*/*
host=192.168.99.100:30674
user-agent=curl/7.47.0
Request Body:
-no body in request-
Если сервис и кластер вам больше не нужны, их можно удалить.
Удалите сервис hello-minikube
:
kubectl delete services hello-minikube
Вывод будет примерно следующим:
service "hello-minikube" deleted
Удалите развёртывание hello-minikube
:
kubectl delete deployment hello-minikube
Вывод будет примерно следующим:
deployment.extensions "hello-minikube" deleted
Остановите локальный кластер Minikube:
minikube stop
Вывод будет примерно следующим:
Stopping "minikube"...
"minikube" stopped.
Подробности смотрите в разделе Остановка кластера.
Удалите локальный кластер Minikube:
minikube delete
Вывод будет примерно следующим:
Deleting "minikube" ...
The "minikube" cluster has been deleted.
Подробности смотрите в разделе Удаление кластера.
Команда minikube start
используется для запуска кластера.
Эта команда создаёт и конфигурирует виртуальную машину, которая запускает одноузловой кластер Kubernetes.
Эта команда также настраивает вашу установку kubectl для взаимодействия с этим кластером.
Заметка: Если вы работаете из-под веб-прокси, вам нужно указать данные прокси в командеminikube start
:shell https_proxy=<my proxy> minikube start --docker-env http_proxy=<my proxy> --docker-env https_proxy=<my proxy> --docker-env no_proxy=192.168.99.0/24
К сожалению, установка переменных окружения не cработает. Minikube также создает контекст "minikube" и устанавливает его по умолчанию в kubectl. Чтобы вернуться к этому контексту, выполните следующую команду:kubectl config use-context minikube
.
Вы можете указать используемую версию Kubernetes в Minikube, добавив параметр --kubernetes-version
в команду minikube start
. Например, чтобы запустить Minikube из-под версии v1.18.0, вам нужно выполнить следующую команду:
minikube start --kubernetes-version v1.18.0
Вы можете изменить драйвер виртуальной машины, добавив флаг --vm-driver=<enter_driver_name>
в команду minikube start
.
Тогда команда будет выглядеть так:
minikube start --vm-driver=<driver_name>
Minikube поддерживает следующие драйверы:
Заметка: Смотрите страницу DRIVERS для получения подробной информации о поддерживаемых драйверах и как устанавливать плагины.
minikube ip
.Внимание: Если вы используете драйверnone
, некоторые компоненты Kubernetes запускаются как привилегированные контейнеры, которые имеют побочные эффекты вне окружения Minikube. Эти побочные эффекты означают, что драйверnone
не рекомендуется использовать в личных рабочих станций.
Вы можете запустить Minikube в следующих средах выполнения контейнеров.
Чтобы использовать containerd в качестве среды выполнения контейнера, выполните команду ниже:
minikube start \
--network-plugin=cni \
--enable-default-cni \
--container-runtime=containerd \
--bootstrapper=kubeadm
Также можете использовать расширенную вариант команды:
minikube start \
--network-plugin=cni \
--enable-default-cni \
--extra-config=kubelet.container-runtime=remote \
--extra-config=kubelet.container-runtime-endpoint=unix:///run/containerd/containerd.sock \
--extra-config=kubelet.image-service-endpoint=unix:///run/containerd/containerd.sock \
--bootstrapper=kubeadm
Чтобы использовать CRI-O в качестве среды выполнения контейнера, выполните команду ниже:
minikube start \
--network-plugin=cni \
--enable-default-cni \
--container-runtime=cri-o \
--bootstrapper=kubeadm
Также можете использовать расширенную вариант команды:
minikube start \
--network-plugin=cni \
--enable-default-cni \
--extra-config=kubelet.container-runtime=remote \
--extra-config=kubelet.container-runtime-endpoint=/var/run/crio.sock \
--extra-config=kubelet.image-service-endpoint=/var/run/crio.sock \
--bootstrapper=kubeadm
При использовании одной виртуальной машины для Kubernetes легко повторно использовать демон Docker, встроенный в Minikube. В этом случае нет необходимости создавать реестр Docker на вашей хост-машине и отправлять образ туда. Вместо этого вы можете создать реестр внутри того же демона Docker, который использует Minikube, что позволит ускорить локальные запуски.
Заметка: Обязательно пометьте собственным тегом Docker-образ, и затем при получении образа всегда указывайте его. Так как:latest
— это тег по умолчанию, поэтому наряду с соответствующей стандартной политикой получения образа, равнойAlways
, в конечном итоге возникнет ошибка при получении образа (ErrImagePull
), если Docker-образ не найден в базовом реестре Docker (как правило, в DockerHub).
Для работы с Docker-демоном на вашем хосте под управлением Mac/Linux, запустите последнюю строку из вывода команды minikube docker-env
.
Теперь вы можете использовать Docker в командной строке вашего хост-компьютера на Mac/Linux для взаимодействия с демоном Docker внутри виртуальной машины Minikube:
docker ps
Заметка: На Centos 7 Docker может возникнуть следующая ошибка:Could not read CA certificate "/etc/docker/ca.pem": open /etc/docker/ca.pem: no such file or directory
Для исправления этой ошибки обновите файл/etc/sysconfig/docker
, чтобы учитывались изменения в среде Minikube:shell < DOCKER_CERT_PATH=/etc/docker --- > if [ -z "${DOCKER_CERT_PATH}" ]; then > DOCKER_CERT_PATH=/etc/docker > fi
Minikube имеет такую возможность как "конфигуратор" ("configurator"), позволяющая пользователям настраивать компоненты Kubernetes произвольными значениями.
Чтобы использовать эту возможность, используйте флаг --extra-config
в команде minikube start
.
Этот флаг можно дублировать, поэтому вы можете указать его несколько раз с несколькими разными значениями, чтобы установить несколько опций.
Этот флаг принимает строку вида component.key=value
, где component
— это одно из значение в приведённом ниже списка, key
— ключ из структуры конфигурации, а value
— значение, которое нужно установить.
Допустимые ключи можно найти в документации по componentconfigs
в Kubernetes каждого компонента.
Ниже вы найдете документации по каждой поддерживаемой конфигурации:
Чтобы изменить настройку MaxPods
на значение 5 в Kubelet, передайте этот флаг --extra-config=kubelet.MaxPods=5
.
Эта возможность также поддерживает вложенные структуры. Для изменения настройки LeaderElection.LeaderElect
на значение true
в планировщике, передайте флаг --extra-config=scheduler.LeaderElection.LeaderElect=true
.
Чтобы изменить настройку AuthorizationMode
в apiserver
на значение RBAC
, используйте флаг --extra-config=apiserver.authorization-mode=RBAC
.
Команда minikube stop
используется для остановки кластера.
Эта команда выключает виртуальную машины Minikube, но сохраняет всё состояние кластера и данные.
Повторный запуск кластера вернет его в прежнее состояние.
Команда minikube delete
используется для удаления кластера.
Эта команда выключает и удаляет виртуальную машину Minikube.
Данные или состояние не сохраняются.
Смотрите инструкцию по обновлению minikube.
Команда minikube start
создает контекст kubectl под именем "minikube".
Этот контекст содержит конфигурацию для взаимодействия с кластером Minikube.
Minikube автоматически устанавливает этот контекст, но если вам потребуется явно использовать его в будущем, выполните команду ниже:
kubectl config use-context minikube
Либо передайте контекст при выполнении команды следующим образом: kubectl get pods --context=minikube
.
Чтобы получить доступ к веб-панели управления Kubernetes, запустите эту команду в командной оболочке после запуска Minikube, чтобы получить адрес:
minikube dashboard
Чтобы получить доступ к сервису, открытой через порт узла, выполните команду в командной оболочке после запуска Minikube, чтобы получить адрес:
minikube service [-n NAMESPACE] [--url] NAME
Виртуальная машина Minikube доступна только хост-системе через IP-адрес, который можно получить с помощью команды minikube ip
.
Вы можете использовать IP-адрес для доступа к любому сервису типа NodePort
.
Чтобы определить NodePort для вашего сервиса, вы можете использовать такую команду kubectl
:
kubectl get service $SERVICE --output='jsonpath="{.spec.ports[0].nodePort}"'
Minikube поддерживает PersistentVolumes типа hostPath
.
Эти постоянные тома монтируются в виртуальную машину Minikube.
Виртуальная машина Minikube загружается в файловую систему tmpfs, поэтому большинство директорий не будет сохранено при перезагрузках (minikube stop
).
Однако Minikube сконфигурирован на сохранение файлов, хранящихся в перечисленных ниже директорий хоста.
/data
/var/lib/minikube
/var/lib/docker
Пример конфигурации PersistentVolume для сохранения данных в директории /data
:
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv0001
spec:
accessModes:
- ReadWriteOnce
capacity:
storage: 5Gi
hostPath:
path: /data/pv0001/
Некоторые драйверы монтируют директорию хоста в виртуальную машину, чтобы можно было легко обмениваться файлами между виртуальной машиной и хостом. В настоящее время это не настраивается и отличается от используемого драйвера и ОС.
Заметка: Совместное использование директории хоста еще не реализовано в драйвере KVM.
Driver | OS | HostFolder | VM |
---|---|---|---|
VirtualBox | Linux | /home | /hosthome |
VirtualBox | macOS | /Users | /Users |
VirtualBox | Windows | C://Users | /c/Users |
VMware Fusion | macOS | /Users | /mnt/hgfs/Users |
Xhyve | macOS | /Users | /Users |
Для доступа к реестру приватных контейнеров, выполните шаги, описанные на этой странице.
Мы рекомендуем использовать ImagePullSecrets
, но если вам нужно обратиться к нему из виртуальной машины Minikube, нужно поместить файл .dockercfg
в директорию /home/docker
или config.json
в директорию /home/docker/.docker
.
Для того, чтобы Minikube смог запустить или перезапустить пользовательские дополнения, поместите дополнения, которые вы хотите запускать с помощью Minikube, в директорию ~/.minikube/addons
. Дополнения в этой директории будут перемещены в виртуальную машину Minikube и запускаться каждый раз при запуске или перезапуске Minikube.
Minikube создаёт виртуальную машину, включающая в себя Kubernetes и демон Docker. Когда Kubernetes планирует выполнение контейнеров с использованием Docker, демону Docker может потребоваться доступ к внешней сети для получения контейнеров.
Если вы работаете через HTTP-прокси, вам нужно сконфигурировать настройки прокси для Docker.
Для этого нужно передать необходимые переменные окружения в флаги перед выполнением команды minikube start
.
Например:
minikube start --docker-env http_proxy=http://$YOURPROXY:PORT \
--docker-env https_proxy=https://$YOURPROXY:PORT
Если адрес вашей виртуальной машины 192.168.99.100, то, скорее всего, настройки прокси помешают kubectl
обратиться к ней.
Чтобы прокси игнорировал этот IP-адрес, нужно скорректировать настройки no_proxy следующим образом:
export no_proxy=$no_proxy,$(minikube ip)
Функциональность, для которой требуется несколько узлов, не будет работать в Minikube.
Minikube использует libmachine для подготовки виртуальных машин и kubeadm для инициализации кластера Kubernetes.
Для получения дополнительной информации о Minikube посмотрите статью.
Помощь, вопросы и комментарии приветствуются и поощряются! Разработчики Minikube проводят время на Slack в канале #minikube (получить приглашение можно здесь). У нас также есть список рассылки kubernetes-dev на Google Groups. Если вы отправляете сообщение в список, пожалуйста, начните вашу тему с "minikube: ".