Kubernetes – установка кластера через kubespray(от southbridge)

Thank you for reading this post, don't forget to subscribe! 
  1. Уста­нов­ка ingress отдель­но после уста­нов­ки кластера
  2. Уста­нов­ка ingress на worker ноды
  3. Вклю­че­ние basic аутен­ти­фи­ка­ции для dashboard

Пред­ва­ри­тель­но на ВСЕ ноды ставим
yum install sshpass
и пра­вим время:
rm -rf /etc/localtime && ln -s /usr/share/zoneinfo/Asia/Bishkek /etc/localtime && /usr/sbin/ntpdate -u pool.ntp.org && date

далее:
[root@ansible ~]# mkdir southbridge-kubespray
[root@ansible ~]# cd southbridge-kubespray/
[root@ansible southbridge-kubespray]# git clone https://github.com/southbridgeio/kubespray
[root@ansible southbridge-kubespray]# cd kubespray/
[root@ansible kubespray]# yum install -y ansible sshpass python-netaddr python2-jmespath python2-ruamel-yaml python-pip
[root@ansible kubespray]# pip install --upgrade jinja2

отме­тим сра­зу что Ingress-controller мы будет ста­вить отдель­но на масте­ра а не на отдель­ную тач­ку, поэто­му мы попра­вим зна­че­ния в инвен­то­ри файле:
inventory/s000/inventory.ini
и в addon:
inventory/s000/group_vars/k8s-cluster/addons.yml

[root@ansible kubespray]# cat inventory/s000/inventory.ini

 

поме­нять уста­нав­ли­ва­е­мую вер­сию кла­сте­ра мож­но в файле:
inventory/s000/group_vars/k8s-cluster/k8s-cluster.yml
переменная:
kube_version: v1.18.3

в этом же фай­ле меня­ем сете­вой пла­гин с:
kube_network_plugin: flannel
на
kube_network_plugin: calico

 

если всё же хоти­те исполь­зо­вать flannel то:

пра­вим файл:
group_vars/k8s-cluster/k8s-net-flannel.yml

В дан­ном слу­чае 10\\.1\\.4\\.\\d{1,3} это регу­ляр­ное выра­же­ние, кото­рое опи­сы­ва­ет под­сеть 10.1.4.0/24, в кото­рой у меня раз­ме­ще­ны вир­ту­аль­ные маши­ны под кла­стер. Если у вас под­сеть машин для кла­сте­ра, к при­ме­ру, 192.168.55.0, то регу­ляр­ка будет 192\\.168\\.55\\.\\d{1,3}

 

НО мы будем юзать calico

в этом же фай­ле меня­ем имя кла­сте­ра с:
cluster_name: s000.local
на
cluster_name: cluster.local

Что­бы отклю­чить авто­уста­нов­ку ingress-controller пере­во­дим в false сле­ду­ю­щие пара­мет­ры в файле:
inventory/s000/group_vars/k8s-cluster/addons.yml
ingress_nginx_enabled: false
ingress_nginx_host_network: false

всё, даль­ше пра­вим баш скрипт:

[root@ansible kubespray]# vim _deploy_cluster.sh

меня­ем строку:
ansible-playbook -u "$1" -i inventory/s000000/inventory.ini cluster.yml -b --diff
на
ansible-playbook -u "$1" $K -i inventory/s000/inventory.ini cluster.yml -b --diff --ask-pass

запус­ка­ем сле­ду­ю­щей командой:

[root@ansible kubespray]# bash _deploy_cluster.sh root

когда всё уста­но­вит­ся можем поста­вить ingress-controller командой:
[root@kub-master-201 ~]# kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.34.1/deploy/static/provider/baremetal/deploy.yaml

он поста­вит­ся на worker ноды

про­ве­ря­ем:

=========================================================

Вариант когда воркеры являются ингресами и на них могут запускаться поды.

