Table of Contents

Разворачивание кластера Kubernetes

Продукты: МоиОтчеты Корпоративный Сервер

Для установки и настройки сервера отчётов необходимо развернуть облачную экосистему Kubernetes.

Для корректной работы МоиОтчеты Корпоративный Сервер необходимо минимум три узла - один master узел и два worker узла. В процессе работ количество узлов может быть увеличено при росте нагрузки. Так же количество узлов может быть уменьшено при снижении нагрузки. Динамическое управление количеством узлов в настоящее время не реализовано.

Видео установки Корпоративного Сервера

Подготовка и установка компонентов Kubernetes

Установка Kubernetes осуществляется последовательным выполнением следующих bash скриптов. Эти примеры подразумевают операционную систему Debian Linux. В случае использования другого дистрибутива некоторые пункты будут отличаться. Например, для разворачивания кластера в системе Alt Linux Server, использовалась документация со страницы www.altlinux.org/Kubernetes, которой будет достаточно для установки Kubernetes, описанной в этой разделе.

  1. Отключение раздела swap.
#
# Permanently disable swap
#
sed -e '/swap/s/^/#/g' -i /etc/fstab
swapoff -a
  1. Загрузка необходимых модулей ядра.
#
# Enable kernel modules
#
MODULES=/etc/modules-load.d/k8s.conf
if [ ! -f $MODULES ]; then 
   echo "Create $MODULES"
   cat<<EOF | tee $MODULES
overlay
br_netfilter
EOF
fi
  1. Настройка сетевых свойств ядра системы.
#
# Configure kernel
#
SYSCTL=/etc/sysctl.d/k8s.conf
if [ ! -f $SYSCTL ]; then
    echo "Prepare kernel options"
    cat<<EOF | tee $SYSCTL
net.bridge.bridge-nf-call-iptables  = 1
net.ipv4.ip_forward                 = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF
fi
sysctl --system
  1. Установка дополнительного программного обеспечения, которое потребуется для установки оркестратора и сервера отчётов.
apt-get update

#
# Install pre-requested packages
#
prerequest=( curl sudo gnupg2 apt-transport-https ca-certificates software-properties-common )

for package in "${prerequest[@]}"
do
    echo -n "Checking $package: "
    dpkg -s $package > /dev/null 2> /dev/null
    if [ $? -ne 0 ]; then
        echo "Installing"
        apt-get install -y $package
    else
        echo "OK"
    fi
done
  1. Установка Container Runtime Interface (CRI).

Следующий пример использует CRI containerd. Различные версии Kubernetes и Linux могут потребовать установки CRI-O. Kubernetes использует CRI для загрузки контейнеров, управления контейнерами и для запуска процессов в этих контейнерах.

## Add Docker's official GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key --keyring /etc/apt/trusted.gpg.d/docker.gpg add -

## Add Docker apt repository.
add-apt-repository \
    "deb [arch=amd64] https://download.docker.com/linux/debian \
    $(lsb_release -cs) \
    stable"

## Install containerd
apt-get update && apt-get install -y containerd.io

# Configure containerd
if [ ! -d /etc/containerd ]; then
  mkdir -p /etc/containerd
fi

# Remove default config to avoid errors
if [ -f /etc/containerd/config.toml ]; then
  rm /etc/containerd/config.toml
fi

# Restart containerd
systemctl restart containerd
  1. Установка компонентов Kubernetes.
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF | tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
apt-get update
apt-get install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl

Старт Kubernetes

Для старта главного узла кластера отредактируйте 3 переменные, отвечающие за соответствующие им пути к конфигурационному файлу (он будет создан автоматически), IP адресу (будет доступен извне) и маску внутренней подсети.

Затем выполните команду инициализации кластера.

export KUBECONFIG=/etc/kubernetes/admin.conf1
export MAIN_IF=192.168.1.191 
export POD_NETWORK=10.244.0.0/16  # В случае использования flannel это значение менять нельзя!

kubeadm init --pod-network-cidr=$POD_NETWORK --apiserver-advertise-address=$MAIN_IF

Адрес MAIN_IF это IP-адрес главного узла кластера (master node). Адрес может быть реальным IP- адресом или адресом подсети 192.168.

В случае успешного выполнения инициализации главного узла кластера (master node), на экран будет выведена строка, с помощью которой инициализируются рабочие узлы кластера. С помощью мыши скопируйте эту строку и сохраните её в файл. В этой строке содержится команда для инициализации рабочих узлов. Команда включает в себя секретный ключ. При попадании этого ключа злоумышленнику, он может "скомпрометировать" кластер.

Пример строки:

kubeadm join 192.168.1.191:6443 --token lw0lgz.d5zy9fb4jikc89yv \
        --discovery-token-ca-cert-hash sha256:ba83ed75e9fd5f4300070000000000000039e1d05c7915a54435faaa7fe62b77

Для добавления узла в кластер выполните действия, описанные в предыдущем разделе (за исключением установки helm chart), скопируйте на каждый узел эту строку и выполните её от имени администратора (root). В результате выполнения этой команды в кластер будет добавлен новый узел.

Настройка kubectl.

mkdir ~/.kube
rm ~/.kube/config
cp /etc/kubernetes/admin.conf ~/.kube

Теперь необходимо установить сервис flannel.

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

В случае успешной установки вывод команды kubectl get pods --all-namespaces должен выглядеть примерно так:

NAMESPACE     NAME                                    READY   STATUS    RESTARTS   AGE
kube-system   coredns-78fcd69978-brp76                1/1     Running   0          5m13s
kube-system   coredns-78fcd69978-shdv5                1/1     Running   0          5m13s
kube-system   etcd-altlinux-10-1                      1/1     Running   0          5m27s
kube-system   kube-apiserver-altlinux-10-1            1/1     Running   0          5m22s
kube-system   kube-controller-manager-altlinux-10-1   1/1     Running   0          5m31s
kube-system   kube-flannel-ds-7nn2c                   1/1     Running   0          28s
kube-system   kube-flannel-ds-9phgs                   1/1     Running   0          28s
kube-system   kube-flannel-ds-ddcw6                   1/1     Running   0          28s
kube-system   kube-proxy-74pll                        1/1     Running   0          3m36s
kube-system   kube-proxy-82nld                        1/1     Running   0          3m15s
kube-system   kube-proxy-njxwv                        1/1     Running   0          5m14s
kube-system   kube-scheduler-altlinux-10-1            1/1     Running   0          5m32s

В случае, если все шаги по установке были сделаны верно, то состояние из примера выше, будет достигнуто в течение минуты. Кластеру необходимо время чтобы запустить и сконфигурировать coredns после установки flannel.