Home TürkçeKubernetes Centos 7 Üzerine Kubernetes kurulumu

Centos 7 Üzerine Kubernetes kurulumu

by Fatih Boy
2 comments

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 > /etc/sysctl.d/99-kubernetes-cri.conf <<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 >> /etc/modules-load.d/overlay.conf
echo br_netfilter >> /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 > /etc/docker/daemon.json <<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 <<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ıCidrDesteklenen Platform
Clico192.168.0.0/16amd64, arm64, ppc64le
Canal10.244.0.0/16amd64
Cilium10.217.0.0/16
Flannel10.244.0.0/16amd64, 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

Image

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]
Network AdıYalm Dosyası
Calicohttps://docs.projectcalico.org/v3.7/manifests/calico.yaml
Canalhttps://docs.projectcalico.org/v3.7/manifests/canal.yaml
Ciliumhttps://raw.githubusercontent.com/cilium/cilium/v1.5/examples/kubernetes/1.14/cilium.yaml
Flannelhttps://raw.githubusercontent.com/coreos/flannel/62e44c867a2846fefb68bd5f178daf4da3095ccb/Documentation/kube-flannel.yml
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/62e44c867a2846fefb68bd5f178daf4da3095ccb/Documentation/kube-flannel.yml

Image

Yaklaşık bir dakika bekledikten sonra aşağıdaki komutlarla cluster durumu kontrol edilebilir;

kubectl get nodes
kubectl get pods --all-namespaces

Image

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>/dev/null | \
openssl dgst -sha256 -hex | sed 's/^.* //'

Node’ların doğru eklendiği aşağıdaki komutla teyit edilebilir;

kubectl get nodes

Image

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

Şu Yazıları da Sevebilirsiniz

2 comments

Gluster ile Kubernetes Dinamik Birim Sağlama - Fatih'in Notları 12 Temmuz 2019 - 09:11

[…] ö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 […]

Reply
Kubernetes Eğitimi: Kubernetes Kurulumu - Fatih'in Notları 23 Eylül 2019 - 10:16

[…] önceki makalemde sizlere CentOS 7 üzerinde bir Kubernetes Cluster’ını nasıl kuracağınızı […]

Reply

Leave a Comment

* Bu formu kullanarak, verilerinizin bu web sitesi tarafından saklanması ve kullanılmasını kabul ediyorsunuz.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Bu web sitesi deneyiminizi geliştirmek için çerezleri kullanır. Bunu kabul ettiğinizi varsayacağız, ancak isterseniz vazgeçebilirsiniz. Kabul Et Daha Fazla Bilgi