Установка Kubernetes


Kubernetes — это решение для автоматического развёртывания, масштабирования и координации контейнеров приложений в условиях кластера на большинстве популярных Linux-based операционных систем. Кубернетис поддерживает основные технологии контейнеризации, отлично сочетается с Docker. С помощью этой платформы удобно системно группировать контейнеры, балансировать нагрузку и активировать задачи одновременно из большого количества приложений.

Создание и использование Kubernetes-кластера может понадобиться крупным компаниям, которые работают с Big Data, и разработчикам, которым для полноценной работы требуется крупная, хорошо управляемая производственная среда. Инфраструктурная платформа на основе Kubernetes подходит масштабным проектам, в которых поддерживается версионность, проводится тестирование новых приложений, а для создания продукта используются разные компоненты. Kubernetes требователен к приложениям, с которыми работает — они должны функционировать строго по принципу микросервисов. Так как Кубернетис расходует много ресурсов, запускать его в небольших проектах нерационально.

Системные требования и подготовка к установке Kubernetes

Kubernetes можно установить с помощью готового инструмента или самостоятельно, добавляя каждый компонент архитектуры вручную. Выделим три основных способа установки Kubernetes:

  • Minikube — готовый кластер, который разворачивается на локальном устройстве (например, компьютере разработчика). Если вы хотите познакомиться с Kubernetes, стоит начать с этого варианта, поскольку он позволяет изучать всю экосистему и ставить локальные эксперименты.
  • Kubespray — набор Ansible ролей для установки и конфигурации системы оркестрации контейнерами Kubernetes. С его помощью можно быстро развернуть высокодоступный кластер Kubernetes на облачной платформе провайдеров, OpenStack, vSphere, Packet (bare metal) или голом железе.
  • Готовый кластер в облаке. Например Кубернетис от Cloud4Y.

Важно помнить, что при автоматической установке от вас понадобится минимум внимания, зато нужно будет позаботиться о достаточном объёме ресурсов, что обеспечивает бесперебойную работу платформы. Минимальный набор при небольшом количестве контейнеров и простой взаимосвязи предполагает наличие пары виртуальных машин с 1-2 CPU и 2-4 Гб RAM, которые будут выполнять функции мастер-ноды и рабочей ноды. А если есть планы позднее создать рабочий кластер, то можно добавить и ingress ноду с 1 CPU и 2 Гб RAM.

Установка кластера

Итак, предположим, что у нас есть что есть несколько серверов под управлением Ubuntu или CentOS. Прежде всего устанавливаем docker на каждом из серверов. Для установки рекомендуемой версии для Ubuntu выполните команду:

apt-get update

apt-get install -y docker.io

Для установки свежей версии докера используйте следующие команды:

apt-get update

apt-get install -y \

    apt-transport-https \

    ca-certificates \

    curl \

    software-properties-common

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -

add-apt-repository \

   "deb https://download.docker.com/linux/ $(. /etc/os-release; echo "$ID") \

   $(lsb_release -cs) \

   stable"

apt-get update && apt-get install -y docker-ce=$(apt-cache madison docker-ce | grep 17.03 | head -1 | awk '{print $3}')

Вы также можете использовать официальное руководство по установке Docker, которое выложено на официальном сайте разработчика.

Установка Docker в ОС CentOS тоже выглядит стандартно:

yum install -y docker
systemctl enable docker && systemctl start docker

Docker установлен. Следующим этапом будет установка всех компонент, необходимых для создания и управления кластером Kubernetes.

  • Kubelet — сервис для контроля работоспособности подов. Используется на каждом узле кластера.

  • Kubeadm — компонента для управления кластером.

  • Kubectl — компонента для отправки команд кластеру.

В Ubuntu установка выполняется командой:

apt-get update && apt-get install -y apt-transport-https

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -

cat <<EOF >/etc/apt/sources.list.d/kubernetes.list

deb http://apt.kubernetes.io/ kubernetes-xenial main

EOF

apt-get update

apt-get install -y kubelet kubeadm kubectl

Если вы хотите запретить обновление установленных компонентов в целях безопасности, используйте команду:

apt-mark hold kubelet kubeadm kubectl

Для CentOS:

cat <<EOF > /etc/yum.repos.d/kubernetes.repo

[kubernetes]

name=Kubernetes

baseurl= https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64

enabled=1

gpgcheck=1

repo_gpgcheck=1

gpgkey= https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg

EOF

setenforce 0

yum install -y kubelet kubeadm kubectl

systemctl enable kubelet && systemctl start kubelet

