Kubernetes ile İlk Deployment

Daha önce kurulumunu yapmış olduğumuz Kubernetes sisteminde nginx deployment için şu konfigürasyon kullanılabilir:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:  
  name: nginxsrv2
spec:
  selector:    
    app: nginx
  type: NodePort
  ports:  
  - name: http
    port: 80
    nodePort: 30036
    protocol: TCP

Bu yapıda containerlar 80 nolu port üzerinden yayın yaparken, servise vermiş olduğumuz NodePort sayesinde dış ortamdan trafik alınması sağlanıyor. Dışarıdan erişim için 30036 nolu port kullanılmaktadır.

Kubernetes Dashboard Kurulumu

Daha önceki Kubectl ile Uzak Bağlantı makalesindeki yöntem ile kendi bilgisayarınızı kullanarak uzak Kubernetes yapınızı kontrol edebilirsiniz. Bu yöntemi kullanarak dashboard kurulumu ve kullanımı kolayca yapılabilmekte.

Kurulum işlemi şu şekilde yapılabilir:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.1.0/aio/deploy/recommended.yaml

İşlem sonrası dashboard artık hazır. kubectl proxy ile isterseniz kendi bilgisayarınız üzerinden de dashboard arayüzüne erişebilirsiniz.

kubectl proxy

Artık http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/#/overview?namespace=default adresi üzerinden dashboard erişimi sağlanabilir.

Son olarak token oluşturma sonrası dashboard ile oturum açma sağlanabilir.

kubectl create serviceaccount dashboard -n default
kubectl create clusterrolebinding dashboard-admin -n default --clusterrole=cluster-admin  --serviceaccount=default:dashboard
kubectl get secret $(kubectl get serviceaccount dashboard -o jsonpath="{.secrets[0].name}") -o jsonpath="{.data.token}" | base64 --decode

Ubuntu 20.04 Kubernetes Kurulumu

Kubernetes kullanmak için kendi sunucularınızı (dedicated, vps vs.) kullanabileceğiniz gibi Amazon AWS, Azure veya Google Cloud ortamında bulunan Kubernetes servislerini de kullanabilirsiniz.

Bu makalede kendi sunucumuzda Kubernetes kurulumu yapılacaktır. İhtiyacımız olan 1 master ve 2 node olmak üzere toplamda 3 adet Ubuntu 20.04 sunucu.

Adım 1: Güncelleme

Sunucu paketlerini güncellemek ile işe başlıyoruz.

sudo apt-get update
sudo apt-get upgrade

Adım 2: Swap İptali

Kubernetes yapısının düzgün ve sorunsuz çalışabilmesi için swap diskinin iptal edilmesi gerekli.

sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
sudo swapoff -a

Adım 3: Docker Kurulumu

Docker yüklemesini yaparken, /etc/docker/daemon.json dosyasında systemd düzenlemesi yapılması gerekli.

sudo apt-get install docker.io
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo nano /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}

sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl enable docker

Adım 4: Kubernetes Yüklenmesi

Aşağıdaki komutları kullanarak Kubernetes uygulamaları yüklenir. Kubernetes versiyon geçişlerinde sorun yaşamamak için güncellemeleri kapatıyoruz.

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add
sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
sudo apt-get install kubeadm kubelet kubectl
sudo apt-mark hold kubeadm kubelet kubectl

Systemd düzenlemesi için 10-kubeadm.conf dosyasında Environment satırlarının sonuna aşağıdaki satırın eklenmesi gerekli.

sudo nano /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
Environment="cgroup-driver=systemd/cgroup-driver=cgroupfs"

Adım 5: Master Node

Bu adım sadece master node için gereklidir, diğer nodelar için bu adımı atlayınız. Kubeadmin ile gerekli olan düzenlemeler yapılacaktır.

pod-network parametresi ile Kubernetes podları arasındaki network bilgisi tanımlanır. IP bilgisini kendi yapınıza göre değiştirmelisiniz.

apiserver-advertise-address parametresi ile API server ip adresi belirtilir. Birden fazla ip adresi mevcut ise bu ip adreslerini de belirtilmesi gereklidir. Bu ip adresilerine göre sertifikalar oluşturulacaktır.

sudo kubeadm init --control-plane-endpoint=api.domain.com --pod-network-cidr=10.0.1.0/16

Kurulum işlemi biraz zaman alacaktır. İşlem sonunda belirtilen komut ile worker nodeların bağlantısı için token bilgisi verilecektir. Bu bilginin not edilmesi gereklidir.

kubeadm join 10.0.1.4:6443 --token TOKENBILGISI --discovery-token-ca-cert-hash sha256:TOKENBILGISI 

config düzenlemesini yapı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

Kubernetes ağ yönetimi için weave kurulumu yaparak master node kurulumunu tamamlıyoruz.

kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"

Çalışan nodeları görmek için  kubectl get nodes komutunu kullanabilirsiniz.

 kubectl get nodes

kubectl get pods --all-namespaces komutunu kullanarak Kubernetes kurulumumuz hakkında bilgi alabiliriz. Tüm adımları doğru yaptıysanız tüm durumlarda Running yazısını görmelisiniz.

kubectl get pods --all-namespaces

İşlemler sırasında bir hata yaparsanız reset komutu ile işlemleri geri alabilirsiniz.

sudo kubeadm reset

Adım 6: Node Bağlantısı

Master node harici diğer nodeların kurulumu için ilk 4 adım aynen yapılmalıdır.

Bağlantı için daha önce bize bildirilen komutu kullanıyoruz.

kubeadm join 10.0.1.4:6443 --token TOKENBILGISI --discovery-token-ca-cert-hash sha256:TOKENBILGISI