Содержание

Kubernetes: Kubespray установка кластера

Создаем сервера на основе Ubuntu 20.04

Отключаем iptables (ufw, netfilter-persistent), apparmor

Сгенерировать, если его ещё нет, ssh ключ:

ssh-keygen

Установить ssh ключ на машины кластера.

ssh-copy-id master1
ssh-copy-id master2
ssh-copy-id master3
ssh-copy-id worker1
ssh-copy-id worker2
ssh-copy-id worker3

Kubespray

git clone https://github.com/kubernetes-sigs/kubespray/
cd kubespray/inventory
cp -r sample cluster
cd cluster

Параметры кластера в файлах kubespray

Перейдите в директорию inventory.

Скопируйте пример конфигурации кластера sample в cluster.

Перейдите в директорию cluster и отредактируйте файл inventory.ini

Пример файла:

[all]
master1.server.local ansible_host=10.1.0.1 ansible_user=root
master2.server.local ansible_host=10.1.0.2 ansible_user=root
master3.server.local ansible_host=10.1.0.3 ansible_user=root
worker1.server.local ansible_host=10.1.0.4 ansible_user=root
worker2.server.local ansible_host=10.1.0.5 ansible_user=root
worker3.server.local ansible_host=10.1.0.6 ansible_user=root

[kube_control_plane]
master1.server.local
master2.server.local
master3.server.local

[etcd]
master1.server.local
master2.server.local
master3.server.local

[kube_node]
worker1.server.local
worker2.server.local
worker3.server.local

[calico_rr]

[k8s-cluster:children]
kube_control_plane
kube_node
calico_rr

Остальные параметры будем изменять в файлах в директории group_vars.

group_vars/k8s-cluster/k8s-cluster.yml

group_vars/k8s-cluster/k8s-net-calico.yml

group_vars/k8s-cluster/addons.yml

для использования type:LoadBalancer и при отсутствии аннотаций балансировщиков, предлагаемых провайдером, используем MetalLB в режиме layer2 https://metallb.universe.tf/concepts/layer2/ В этом случае очень много ньюансов установки, для некоторых провайдеров понадобится отключение режима контроля источника iptables, где-то необходимо будет на маршрутизатора править настройки и т.д. Поэтому установка MetalLB сугубо опциональна.

group_vars/all/all.yml

Продолжаем

Переходим в корень kubespray и запускаем установку кластера. Для этого в системе должны быть установлены интерпретатор python и pip.

pip install -r requirements.txt
ansible-playbook -i inventory/cluster/inventory.ini cluster.yml

После установки на ноде master1 можно посмотреть состояние кластера.

kubectl get nodes -o wide
NAME                     STATUS   ROLES                  AGE   VERSION   INTERNAL-IP       EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION
master1.server.local    Ready    master1,master         25m   v1.20.2     10.1.0.1         <none>        CentOS Linux 7 (Core)   3.10.0-1160.11.1.el7.x86_64
master2.server.local    Ready    master2,master         25m   v1.20.2     10.1.0.2         <none>        CentOS Linux 7 (Core)   3.10.0-1160.11.1.el7.x86_64
master3.server.local    Ready    master3,master         24m   v1.20.2     10.1.0.3         <none>        CentOS Linux 7 (Core)   3.10.0-1160.11.1.el7.x86_64
worker1.server.local    Ready    <none>                 22m   v1.20.2     10.1.0.4         <none>        CentOS Linux 7 (Core)   3.10.0-1160.11.1.el7.x86_64
worker2.server.local    Ready    <none>                 22m   v1.20.2     10.1.0.5         <none>        CentOS Linux 7 (Core)   3.10.0-1160.11.1.el7.x86_64
worker3.server.local    Ready    <none>                 13m   v1.20.2     10.1.0.6         <none>        CentOS Linux 7 (Core)   3.10.0-1160.11.1.el7.x86_64

Для просмотра контейнеров на ноде, используем docker

docker ps
IMAGE               CREATED             STATE               NAME                      ATTEMPT             POD ID
43154ddb57a83       15 minutes ago      Running             kube-proxy                0                   a5bda83433ae1
ed2c44fbdd78b       15 minutes ago      Running             kube-scheduler            0                   512d577e92ad5
a27166429d98e       15 minutes ago      Running             kube-controller-manager   0                   4f6fa61c307dc
90f9d984ec9a3       23 minutes ago      Running             node-cache                0                   f7d86f788f4eb
cb12d94b194b3       23 minutes ago      Running             calico-node               0                   794808481e7ae
a8c2fdb8bf76e       26 minutes ago      Running             kube-apiserver            0                   55baeed8da067
d1985d4043858       26 minutes ago      Running             etcd                      0                   b43a297393ef9

kubectl get pods --all-namespaces
POD ID              CREATED             STATE               NAME                                             NAMESPACE           ATTEMPT             RUNTIME
a5bda83433ae1       15 minutes ago      Ready               kube-proxy-xbqkc                                kube-system         0                   (default)
512d577e92ad5       15 minutes ago      Ready               kube-scheduler-control1.server.local            kube-system         0                   (default)
4f6fa61c307dc       15 minutes ago      Ready               kube-controller-manager-control1.server.local   kube-system         0                   (default)
f7d86f788f4eb       23 minutes ago      Ready               nodelocaldns-szggp                              kube-system         0                   (default)
794808481e7ae       23 minutes ago      Ready               calico-node-kxlpj                               kube-system         0                   (default)
55baeed8da067       27 minutes ago      Ready               kube-apiserver-control1.server.local            kube-system         0                   (default)
b43a297393ef9       27 minutes ago      Ready               etcd-control1.server.local                      kube-system         0                   (default)

Установите в bash автодополнение для команд kubectl:

source <(kubectl completion bash)
echo "source <(kubectl completion bash)">> ~/.bashrc