Настройка
Используйте информацию на этой странице, чтобы найти наиболее подходящее для вас решение по установке и настройке.
Решение о том, как запускать Kubernetes, зависит от доступных ресурсов и необходимого уровня гибкости использования. Запуск Kubernetes возможен практически на чём угодно, от вашего ноутбука или виртуальных машины у облачного провайдера и до физических серверов. Решения позволяют как настроить полностью управляемый кластер запуском единственной команды так и создать пользовательский кластер на физических серверах.
Решения для запуска на локальной машине
Запуск на локальной машине позволяет легко начать работу с Kubernetes. Можно создавать и тестировать кластер Kubernetes не беспокоясь о трате облачных ресурсов и квотах.
Вам следует выбрать запуск на локальной машине, если вы:
- Пробуете или начинаете работу с Kubernetes
- Локально разрабатываете и тестируете кластер
Выбрать решение для запуска на локальной машине.
Управляемые решения
Управляемые решения позволяют надёжно и удобно создавать и поддерживать кластеры Kubernetes. Они настраивают и управляют кластером самостоятельно, не требуя ручного вмешательства.
Вам следует выбрать управляемое решение, если вы:
- Хотите получить полностью самоуправляемое решение
- Хотите сконцентрироваться на разработке собственных приложений или сервисов
- Хотите получить высокую доступность, но у вас нет выделенной команды по обеспечению надёжности приложения (SRE).
- Не имеете ресурсов для размещения и мониторинга собственных кластеров
Выбрать управляемое решение.
Облачные решения "под ключ"
Такие решения позволяют создавать кластеры Kubernetes с помощью небольшого количества команд. Эти решения имеют большую поддержку сообществом и активно развиваются. Они могут быть размещены на разнообразных IaaS облачных провайдерах, при этом предлагая большую свободу и гибкость в обмен на приложенные усилия.
Вам следует выбрать облачное решение "под ключ", если вы:
- Хотите получить больший контроль над кластерами, чем позволяют размещённые решения
- Хотите получить больше контроля над операциями
Выбрать облачное решение "под ключ"
Местное резервное решение "под ключ"
Такие решения позволяют с помощью небольшого количества команд создавать кластеры Kubernetes в ваших внутренних, защищённых облачных сетях.
Вам следует выбрать местное резервное решение "под ключ", если:
- Вы хотите развернуть кластер в приватной облачной сети
- У вас есть выделенная команда SRE-специалистов
- У вас есть ресурсы для размещения и мониторинга собственных кластеров
Выбрать местное резервное решение "под ключ".
Пользовательские решения
Пользовательские решения позволяют достичь наибольшей свободы в управлении кластерами, но при этом требуют наибольшей экспертизы. Можно найти такие решения как для размещения на физических серверах, так и у облачных провайдеров на разных операционных системах.
Выбрать пользовательское решение.
Что дальше
Перейти к выбору подходящего решения, чтобы ознакомить с полным списком доступных решений.
1.1 - Установка Kubernetes с помощью Minikube
Minikube — это инструмент, позволяющий легко запускать Kubernetes на локальной машине. Для тех, кто хочет попробовать Kubernetes или рассмотреть возможность его использования в повседневной разработке, Minikube станет отличным вариантом, потому что он запускает одноузловой кластер Kubernetes внутри виртуальной машины (VM) на компьютере пользователя.
Возможности Minikube
Minikube поддерживает следующие возможности Kubernetes:
- DNS
- Сервисы NodePort
- Словари конфигурации (ConfigMaps) и секреты (Secrets)
- Панель управления (Dashboard)
- Среда выполнения контейнера: Docker, CRI-O и containerd
- Поддержка CNI (Container Network Interface)
- Ingress
Установка
Посмотрите страницу Установка Minikube.
Краткое руководство
Эта простая демонстрация поможет запустить, использовать и удалить Minikube на локальной машине. Следуйте перечисленным ниже шагам, чтобы начать знакомство с Minikube.
-
Запустите Minikube и создайте кластер:
Вывод будет примерно следующим:
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
теперь запущен, но нужно подождать, пока он начнёт функционировать, прежде чем обращаться к нему.
Проверьте, что под работает:
Если в столбце вывода 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:
Вывод будет примерно следующим:
Stopping "minikube"...
"minikube" stopped.
Подробности смотрите в разделе Остановка кластера.
-
Удалите локальный кластер Minikube:
Вывод будет примерно следующим:
Deleting "minikube" ...
The "minikube" cluster has been deleted.
Подробности смотрите в разделе Удаление кластера.
Управление кластером
Запуск кластера
Команда minikube start
используется для запуска кластера.
Эта команда создаёт и конфигурирует виртуальную машину, которая запускает одноузловой кластер Kubernetes.
Эта команда также настраивает вашу установку kubectl для взаимодействия с этим кластером.
Заметка: Если вы работаете из-под веб-прокси, вам нужно указать данные прокси в команде minikube start
:
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
Вы можете указать используемую версию Kubernetes в Minikube, добавив параметр --kubernetes-version
в команду minikube start
. Например, чтобы запустить Minikube из-под версии v1.23.0, вам нужно выполнить следующую команду:
minikube start --kubernetes-version v1.23.0
Указание драйвера виртуальной машины
Вы можете изменить драйвер виртуальной машины, добавив флаг --vm-driver=<enter_driver_name>
в команду minikube start
.
Тогда команда будет выглядеть так:
minikube start --vm-driver=<driver_name>
Minikube поддерживает следующие драйверы:
Заметка: Смотрите страницу
DRIVERS для получения подробной информации о поддерживаемых драйверах и как устанавливать плагины.
- virtualbox
- vmwarefusion
- docker (ЭКСПЕРИМЕНТАЛЬНЫЙ)
- kvm2 (установка драйвера)
- hyperkit (установка драйвера)
- hyperv (установка драйвера)
Обратите внимание, что указанный IP-адрес на этой странице является динамическим и может изменяться. Его можно получить с помощью
minikube ip
.
- vmware (установка драйвера) (VMware unified driver)
- parallels (установка драйвера)
- none (Запускает компоненты Kubernetes на хосте, а не на виртуальной машине. Использование этого драйвера требует использование Linux и установленного Docker.)
Внимание: Если вы используете драйвер 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
Использование локальных образов путём повторного использования демона 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:
Заметка: На 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:
< DOCKER_CERT_PATH=/etc/docker
---
> if [ -z "${DOCKER_CERT_PATH}" ]; then
> DOCKER_CERT_PATH=/etc/docker
> fi
Конфигурация Kubernetes
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.
Работа с кластером
Kubectl
Команда minikube start
создает контекст kubectl под именем "minikube".
Этот контекст содержит конфигурацию для взаимодействия с кластером Minikube.
Minikube автоматически устанавливает этот контекст, но если вам потребуется явно использовать его в будущем, выполните команду ниже:
kubectl config use-context minikube
Либо передайте контекст при выполнении команды следующим образом: kubectl get pods --context=minikube
.
Панель управления
Чтобы получить доступ к веб-панели управления Kubernetes, запустите эту команду в командной оболочке после запуска Minikube, чтобы получить адрес:
Сервисы
Чтобы получить доступ к сервису, открытой через порт узла, выполните команду в командной оболочке после запуска 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 с помощью HTTP-прокси
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 смотрите в дорожной карте.
- Руководство по разработке: посмотрите CONTRIBUTING.md, чтобы ознакомиться с тем, как отправлять пулрексты.
- Сборка Minikube: инструкции по сборке/тестированию Minikube из исходного кода смотрите в руководстве по сборке.
- Добавление новой зависимости: инструкции по добавлению новой зависимости в Minikube смотрите в руководстве по добавлению зависимостей.
- Добавление нового дополнения: инструкции по добавлению нового дополнения для Minikube смотрите в руководстве по добавлению дополнений.
- MicroK8: пользователи Linux, которые не хотят использовать виртуальную машину, могут в качестве альтернативы посмотреть в сторону MicroK8s.
Сообщество
Помощь, вопросы и комментарии приветствуются и поощряются! Разработчики Minikube проводят время на Slack в канале #minikube (получить приглашение можно здесь). У нас также есть список рассылки kubernetes-dev на Google Groups. Если вы отправляете сообщение в список, пожалуйста, начните вашу тему с "minikube: ".