Kubernetes H/A Cluster Kurulumu

Kubernetes H/A Cluster Kurulumu

Bir çok farklı şekilde Kubernetes cluster'ı kurup ayağa kaldırabiliriz. Bu yazımda basit şekilde kubespray ile bare matal Kubernetes H/A cluster kurulumundan bahsedeceğim.

Öncelikle localimize ansible kurulumu yapıyoruz. Kurulumları yapmak için bir management sunucusuda kullanabilirsiniz.

MacOS

# brew install ansible

Centos 7

# sudo yum -y install epel-release
# sudo yum -y update
# sudo yum install ansible

Debian

# deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main
# sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367
# sudo apt update
# sudo apt install ansible

Ubuntu 18

# sudo apt-add-repository ppa:ansible/ansible
# sudo apt update
# sudo apt install ansible

Ansible kurulumu bitti şimdi cluster için 5 tane vm kuruyoruz. Öneri centos veya debian güncel sürümleri ve high availability için 3 master - (min) 2 worker node. Sonrasında bu sunuculara statik ip veriyoruz. Sunucular üzerinde manuel başka bir ayar yapmadan ansible ile otomatik kuruluma geçiyoruz.

Kubespray ile master nodelarımızın önüne external loadbalancer koyarak kurulumumuza devam edeceğiz, bu şart değil. Eğer koymazsak kubespray bizim için master nodelarımıza nginx proxy koymaktadır.

Örnek enviroment:

LoadBalancer - 192.168.4.62 (Master node'lar arasında load balance yapıyoruz.)

Master1 - 192.168.4.63

Master2 - 192.168.4.64

Master3 - 192.168.4.65

Worker1 - 192.168.4.66

Worker2 - 192.168.4.67

SSH Key'imiz yoksa aşağıdaki komut ile oluşturuyoruz.

# ssh-keygen

Master ve worker nodelara ssh-key'imizi kopyalıyoruz.

# ssh-copy-id 192.168.4.6X

Loadbalancer için 192.168.4.62  sunucumuza HAProxy kuruyoruz.

Centos 7

# yum install haproxy
# systemctl enable haproxy
# systemctl start haproxy

Debian

# sudo apt -y install haproxy 
# systemctl enable haproxy
# systemctl start haproxy

HAProxy conf'a aşağıdaki satırları giriyoruz.

# vim /etc/haproxy/haproxy.cfg

###
listen kubernetes-apiserver-https
  bind :8383
  mode tcp
  option log-health-checks
  timeout client 3h
  timeout server 3h
  server master1 192.168.4.63:6443 check check-ssl verify none inter 10000
  server master2 192.168.4.64:6443 check check-ssl verify none inter 10000
  server master3 192.168.4.65:6443 check check-ssl verify none inter 10000
  balance roundrobin
###

Loadbalancer kurulumu bitti şimdi localimize gitten kubespray'i çekiyoruz.

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

Gerekli python dependencilerini yüklüyoruz.

# sudo pip3 install -r requirements.txt

Cluster için inventory kopyalıyoruz.

# cp -rfp inventory/sample inventory/mycluster

Ansible inventorymize kurulum yapacağımız ip adreslerini ekliyoruz.

# declare -a IPS=(192.168.4.63 192.168.4.64 192.168.4.65 192.168.4.66 192.168.4.67)

Config file oluşturuyoruz.

# CONFIG_FILE=inventory/mycluster/hosts.yaml python3 contrib/inventory_builder/inventory.py ${IPS[@]}

Oluşturulan host.yml'ı düzenliyoruz. Örnek aşağıdaki gibidir.

# vim inventory/mycluster/hosts.yaml

###
hosts:
    master1:
      ansible_host: 192.168.4.63
      ip: 192.168.4.63
      access_ip: 192.168.4.63
    master2:
      ansible_host: 192.168.4.64
      ip: 192.168.4.64
      access_ip: 192.168.4.64
    master3:
      ansible_host: 192.168.4.65
      ip: 192.168.4.65
      access_ip: 192.168.4.65
    worker1:
      ansible_host: 192.168.4.66
      ip: 192.168.4.66
      access_ip: 192.168.4.66
    worker2:
      ansible_host: 192.168.4.67
      ip: 192.168.4.67
      access_ip: 192.168.4.67
  children:
    kube-master:
      hosts:
        master1:
        master2:
        master3:
    kube-node:
      hosts:
        worker1:
        worker2:
    etcd:
      hosts:
        master1:
        master2:
        master3:
    k8s-cluster:
      children:
        kube-master:
        kube-node:
    calico-rr:
      hosts: {}
###

Bu configden yola çıkarak, master 1,2,3 isimli nodelarımızı etcd içinde bulunduran control plane olarak kullanacağımızı ve sadece worker rolünde 2 adet node'umuz olacağınız söyleyebiliriz.

Group vars'a loadbalancer bilgilerimizi ekliyoruz.

# vim inventory/mycluster/group_vars/all/all.yml


#####
apiserver_loadbalancer_domain_name: "192.168.4.62"
loadbalancer_apiserver:
  address: 192.168.4.62
  port: 8383
#####

En son ansible ile kurulum komutu gönderiyoruz.

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

Kube config'i kopyalıyoruz.

# scp 192.168.4.63:/etc/kubernetes/admin.conf ~/.kube/config

Cluster'da nodeları listeliyoruz. Kurulum başarılı.

# kubectl get node

Kubespray ile Kubernetes H/A Cluster Kurulumu bu kadar. Sonrasında ingress controller kurulumu yapmak için Nginx Ingress Controller kurulumu başlıklı makalemizi inceleyebilirsiniz.

Yorum Yapın