#10 DevOps. Kubernetes. Как установить Kubernetes с помощью KubeSpray

Создадим 4 виртуальные машины на Debian 12

Мы будем устанавливать все с отдельной машины, представим, что это наш рабочий ПК

Настроим подключение по ключу с нашей машины до серверов 

sudo yum -y install openssh-server openssh-clients

ssh-keygen -b 4096 -a 15

cat ~/.ssh/id_rsa.pub | ssh root@ip_address_server 'cat >> ~/.ssh/authorized_keys'

Проверим

ssh root@ip_address_server

На всех ВМ

sudo apt update -y && sudo apt upgrade -y

Клонируем kubespray

git clone https://github.com/kubernetes-sigs/kubespray.git

Установим Ansible

VENVDIR=kubespray-venv
KUBESPRAYDIR=kubespray
python3 -m venv $VENVDIR
source $VENVDIR/bin/activate
cd $KUBESPRAYDIR
pip install -U -r requirements.txt

Перейдем к Kubespray

cp -rfp inventory/sample inventory/mycluster

declare -a IPS=(10.10.1.10 10.10.1.20 10.10.1.30 10.10.1.40) // здесь ip адреса ваших виртуальных машин
CONFIG_FILE=inventory/mycluster/hosts.yaml python3 contrib/inventory_builder/inventory.py ${IPS[@]} 

cat inventory/mycluster/group_vars/all/all.yml
cat inventory/mycluster/group_vars/k8s_cluster/k8s-cluster.yml 

// если после команды ниже появляется ошибка ssh, проверяем, что не так с ключами и т.д., например пробуем из под root

// если нужно очистить старый кластер

ansible-playbook -i inventory/mycluster/hosts.yaml  --become --become-user=root reset.yml 

// если ВМ чистые, запускаем сразу команду ниже

ansible-playbook -i inventory/mycluster/hosts.yaml  --become --become-user=root cluster.yml 

Здесь придется подождать

Проверим на master ноде

kubectl cluster-info
kubectl get nodes
kubectl get pods --all-namespaces

// если под пользователем появляется ошибка вида couldn't get current server API group list

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

Запустим nginx

kubectl create deployment nginx --image=nginx

kubectl get deployments

kubectl describe deployment nginx 

kubectl create service nodeport nginx --tcp=80:80

kubectl get svc

Проверим

ip_address:31700 // у вас будет другой порт

Завершим

kubectl delete deployment nginx

kubectl get deployments