Команда setenforce 0 рекомендуется для обеспечения корректного доступа контейнеров к файловой системе хоста. Благодаря отключению SELinux начинает нормально работать сеть у подов.

Если после выполнения команд нет ошибок, приступайте к настройке платформы. Вам нужно инициализировать кластер, создать Container Network Interface (CNI), добавить узлы нод и получить токен для авторизации. Организовать сеть в кластере нам поможет программно-определяемая сеть (SDN) Flannel.

Выберите один из серверов, который будет мастером и инициализируйте кластер командой:

kubeadm init --pod-network-cidr=10.244.0.0/16

Ключ --pod-network-cidr=10.244.0.0/16 позволяет выбрать нужный сетевой плагин. Значение параметра может меняться в зависимости от выбранного провайдера.

Если при выполнении команды в консоли появились ошибки, их нужно обязательно устранить. Предупреждения (warning) можно игнорировать, если это не production-окружение. Если всё сделано правильно, на экране вы увидите команду для присоединения остальных нод кластера к мастеру. Сохраните её куда-нибудь.

В случае успеха на экран будет выведена команда для присоединения остальных нод кластера к мастеру - скопируйте и сохраните ее. Результат команды будет примерно следующим:

...

Your Kubernetes master has initialized successfully!


To start using your cluster, you need to run (as a regular user):

 

mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config


You should now deploy a pod network to the cluster.

Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:

http://kubernetes.io/docs/admin/addons/


You can now join any number of machines by running the following on each node

as root:

kubeadm join --token <token> <master-ip>:<master-port> --discovery-token-ca-cert-hash sha256:<hash>

Работать с кластером мы будем под обычным непривилегированным пользователем. От лица отдельного пользователя (не под рутом) выполните команду:

mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config

Контейнеры на мастер-ноде изначально не запускаются, мастер по умолчанию следит только за состоянием кластера и размещает ресурсы. Чтобы разрешить запуск контейнеров на мастере, выполните команду:

kubectl taint nodes --all node-role.kubernetes.io/master-

Перед тем, как запускать приложения, необходимо настроить сеть с поддержкой CNI. Чтобы избавить себя от рутины ручного ввода команд, используйте плагин. В данном примере мы выберем Flannel, но можно использовать и другие (Weave Net, Calico). Обратите внимание, что в кластере может быть только одна сеть для подов.

Установка Flannel выполняется командой:

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

С помощью приведённой ниже команды вы можете убедиться, что кластер запущен и корректно работает:

kubectl -n kube-system get pods

Добавление нод

Теперь можно добавлять ноды в существующий кластер. Для этого требуется SSH подключение к серверу и наличие модулей Docker, Kubelet, Kubeadm. Выполните команду

kubeadm join --token <token> <control-plane-host>:<control-plane-port> --discovery-token-ca-cert-hash sha256:<hash>

Остаётся получить токен авторизации кластера. При сохранившемся подключении по SSH повторно заходить на сервер не требуется. После ввода команды:

kubeadm token list

Вы получите токен, который по умолчанию действует 24 часа. Чтобы добавить новый узел по завершении периода, нужно создать новый токен командой:

kubeadm token create

Посмотрите список всех запущенных подов.

# kubectl get pod –A

Все должны быть в состоянии Running. Если нет — ищите ошибку. На этом систему можно признать готовой к эксплуатации.

Kubernetes в облаке (KaaS)

Чтобы упростить себе задачу и получить надёжную масштабируемую инфраструктуру виртуальных машин на базе VMware, совместимую с Kubernetes, можно обратиться к провайдеру Cloud4Y. Облачный подход к оркестрации контейнеров позволяет легко и быстро развернуть платформу автоматизации, создавать и работать в Kubernetes кластерах, вести разработку в производительной и стабильной среде.

Для развёртывания и управления кластерами провайдер использует Container Service Extension (CSE), который поддерживает основные технологии контейнеризации, включая Docker. CSE позволяет работать с Kubernetes в VMware Cloud Director через создание шаблонов виртуальных машин и позволяет организациям развернуть полноценные кластеры для контейнированных приложений.

Cloud4Y делает работу c Kubernetes в облаке проще и доступнее. Решение не требует глубоких знаний VMware Cloud Director, вы без труда можете автоматизировать управление жизненным циклом приложений (от развёртывания до остановки). Решение сокращает время установки Kubernetes с нескольких дней до 15 минут.


поделиться: 
(0)
автор: Денис Генералов
опубликовано: 26.10.2021
Читайте нас: 
Вверх!