Klaster Kubernetesa z użyciem Kubespray i Ansible

Klaster Kubernetesa z użyciem Kubespray i Ansible

W tym artykule pokażę Ci w jaki sposób zestawić klaster kubernetesa z użyciem kubespray. Potrzebujemy 3 maszyny wirtualne VPS:

  • maszyna master node,
  • maszyna worker node,
  • maszyna ansible node.

Na początek trochę teorii:

Czym jest Ansible:

Ansible to oprogramowanie do zarządzania stanem infrastruktury oraz do automatyzacji procesów administracyjnych.

Czym jest Kubespray:

Kuberspray to Ansible + Kubernetes co oznacza, że klaster Kubernetesa może być zestawiony z użyciem Ansible.

Generujemy klucz SSH na maszynie ansible node. Do maszyny master node oraz worker node należy owy klucz skopiować. Operacja ta pozwoli na logowanie się do wszystkich maszyn do których został skopiowany klucz SSH bez podawania loginu i hasła.

– Maszyna ansible node:

ssh-keygen -t rsa

otrzymamy efekt podobny do:

The key's randomart image is:
+---[RSA 2048]----+
|     + o         |
|    E X =        |
|   . = @ o    .  |
|    + O = .  +   |
|   o = =S+... o  |
|    . + *oo.o .. |
|       ..*.  *o. |
|        ...   B+.|
|         .   . =+|
+----[SHA256]-----+
ssh-copy-id -i ~/.ssh/id_rsa.pub login@ip
ssh-copy-id -i ~/.ssh/id_rsa.pub login@ip

Operacje te pozwolą na logowanie się do maszyn worker node oraz master node z poziomu maszyny ansible node bez konieczności podawania loginu i hasła.

Instalacja Pythona:

sudo apt-get update
sudo apt install python3-pip
sudo apt install python

weryfikacja:

python -V

wynik:

Python 2.7.17

weryfikacja:

pip3 -V

wynik:

pip 9.0.1 from /usr/lib/python3/dist-packages (python 3.6)

Pobranie kubespray:

git clone https://github.com/kubernetes-sigs/kubespray.git
cd kubespray
sudo pip3 install -r requirements.txt

wynik:

Successfully installed ansible-2.9.18 cffi-1.14.5 cryptography-2.8 jinja2-2.11.3 jmespath-0.9.5 netaddr-0.7.19 pbr-5.4.4 pycparser-2.20 ruamel.yaml-0.16.10 ruamel.yaml.clib-0.2.2

Skopiowanie pliku inventory:

cp -rfp inventory/sample inventory/mycluster

Deklaracja pliku hosts:

declare -a IPS=(ip_master_node ip_worker_node)
CONFIG_FILE=inventory/mycluster/hosts.yml python3 contrib/inventory_builder/inventory.py ${IPS[@]}

Weryfikacja pliku hosts:

cat inventory/mycluster/hosts.yml
  • ważne aby:

node1 to był master

node2 to był worker

children:
    kube_control_plane:
      hosts:
        node1:
    kube-node:
      hosts:
        node2:

Ansible PlayBook:

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

– Maszyna master node:

Instalacja kubectl:

curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/linux/amd64/kubectl

Skopiowanie pliku konfiguracyjnego:

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

weryfikacja:

kubectl version

Wgranie przykładowej aplikacji z obrazu:

kubectl create deployment app --image=mwarycha/docker-app:latest
kubectl expose deployment app --type=LoadBalancer --name=docker-app --external-ip=1.1.1.1 --port=8080

Poniższa komenda potrzebna jest do pobrania zmiennych środowiskowych co pozwoli odczytać np. do którego poda trafił dany request:

kubectl create clusterrolebinding default-admin --clusterrole cluster-admin --serviceaccount=default:default

Leave a comment

Your email address will not be published.


*