[root@ansible ~]# mkdir southbridge-kubespray
[root@ansible ~]# cd southbridge-kubespray/
[root@ansible southbridge-kubespray]# git clone https://github.com/southbridgeio/kubespray
[root@ansible southbridge-kubespray]# cd kubespray/
[root@ansible kubespray]# yum install -y ansible sshpass python-netaddr python2-jmespath python2-ruamel-yaml python-pip
[root@ansible kubespray]# pip install --upgrade jinja2

 

[root@ansible kubespray]# cat inventory/s000/inventory.ini

 

 

поме­нять уста­нав­ли­ва­е­мую вер­сию кла­сте­ра мож­но в файле:
inventory/s000/group_vars/k8s-cluster/k8s-cluster.yml
переменная:
kube_version: v1.18.3

в этом же фай­ле меня­ем сете­вой пла­гин с:
kube_network_plugin: flannel
на
kube_network_plugin: calico

 

если всё же хоти­те исполь­зо­вать flannel то:

пра­вим файл:
group_vars/k8s-cluster/k8s-net-flannel.yml

В дан­ном слу­чае 10\\.1\\.4\\.\\d{1,3} это регу­ляр­ное выра­же­ние, кото­рое опи­сы­ва­ет под­сеть 10.1.4.0/24, в кото­рой у меня раз­ме­ще­ны вир­ту­аль­ные маши­ны под кла­стер. Если у вас под­сеть машин для кла­сте­ра, к при­ме­ру, 192.168.55.0, то регу­ляр­ка будет 192\\.168\\.55\\.\\d{1,3}

 

НО мы будем юзать calico

 

 

в этом же фай­ле меня­ем имя кла­сте­ра с:
cluster_name: s000.local
на
cluster_name: cluster.local

ком­мен­ти­ру­ем taint

[root@ansible kubespray]# cat inventory/s000/group_vars/kube-ingress.yml

 

[/codesyntax]

пра­вим:
inventory/s000/group_vars/k8s-cluster/addons.yml

а имен­но ком­мен­ти­ру­ем для nginx ingress сле­ду­ю­щие строки:

 

 

на все ноды ста­вим пакет sshpass
[root@kubermaster-1 ~]# yum install -y sshpass
[root@kubermaster-2 ~]# yum install -y sshpass
[root@kubermaster-3 ~]# yum install -y sshpass
[root@kuberworker-1 ~]# yum install -y sshpass

запус­кать будем с скрипта

[root@ansible kubespray]# cat _deploy_cluster.sh

 

 

[root@ansible kubespray]# bash _deploy_cluster.sh root

ждём когда всё поста­вит­ся и проверяем:

 

 

как видим наш вор­кер отоб­ра­жа­ет­ся как ingress и на нём могут запус­кать­ся поды.

 

3. Включение basic аутентификации для dashboard

После уста­нов­ки через kubespray настро­им dashboard и настро­им basic аутентификацию

 

 

 

Пра­вим

kubectl -n kube-system edit deployments.apps kubernetes-dashboard

В пере­чис­ле­нии agrs добавляем
 - --authentication-mode=basic

Нахо­дим

 

 

 

сра­зу пра­вим тут:
Можем попра­вить сра­зу тут:
/etc/kubernetes/dashboard.yml
в том же месте добав­ля­ем ту же строку

Созда­ём ingress

cat ingress-dashboard.yml

 

 

при­ме­ня­ем его:
kubectl apply -f ingress-dashboard.yml

На всех масте­рах созда­ём файл для аутентификации
mkdir /etc/kubernetes/basic-user-auth/

cat /etc/kubernetes/basic-user-auth/users.csv
UeALRowpoh12Dpassword123,kube,admin,"system:masters"

На всех масте­рах пра­вим файл:
vim /etc/kubernetes/manifests/kube-apiserver.manifest

а имен­но добав­ля­ем - --basic-auth-file=

 

 

и

 

[/codesyntax]

и

 

 

Всё гото­во, ниче­го пере­за­пус­кать не нужно.

Панель будет доступ­на по адресу:
https://dashboard.prod.test.local/