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