Bu makale ile uzun bir maratona başlıyoruz. Hazır olun… Kubernetes… İlk bölümlerde kurulumlara başlıyoruz.
Aşağıda paylaşacağım detaylar 1 master, 2 worker olmak üzere 3 node Kubernetes kurulumunu anlatmaktadır. Kurulum adımlarını tüm node’lar ve master node olmak üzere 2 bölümde gruplanmıştır.
Tüm Node’larda
Öncelikle sunucularda firewall’un aktif olması durumunda aşağıdaki komutlarla gerekli izinler verilmelidir;
firewall-cmd --permanent --add-port=6443/tcp firewall-cmd --permanent --add-port=2379-2380/tcp firewall-cmd --permanent --add-port=10250/tcp firewall-cmd --permanent --add-port=10251/tcp firewall-cmd --permanent --add-port=10252/tcp firewall-cmd --permanent --add-port=10255/tcp firewall-cmd --reload
alternatif olarak FirewallD aşağıdaki komutla disable edilebilir;
systemctl stop firewalld systemctl disable firewalld
IPTables aktif ise Kubernetes kurulumu için br_netfilter Kernel modülüne ihtiyaç bulunmaktadır. Bu modül sayesinde bridge üzerinden gezen paketler iptables tarafından filtreleme ve port forwarding için işlenebilecek, kubernetes pord’ları cluster içerisinde birbiri ile iletişim kurabilecektir. Bu sebeple modül aşağıdaki şekilde aktif hale getirilir;
modprobe overlay modprobe br_netfilter cat &gt; /etc/sysctl.d/99-kubernetes-cri.conf &lt;<eoh align="justify" <p="" sourcecode]="" [="" --system="" sysctl="" net.bridge.bridge-nf-call-ip6tables="1" net.ipv4.ip_forward="1" net.bridge.bridge-nf-call-iptables="1" eoh="">Sistemin yeniden başlatılması ardından da değişikliklerin etkin olması için;</eoh> echo overlay &gt;&gt; /etc/modules-load.d/overlay.conf echo br_netfilter &gt;&gt; /etc/modules-load.d/br_netfilter.conf
Sistemlerin güncellemesi yapılır;
yum update -y
Sunucuların birbirine isimleri üzerinde gidebildiği test edilir. DNS sunucusu yoksa /etc/hosts dosyasına diğer sunucular girdi olarak eklenmelidir.
Aşağıdaki komutlar sunucularda swap kullanımı kapatılır;
swapoff -a sed -i.bak -r 's/(.+ swap .+)/#\1/' /etc/fstab
Kontrol için aşağıdaki komut kullanılabilir;
free
Container Runtime Kurulumu – Docker
Kubernetes farklı Container Runtime’larını desteklemektedir. Bu yazımda Docker ile ilerleyeceğim için öncelikle Docker kurulumu yapılmalıdır.
Tüm sunucularda SELinux kapatılır;
setenforce 0 sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/sysconfig/selinux
Bu komutlarla SELinux permissive modunda çalıştırılır. Bu sayede container’lar host dosya sistemine ulaşabilecektir, bu durum örneğin pod network’leri için gereklidir.
Docker kurulumu için gerekli paketler kurulur;
yum install -y yum-utils device-mapper-persistent-data lvm2
Docker deposu kurulur;
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
Docker kurulumu yapılır;
yum install -y docker-ce
/etc/docker dizini oluşturulur;
mkdir /etc/docker
deamon.json dosyası oluşturulur;
cat &gt; /etc/docker/daemon.json &lt;<eof align="justify" <p="" sourcecode]="" [="" eof="" }="" ]="" "overlay2.override_kernel_check='true"' "overlay2",="" },="" "100m"="" {="" "json-file",="" ["native.cgroupdriver='systemd"],'><strong>docker.service.d</strong> dizini oluşturulur;</eof> mkdir -p /etc/systemd/system/docker.service.d
Docker servisi yeniden başlatılır;
systemctl daemon-reload systemctl enable docker systemctl start docker
Kubelet Kurulumu
Sunucularda aşağıdaki içerikle /etc/yum.repos.d/kubernetes.repo adresinde bir repository dosyası oluşturulur;
cat &lt;<eof> /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg exclude=kube* EOF
Aşağıdaki komutla kubelet kurulumu yapılır;
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
kurulum ardından kubelet servisi aktive edilir;
systemctl enable --now kubelet
kubelet servisi yeniden başlatılır;
systemctl daemon-reload systemctl restart kubelet
Master Sunucu’da
Kubernetes Cluster ilklendirilmesi
Başlarken, opsiyonel olarak, init öncesi yapılandırma imajları indirilir;
kubeadm config images pull
Master sunucuda aşağıdaki komutla kubernetes cluster’ı ilklendirilir; (network_cdir alanına ilgili cidr değeri girilmelidir.)
kubeadm init --pod-network-cidr=[NETWORK_CIDR]
pod-network-cid parametresi pod network’ü için kullanılacak olan ağı belirtmektedir. Aşağıda tercih edilen network doğrultusunda kullanılacak Network CIDR değerleri bulunabilir;
Network Adı | Cidr | Desteklenen Platform |
Clico | 192.168.0.0/16 | amd64, arm64, ppc64le |
Canal | 10.244.0.0/16 | amd64 |
Cilium | 10.217.0.0/16 | |
Flannel | 10.244.0.0/16 | amd64, arm, arm64, ppc64le, s390x |
Kubernetes cluster ilklendirmesi tamamlandıktan sonra çıktıda yer alan ve kubeadm join ile başlayan bölümü kopyalayın. Bu değer daha sonradan Kubernetes Cluster’ına yeni node’lar eklenmesinde kullanılacaktır.
kubeadm init --apiserver-advertise-address=192.168.200.2 --pod-network-cidr=10.244.0.0/16
Bu işlemler ardından Kubernetes komutlarını kullanabilmek adına aşağıdaki komutlar çalıştırılır;
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
Bu işlemler ardından pod network addon yapılandırmasına hazırız. Bu adım pod’ların birbiri ile iletişim kurabilmesi için zorunludur. Bunun için aşağıdaki komutu kullanabiliriz;
kubectl apply -f [NETWORK_YAML]
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/62e44c867a2846fefb68bd5f178daf4da3095ccb/Documentation/kube-flannel.yml
Yaklaşık bir dakika bekledikten sonra aşağıdaki komutlarla cluster durumu kontrol edilebilir;
kubectl get nodes kubectl get pods --all-namespaces
Varsayılan olarak Kubernetes güvenlik nedeniyle master node’larda pod schedule etmez. Bunu aşağıdaki komut yardımıyla bypass edebilirsiniz;
kubectl taint nodes --all node-role.kubernetes.io/master-
Kubernetes Cluster’ına Node’ların Eklenmesi
Kubernetes Cluster’ının kurulması ardından aşağıdaki adımlar takip edilerek diğer sunucular worker node olarak cluster’a dahil edilebilir. Work node’ların Cluster’a dahil edilmesi için Cluster kurulumunun sonunda bize verilen komut her iki worker node üzerinde de çalıştırılmalıdır.
Örneğin;
kubeadm join 192.168.200.2:6443 --token yxo08j.gvowyx1im86kwwrz \ --discovery-token-ca-cert-hash sha256:471ea1505089f263aa82cef6b6180030ac5b8dec21b66f08f7725966954d48ea
Not: Token not alınmadıysa, aşağıdaki komutla öğrenilebilir;
kubeadm token list
Token’lar varsayılanda 24 saat geçerli olacak şekilde üretilirler. Eğer node, üretilen token zaman aşımına uğradıktan sonra cluster’ı dahil ediliyorsa, aşağıdaki komut kullanılarak yeni bir token üretilebilir.
kubeadm token create
Eğer –discovery-token-ca-cert-hash parametresine verilecek değer not alınmadıysa, aşağıdaki komut yardımıyla bu değer öğrenilebilir;
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2&gt;/dev/null | \ openssl dgst -sha256 -hex | sed 's/^.* //'
Node’ların doğru eklendiği aşağıdaki komutla teyit edilebilir;
kubectl get nodes
Master Dışındaki Makinelerden Cluster Kontrolü
Opsiyonel olarak; aşağıdaki komut diğer sunucularda çalıştırılarak cluster kontrolünün bu sunucularda da yapılabilmesi sağlanabilir;
scp [email protected]<master ip="">:/etc/kubernetes/admin.conf .
Sonuç aşağıdaki komut çalıştırılarak test edilebilir;
kubectl --kubeconfig ./admin.conf get nodes
2 comments
[…] önceki makalelerde adım adım Kubernetes cluster’ımızı, ardından da Gluster cluster’ımızı kurmuştuk. Bu makelede ikisini nasıl birbirine entegre […]
[…] önceki makalemde sizlere CentOS 7 üzerinde bir Kubernetes Cluster’ını nasıl kuracağınızı […]