Rate this post

В предыдущей статье мы рассмотрели, что такое проект управления контейнерами 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

управление контейнерами dockernnНастройки в консоли производятся при помощи утилиты 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

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

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