Разворачивание кластера Kubernetes
Для установки и настройки сервера отчётов необходимо развёрнуть облачную экосистему Kubernetes.
Для корректной работы МоиОтчеты Корпоративный Сервер необходимо минимум три узла - один master узел и два worker узла. В процессе работ количество узлов может быть увеличено при росте нагрузки. Так же количество узлов может быть уменьшено при снижении нагрузки. Динамическое управление количеством узлов в настоящее время не реализовано.
Подготовка и установка компонентов Kubernetes
Установка Kubernetes осуществляется последовательным выполнением следующих bash скриптов. Эти примеры подразумевают операционную систему Debian Linux. В случае использования другого дистрибутива некоторые пункты будут отличаться. Например, для разворачивания кластера в системе Alt Linux Server, использовалась документация со страницы www.altlinux.org/Kubernetes, которой будет достаточно для установки Kubernetes, описанной в этой разделе.
- Отключение раздела swap.
#
# Permanatly disable swap
#
sed -e '/swap/s/^/#/g' -i /etc/fstab
swapoff -a
- Загрузка необходимых модулей ядра.
#
# 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
- Настройка сетевых свойств ядра системы.
#
# Confugre 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
- Установка дополнительного программного обеспечения, которое потребуется для установки оркестратора и сервера отчётов.
apt-get update
#
# Install prerequested 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
- Установка 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
- Установка компонентов 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.