Варианты установки Kubernetes
В предыдущей статье мы рассмотрели, что такое проект управления контейнерами Kubernetes, теперь рассмотрим, какие варианты установки используют DevOps администраторы.
В зависимости от задач установить Kubernetes можно разными способами. Нужно предупредить, что руководства в интернете работают не всегда, в первую очередь потому, что проект быстро развивается и многие вопросы давно упрощены.
Для локальной установки рекомендуется Minikube, реализующий однокластерную систему, используя системы виртуализации.
Другой вариант – использование исходных текстов мастер ветки или bash-скрипт. В случае исходных текстов тоже есть варианты: можно установить систему или, распаковав архив, просто запустить ее в однокластеровом варианте (при остановке все данные теряются):
1 |
$ KUBE_ENABLE_CLUSTER_DNS=true API_HOST_IP=0.0.0.0 hack/local-up-cluster.sh |
Перед этим понадобится установить Go (на нем написан K8S), etcd, cfssl и некоторые другие компоненты (баз настройки). Сам мастер кластер работает и с 2 Гб ОЗУ, но во время такого развертывания скрипт может потребовать больше памяти, даже на ПК с 8 Гб. В Linux это можно разрешить при помощи:
1 2 |
$ sudo sysctl -w vm.overcommit_memory=1 $ sudo sysctl -w vm.swappiness=1 |
Процесс установки из исходных текстов рассматривать не будем, развернем кластер из репозитория. В качестве ОС используем Ubuntu 16.04 LTS.
Установка Docker
Кроме специфических операций, о которых пойдет речь отдельно, все действия производятся на master и minion.
Обновляем систему:
1 2 |
$ sudo apt update $ sudo apt upgrade |
Устанавливаем Docker. Добавляем официальный репозиторий Docker:
1 2 3 |
$ sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D $ sudo vi /etc/apt/sources.list.d/docker.list deb https://apt.dockerproject.org/repo ubuntu-xenial main |
Обновляем список пакетов:
1 2 3 |
$ sudo apt update $ apt-cache policy docker-engine $ sudo apt install docker-engine |
Здесь есть нюанс, о котором нужно знать. Текущая версия Kubernetes не поддерживает storage-driver = overlay2, и инициализация мастера в этом случае выдает ошибку.
А Docker 1.13 устанавливает именно в таком варианте, если обновлять с Docker 1.11+, то все нормально. Проверить текущие настройки Docker можно командой:
1 2 |
$ docker-engine info | grep -i storage Storage Driver: aufs |
Если в ответ получили overlay2, то нужно изменить параметры запуска Docker и перезапустить сервис:
1 |
DOCKER_OPTS="--storage-driver=aufs" |
Вероятно, понадобится удалить подкаталог overlay. Устанавливаем дополнительные пакеты:
1 |
$ sudo apt-get install linux-image-extra-$(uname -r) |
Разрешаем автозапуск сервиса при загрузке ОС:
1 |
$ sudo systemctl enable docker && sudo systemctl start docker |
Чтобы выполнять команды Docker без привилегий администратора, добавляем текущего пользователя в группу docker:
1 |
$ sudo usermod -aG docker $USER |
Устанавливаем Kubernetes
Самый простой и правильный способ развертывания боевого кластера – это использование из официального репозитория Google. На всех системах кластера (master + minion) добавляем репозиторий Kubernetes:
1 2 3 4 |
$ curl -s https://packages.cloud.google.com/ ↵ apt/doc/apt-key.gpg | sudo apt-key add $ sudo vi /etc/apt/sources.list.d/kubernetes.list deb http://apt.kubernetes.io/ kubernetes-xenial main |
Устанавливаем пакеты:
1 2 |
$ sudo apt update $ sudo apt-get install -y kubelet kubeadm kubectl kubernetes-cni |
Устанавливаем автозагрузку сервиса:
1 |
$ sudo systemctl enable kubelet && sudo systemctl start kubelet |
Инициализируем мастер (см. рис. 1). Это делается всего одной командой:
1 2 3 4 |
$ kubeadm init Kubernetes master is running at https://localhost:6443 KubeDNS is running at https://localhost:6443/api/v1/proxy/ namespaces/kube-system/services/kube-dns |
Настройки в консоли производятся при помощи утилиты kubectl. Например, смотрим настройки и статус кластера:
1 2 3 |
$ kubectl cluster-info $ kubectl cluster-info dump $ kubectl get cs |
Устанавливаем add-on network, выбор зависит от ситуации, мы же используем один из самых популярных:
1 |
$ kubectl apply -f https://git.io/weave-kube |
После этого обязательно проверяем, что служба kubedns находится в рабочем состоянии:
1 |
$ kubectl get pods --all-namespaces | grep kube-dns |
Опционально устанавливаем веб-интерфейс. Все настройки прописаны в YAML-файле, и его нужно лишь активировать традиционным для K8S способом:
1 |
$ kubectl create -f https://rawgit.com/kubernetes/dashboard/master/src/deploy/kubernetes-dashboard.yaml |
Веб-интерфейс будет доступен на 8080-м порту: http://localhost:8080/api/v1/proxy/namespaces/kube-system/
services/kubernetes-dashboard. Для удобства его можно пробросить iptables или настроить прокси на этот адрес (не забыв закрыть доступ паролем, если он доступен извне).
Для управления кластером с другого комьютера необходимо установить kubectl и скачать файл /etc/kubernetes/admin.conf:
1 2 |
$ scp root@<master ip>:/etc/kubernetes/admin.conf . $ kubectl --kubeconfig ./admin.conf get nodes |
Еще важный момент. По причинам безопасности в настройках по умолчанию мастер вообще не запускает ноды, чтобы разрешить это, нужно выполнить команду:
1 |
$ kubectl taint nodes --all dedicated |
Подключаем minion. В процессе установки мастера будет получен токен, который используется в команде kubeadm join для подключения minion —token=4f539…0978. В качестве IP указывается адрес мастер сервера.
1 |
$ sudo kubeadm join --token=f539...0978 <master ip> |
Аналогично поступаем на остальных minion. Подключенные ноды на мастере можно увидеть командой:
1 |
$ kubectl get nodes |
Подробности (см. рис.):
1 |
$ kubectl describe nodes |
Установка, настройка и управления контейнерной виртуализацией, обращайтесь [email protected]