Kubernetes Cluster Kurulumu
Kurulum Ubuntu üzerine yapılacak, bu sebeple komutlar Ubuntu – Debian ailesi uygun olacak, CentOS – Redhat ailesinde kullanırken bunu göz önüne almak gerekiyor.
Sunucuların Hazırlanması
Bu kısımda anlatılanlar tüm node’lar üzerinde yapılacak işlemleri kapsamaktadır.
İlk önce swap’ın kapatılması gerekiyor. Kubernetes geliştirilirken Swap olmayacak şekilde, swap açık olmayacak şekilde geliştirildi. Eğer swap kapatılmazsa kurulumu gerçekleştirmek mümkün olmuyor. Bu sebeple ilk adım swap’ın kapatılmasıdır.
1 |
swapoff -a |
Google apt repository key’leri ekleyelim.
1 |
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add – |
Key eklendi, şimdi sıra Kubernetes apt repository’nin eklenmesine geldi.
1 |
sudo bash -c 'cat <<EOF >/etc/apt/sources.list.d/kubernetes.list deb https://apt.kubernetes.io/ kubernetes-xenial main EOF' |
Şimdi sunucularımızda package listemizi güncelleyelim
1 |
sudo apt-get update |
Repository’deki versiyonlari daha sonra incelemek icin apt-cache ile cache’leyelim. Geçiş yapmak gerektiğinde lazım olabiliyor.
1 2 |
apt-cache policy kubelet | head -n 20 apt-cache policy docker.io | head -n 20 |
Gerekli paketleri repository’den sunucularımıza çekelim.
1 |
sudo apt-get install -y docker.io kubelet kubeadm kubectl |
Kubelet, container runtime’ımız olan docker status’lerini kontrol edelim.
1 2 |
sudo systemctl status kubelet.service sudo systemctl status docker.service |
Sistem ayağa kalktığı zaman çalışacak şekilde ayarlayalım.
1 2 |
sudo systemctl enable kubelet.service sudo systemctl enable docker.service |
Master İşlemleri
Öncelikle Pod entwork’ü yaratmamız gerekiyor. Docker konusuna baktıysanız Overlay network olarak geçen konunun aynısıdır. Kısaca tarif etmek gerekirse, Pod’ların birbirleri ile iletişim kurabiliyor olması için gereken altyapıdır. Bunun için bazı yazılımlar bulunmaktadır. Biz burada Calico kullanacağız. Şimdi ilgili yaml dosyalarını indirelim.
1 2 |
wget https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/rbac-kdd.yaml wget https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml |
İnen calico.yaml dosyasını inceleyelim.
1 |
vi calico.yaml |
Calico yaml dosyasındaki ip bilgisine uygun olarak, bir pod network range’i belirleyerek Kubernetes cluster’ımızı oluşturalım.
1 |
sudo kubeadm init --pod-network-cidr=192.168.0.0/16 |
API Server’a admin erişim yetkisine sahip bir hesap yaratalım
1 2 3 |
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config |
Pod network oluşturmak için gerekli yaml dosyalarını çalıştıralım.
1 2 |
kubectl apply -f rbac-kdd.yaml kubectl apply -f calico.yaml |
Sistem specific Pod’ları ve calico Podl’arını inceleyelim.
Not : DNS Pod’umuz network deploy olup çalışır hale gelene kadar aktif olmayacak. Kısacası tamamı status kısmında running olarak görünmeli.
1 |
kubectl get pods --all-namespaces |
-watch flag kullanabiliriz.
1 |
kubectl get pods --all-namespaces --watch |
Cluster’da mevcut Pod’ların listesine bakalım, tabii ki bu kısımda sadece Master görünecek.
1 |
kubectl get nodes |
kubelet static Pod manifestleri çalıştırıyoruz, yani bir anlamda core cluster Pod’ları çalışır hale geliyor.
1 |
sudo systemctl status kubelet.service |
kubeconfig dosyasinin bulunduğu directory’i inceleyelim.
1 |
ls /etc/kubernetes |
Master’daki manifestleri inceleyelim.
1 |
ls /etc/kubernetes/manifests |
API Server ve Etcd nin manifestlerini incelemek istersek.
1 2 |
sudo more /etc/kubernetes/manifests/etcd.yaml sudo more /etc/kubernetes/manifests/kube-apiserver.yaml |
Node İşlemleri
Kubelet ve container runtime servislerini kontrol edelim.
1 2 |
sudo systemctl status kubelet.service sudo systemctl status docker.service |
Sistem basladığı zaman başlayacak şekilde set edelim.
1 2 |
sudo systemctl enable kubelet.service sudo systemctl enable docker.service |
Master’da token bilgisi verilmişti eger not almadıysak şu şekilde listeleyebiliriz.
1 |
kubeadm token list |
Yeniden bir token generate etmek istiyorsak.
1 |
kubeadm token create |
Master üzerinde ca cert hash bulunmakta.
1 |
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //' |
API Server’ın ip adresi ya da adı, token’ımız ve cert ile Node’umuzu cluster’a dahil edelim.
1 |
sudo kubeadm join <ip>:6443 --token<token> --discovery-token-ca-cert-hash <ca_cert_hash> |
Master’a dönecek olursak Networking Pod’u yaratılana kadar NotReady state’de görülecektir.
Pod’un schedule edilip container’ının indirilmesini bekliyor.
1 |
kubectl get nodes |
Master’da calico pod ve kube-proxy’nin yeni eklenen node’larda çalışır hale gelmesini gözlemleyelim.
1 |
kubectl get pods --all-namespaces --watch |
Master’da eklenen node’umuz status’ünün Ready’e dönmesini gözlemleriz.
1 |
kubectl get nodes |
Lokalimize Kubernetes Kurulumu
Lokalimizede Kubernetes kullanabilmek için birçok seçenek bulunuyor. Bunlardan en çok tercih edileni Minikube.
Minikube kurulumu yapabilmek için Github sayfasına gidebiriliriz: https://github.com/kubernetes/minikube
Burada Intallation kısmında bizi yönlendirdiği adres: https://minikube.sigs.k8s.io/docs/start/
İşletim sistemimize uygun seçenekler mevcut.
Bende Windows var ve Windows’ta bu kurulum paket yöneticileri tarafından yapılır. Bunun için iki seçenek sunulmuş: winget ve choco.
Ben offical olduğu için winget’i tercih ettim. Winget kurulumu yapmanın ise iki yönetim var:
- Insider programına katılmak. Şu formu doldurabilirsiniz: https://forms.office.com/Pages/ResponsePage.aspx?id=v4j5cvGGr0GRqy180BHbR-NSOqDz219PqoOqk5qxQEZUNFkzQVcxMkJXWEFCUkE4WThQWUJMVlA1Ty4u
- Benim tercih ettiğim yöntemse Github üzerinden indirmek: https://github.com/microsoft/winget-cli/releases Buradaki installer ile işlemi kolayca yapabiliyorsuuz.
Sonra bir PowerShell açın ve şu komutu işletin:
1 |
winget install minikube |
Minikube başarıyla kuruldu.
Diğer Seçenekse Docker Desktop. Bende zaten kurulu ve muhtemelen sizde de kuruludur. Settings kısmına girip Kubernetes’i enable etmeniz ve onaylamanız yeterlidir.
Aşağıda, sol tarafta Docker logosunun yanında Kubernetes’i de gördüğümüzde, işlem tamam demektir.