Используйте информацию на этой странице, чтобы найти наиболее подходящее для вас решение по установке и настройке.
Решение о том, как запускать Kubernetes, зависит от доступных ресурсов и необходимого уровня гибкости использования. Запуск Kubernetes возможен практически на чём угодно, от вашего ноутбука или виртуальных машины у облачного провайдера и до физических серверов. Решения позволяют как настроить полностью управляемый кластер запуском единственной команды так и создать пользовательский кластер на физических серверах.
Решения для запуска на локальной машине
Запуск на локальной машине позволяет легко начать работу с Kubernetes. Можно создавать и тестировать кластер Kubernetes не беспокоясь о трате облачных ресурсов и квотах.
Вам следует выбрать запуск на локальной машине, если вы:
Управляемые решения позволяют надёжно и удобно создавать и поддерживать кластеры Kubernetes. Они настраивают и управляют кластером самостоятельно, не требуя ручного вмешательства.
Вам следует выбрать управляемое решение, если вы:
Хотите получить полностью самоуправляемое решение
Хотите сконцентрироваться на разработке собственных приложений или сервисов
Хотите получить высокую доступность, но у вас нет выделенной команды по обеспечению надёжности приложения (SRE).
Не имеете ресурсов для размещения и мониторинга собственных кластеров
Такие решения позволяют создавать кластеры Kubernetes с помощью небольшого количества команд. Эти решения имеют большую поддержку сообществом и активно развиваются. Они могут быть размещены на разнообразных IaaS облачных провайдерах, при этом предлагая большую свободу и гибкость в обмен на приложенные усилия.
Вам следует выбрать облачное решение "под ключ", если вы:
Хотите получить больший контроль над кластерами, чем позволяют размещённые решения
Пользовательские решения позволяют достичь наибольшей свободы в управлении кластерами, но при этом требуют наибольшей экспертизы. Можно найти такие решения как для размещения на физических серверах, так и у облачных провайдеров на разных операционных системах.
Minikube — это инструмент, позволяющий легко запускать Kubernetes на локальной машине. Для тех, кто хочет попробовать Kubernetes или рассмотреть возможность его использования в повседневной разработке, Minikube станет отличным вариантом, потому что он запускает одноузловой кластер Kubernetes внутри виртуальной машины (VM) на компьютере пользователя.
Возможности Minikube
Minikube поддерживает следующие возможности Kubernetes:
DNS
Сервисы NodePort
Словари конфигурации (ConfigMaps) и секреты (Secrets)
Эта простая демонстрация поможет запустить, использовать и удалить 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.
Под (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-
Если сервис и кластер вам больше не нужны, их можно удалить.
Команда minikube start используется для запуска кластера.
Эта команда создаёт и конфигурирует виртуальную машину, которая запускает одноузловой кластер Kubernetes.
Эта команда также настраивает вашу установку kubectl для взаимодействия с этим кластером.
Примечание:
Если вы работаете из-под веб-прокси, вам нужно указать данные прокси в команде minikube start:
К сожалению, установка переменных окружения не cработает.
Minikube также создает контекст "minikube" и устанавливает его по умолчанию в kubectl.
Чтобы вернуться к этому контексту, выполните следующую команду: kubectl config use-context minikube.
Указание версии Kubernetes
Вы можете указать используемую версию Kubernetes в Minikube, добавив параметр --kubernetes-version в команду minikube start. Например, чтобы запустить Minikube из-под версии 1.32.0, вам нужно выполнить следующую команду:
minikube start --kubernetes-version 1.32.0
Указание драйвера виртуальной машины
Вы можете изменить драйвер виртуальной машины, добавив флаг --vm-driver=<enter_driver_name> в команду minikube start.
Тогда команда будет выглядеть так:
minikube start --vm-driver=<driver_name>
Minikube поддерживает следующие драйверы:
Примечание:
Смотрите страницу DRIVERS для получения подробной информации о поддерживаемых драйверах и как устанавливать плагины.
hyperv (установка драйвера)
Обратите внимание, что указанный IP-адрес на этой странице является динамическим и может изменяться. Его можно получить с помощью minikube ip.
none (Запускает компоненты Kubernetes на хосте, а не на виртуальной машине. Использование этого драйвера требует использование Linux и установленного Docker.)
Внимание:
Если вы используете драйвер none, некоторые компоненты Kubernetes запускаются как привилегированные контейнеры, которые имеют побочные эффекты вне окружения Minikube. Эти побочные эффекты означают, что драйвер none не рекомендуется использовать в личных рабочих станций.
Запуск кластера в других средах выполнения контейнеров
Вы можете запустить Minikube в следующих средах выполнения контейнеров.
Использование локальных образов путём повторного использования демона Docker
При использовании одной виртуальной машины для 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:
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 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:
Некоторые драйверы монтируют директорию хоста в виртуальную машину, чтобы можно было легко обмениваться файлами между виртуальной машиной и хостом. В настоящее время это не настраивается и отличается от используемого драйвера и ОС.
Примечание:
Совместное использование директории хоста еще не реализовано в драйвере 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 с помощью HTTP-прокси
Minikube создаёт виртуальную машину, включающая в себя Kubernetes и демон Docker.
Когда Kubernetes планирует выполнение контейнеров с использованием Docker, демону Docker может потребоваться доступ к внешней сети для получения контейнеров.
Если вы работаете через HTTP-прокси, вам нужно сконфигурировать настройки прокси для Docker.
Для этого нужно передать необходимые переменные окружения в флаги перед выполнением команды minikube start.
Если адрес вашей виртуальной машины 192.168.99.100, то, скорее всего, настройки прокси помешают kubectl обратиться к ней.
Чтобы прокси игнорировал этот IP-адрес, нужно скорректировать настройки no_proxy следующим образом:
exportno_proxy=$no_proxy,$(minikube ip)
Известные проблемы
Функциональность, для которой требуется несколько узлов, не будет работать в Minikube.
Реализация
Minikube использует libmachine для подготовки виртуальных машин и kubeadm для инициализации кластера Kubernetes.
Для получения дополнительной информации о Minikube посмотрите статью.
MicroK8: пользователи Linux, которые не хотят использовать виртуальную машину, могут в качестве альтернативы посмотреть в сторону MicroK8s.
Сообщество
Помощь, вопросы и комментарии приветствуются и поощряются! Разработчики Minikube проводят время на Slack в канале #minikube (получить приглашение можно здесь). У нас также есть список рассылки dev@kubernetes на Google Groups. Если вы отправляете сообщение в список, пожалуйста, начните вашу тему с "minikube: ".
1.2 - Установка Kubernetes с помощью Kind
Kind — это инструмент для запуска локальных кластеров Kubernetes с помощью "узлов" контейнера Docker.