На всех машинах, где будет установлен кластер kubernetes, необходимо:
- Отключить swap.
- Отключить firewall.
- Отключить selinux.
- Настроить параметры ядра.
- Установить приложения.
По поводу selinux. Его можно не отключать, kubernetes и система управления контейнерами умеет его использовать.
В файле /etc/fstab
закоментируйте строку, определяющую подключение swap пространства.
swapoff -a
systemctl stop firewalld
systemctl disable firewalld
Убедитесь, что в фаерволе нет правил и установлены политики по умолчанию ACCEPT:
iptables -L -n
iptables -t nat -L -n
iptables -t mangle -L -n
iptables -t raw -L -n
В файле /etc/selinux/config
установите значение переменной SELINUX
в disabled
или, если в дальнейшем
захотите настроить правила selinux, в permissive
.
setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
Сначала загрузите модуль br_netfilter
:
modprobe br_netfilter
Затем добавьте файл /etc/modules-load.d/modules-kubernetes.conf
:
br_netfilter
В файл /etc/sysctl.conf
добавтье следующие строки:
net.ipv4.ip_forward=1
net.bridge.bridge-nf-call-iptables=1
net.ipv4.ip_nonlocal_bind=1
Если планируете использовать сети ipv6, добавьте строку:
net.bridge.bridge-nf-call-ip6tables=1
Добавляем репозиторий kubernetes. Для этого создаём файл /etc/yum.repos.d/kubernetes.repo
:
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
async = 1
enabled=1
baseurl = https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
gpgcheck = 1
gpgkey = https://packages.cloud.google.com/yum/doc/yum-key.gpg
https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
name = Base programs for k8s
EOF
Приложения устанавливаем, но не запускаем!
Обязательные:
- bash-completion
- python3
- tar
- containerd
- nfs-utils
- chrony
- kubectl
- kubelet
- kubeadm
dnf install -y bash-completion python3 tar containerd nfs-utils chrony kubectl kubelet kubeadm
Не обязательные:
- mc
- vim
- git
- rsyslog
- jq
dnf install -y mc vim git rsyslog jq
Включаем NTP. Синхронизация времени на серверах кластера обязательна. Если её не включить возможны проблемы с сертификатами.
systemctl enable chronyd
systemctl start chronyd
systemctl status chronyd
Опционально включаем систему логирования rsyslog. Я предпочитаю смотреть текстовые логфайлы классического syslog, а не копаться в бинарниках systemd. Да и потом логи системы будет легче собирать.
systemctl enable rsyslog
systemctl start rsyslog
systemctl status rsyslog
Система контейнеризации containerd.
systemctl enable containerd
systemctl start containerd
systemctl status containerd
Добавим конфигурационный файл /etc/crictl.yaml
для приложения управления контейнерами
crictl:
runtime-endpoint: "unix:///run/containerd/containerd.sock"
image-endpoint: "unix:///run/containerd/containerd.sock"
timeout: 0
debug: false
pull-image-on-create: false
disable-pull-on-run: false
Проверим работоспособность утилиты:
crictl images
crictl ps -a
Ещё одни интересный документ про crictl
Ansible prepare-hosts.yaml