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