Связаться по:
vkarabedyants Telegram Viber
+7 (499) 350-10-69

Блог о системном администрировании серверов и сайтов

Установка, настройка программного обеспечения Linux, Windows операционных систем

Варианты установки Kubernetes

В предыдущей статье мы рассмотрели, что такое проект управления контейнерами Kubernetes, теперь рассмотрим, какие варианты установки используют DevOps администраторы.

В зависимости от задач установить Kubernetes можно разными способами. Нужно предупредить, что руководства в интернете работают не всегда, в первую очередь потому, что проект быстро развивается и многие вопросы давно упрощены.
Для локальной установки рекомендуется Minikube, реализующий однокластерную систему, используя системы виртуализации.
Другой вариант – использование исходных текстов мастер ветки  или bash-скрипт. В случае исходных текстов тоже есть варианты: можно установить систему или, распаковав архив, просто запустить ее в однокластеровом варианте (при остановке все данные теряются):

$ KUBE_ENABLE_CLUSTER_DNS=true API_HOST_IP=0.0.0.0 hack/local-up-cluster.sh

Перед этим понадобится установить Go (на нем написан K8S), etcd, cfssl и некоторые другие компоненты (баз настройки). Сам мастер кластер работает и с 2 Гб ОЗУ, но во время такого развертывания скрипт может потребовать больше памяти, даже на ПК с 8 Гб. В Linux это можно разрешить при помощи:

$ sudo sysctl -w vm.overcommit_memory=1
$ sudo sysctl -w vm.swappiness=1

Процесс установки из исходных текстов рассматривать не будем, развернем кластер из репозитория. В качестве ОС используем Ubuntu 16.04 LTS.

Установка Docker

Кроме специфических операций, о которых пойдет речь отдельно, все действия производятся на master и minion.
Обновляем систему:

$ sudo apt update
$ sudo apt upgrade

Устанавливаем Docker. Добавляем официальный репозиторий Docker:

$ 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

Обновляем список пакетов:

$ sudo apt update
$ apt-cache policy docker-engine
$ sudo apt install docker-engine

Здесь есть нюанс, о котором нужно знать. Текущая версия Kubernetes не поддерживает storage-driver = overlay2, и инициализация мастера в этом случае выдает ошибку.
А Docker 1.13 устанавливает именно в таком варианте, если обновлять с Docker 1.11+, то все нормально. Проверить текущие настройки Docker можно командой:

$ docker-engine info | grep -i storage
Storage Driver: aufs

Если в ответ получили overlay2, то нужно изменить параметры запуска Docker и перезапустить сервис:

DOCKER_OPTS="--storage-driver=aufs"

Вероятно, понадобится удалить подкаталог overlay. Устанавливаем дополнительные пакеты:

$ sudo apt-get install linux-image-extra-$(uname -r)

Разрешаем автозапуск сервиса при загрузке ОС:

$ sudo systemctl enable docker && sudo systemctl start docker

Чтобы выполнять команды Docker без привилегий администратора, добавляем текущего пользователя в группу docker:

$ sudo usermod -aG docker $USER

Устанавливаем Kubernetes

Самый простой и правильный способ развертывания боевого кластера – это использование из официального репозитория Google. На всех системах кластера (master + minion) добавляем репозиторий Kubernetes:

$ 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

Устанавливаем пакеты:

$ sudo apt update
$ sudo apt-get install -y kubelet kubeadm kubectl kubernetes-cni

Устанавливаем автозагрузку сервиса:

$ sudo systemctl enable kubelet && sudo systemctl start kubelet

Инициализируем мастер (см. рис. 1). Это делается всего одной командой:

$ 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

управление контейнерами docker

Настройки в консоли производятся при помощи утилиты kubectl. Например, смотрим настройки и статус кластера:

$ kubectl cluster-info
$ kubectl cluster-info dump
$ kubectl get cs

Устанавливаем add-on network, выбор зависит от ситуации, мы же используем один из самых популярных:

$ kubectl apply -f https://git.io/weave-kube

После этого обязательно проверяем, что служба kubedns находится в рабочем состоянии:

$ kubectl get pods --all-namespaces | grep kube-dns

Опционально устанавливаем веб-интерфейс. Все настройки прописаны в YAML-файле, и его нужно лишь активировать традиционным для K8S способом:

$ 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:

$ scp [email protected]<master ip>:/etc/kubernetes/admin.conf .
$ kubectl --kubeconfig ./admin.conf get nodes

Еще важный момент. По причинам безопасности в настройках по умолчанию мастер вообще не запускает ноды, чтобы разрешить это, нужно выполнить команду:

$ kubectl taint nodes --all dedicated

Подключаем minion. В процессе установки мастера будет получен токен, который используется в команде kubeadm join для подключения minion —token=4f539…0978. В качестве IP указывается адрес мастер сервера.

$ sudo kubeadm join --token=f539...0978 <master ip>

Аналогично поступаем на остальных minion. Подключенные ноды на мастере можно увидеть командой:

$ kubectl get nodes

Подробности (см. рис.):

$ kubectl describe nodes

настройка кластера управления контейнерами

Установка, настройка и управления контейнерной виртуализацией, обращайтесь [email protected]

Оставить комментарий

Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.