Kubernetes: K3s ile Ubuntu 20.04’e Kubernetes Cluster Kurulumu

Kubernetes, hibrit bulut platformlarına yönelik bir konteynhttps://rancher.com/what-is-rancher/overviewer düzenleme aracıdır.  Google tarafından tasarlandı.  Kubernetes, kullanıcıların farklı bulut ve sanallaştırma platformlarında docker konteynerlerini yönetmesine olanak tanır.  K3s, ‘ağır yüklü’ k8s dağıtımını azaltmayı amaçlayan hafif bir kubernetes dağıtım ikili programıdır.  K3s Rancher tarafından geliştirilmektedir.

Bu yazıda k3s kullanarak Ubuntu 20.04 LTS’ye Kubernetes kümesinin nasıl kurulacağını ele alacağız.

Kubernetes mimarisi bir Ana düğüm ve Çalışan Düğümlerden oluşur.  İşlevleri aşağıdaki gibidir:

  • Master – kümeyi, API çağrılarını vb. kontrol eder
  • Workers – bunlar, bölmelerin dağıtıldığı ve uygulamaların çalıştırıldığı iş yüklerini yönetir.  Kümeye eklenebilir ve kaldırılabilirler.

Yani bir k3s kümesi kurmak için en az iki ana bilgisayara, ana düğüme ve bir çalışan düğüme ihtiyacınız vardır.  Bu yazıda bir ana düğüm ve iki çalışan düğüm kullanacağız.

Ana bilgisayarlarımızı k3’leri bir kümede çalıştırabilecek şekilde hazırlamamız gerekiyor.  Ubuntu 20.04’te k3s kümesini kurmak için aşağıdaki adımları kullanın:

1. Ubuntu sistemini güncelleme

Sunucularınız Ubuntu 20.04 yüklüyken bunları güncelleyin ve yükseltin:

sudo apt update
sudo apt -y upgrade && sudo systemctl reboot

2. Her düğümdeki ana bilgisayar adlarını eşleyin

Her düğümde ana bilgisayar adlarının eşlendiğinden emin olun.  Bu, her bir ana bilgisayarın /etc/hosts dosyasına her düğümün IP’sini ve ana bilgisayar adını eklemekle olur.

Kurulumumuzda şu şekildedir:

$ sudo vim /etc/hosts
172.16.10.3 master
172.16.10.4 worker01
172.16.10.10 worker02

DNS adlarını kullanabilmeniz için bunun tüm ana bilgisayarlarda yapılması gerekir.

3. Docker’ı Ubuntu’ya yükleme

Bir sonraki adım, ana bilgisayarlara docker yüklemektir.  Daha önce de tartışıldığı gibi Kubernetes, hibrit bulut altyapısındaki Docker konteynerlerini yönetmek için kullanılıyor.  Bu nedenle, K3’leri kurmadan önce tüm düğümlerde docker’ın çalışır durumda olması gerekir.

Docker APT deposunu ekleyin:

sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common -y
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"

Docker CE’yi Ubuntu 20.04’e yükleyin:

sudo apt update
sudo apt install docker-ce -y

Bunun ana düğüm dahil tüm ana bilgisayarlarda yapılması gerekir.  Başarılı kurulumun ardından hizmeti başlatın ve etkinleştirin.

sudo systemctl start docker
sudo systemctl enable docker

Ayrıca hizmetin başlatılıp başlatılmadığını ve çalışıp çalışmadığını da kontrol edebilirsiniz:

$ systemctl status docker
 docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2023-10-30 08:30:39 CET; 19s ago
TriggeredBy: ● docker.socket
       Docs: https://docs.docker.com
   Main PID: 9275 (dockerd)
      Tasks: 8
     Memory: 35.6M
     CGroup: /system.slice/docker.service
             └─9275 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Oct 30 08:30:39 ubuntu dockerd[9275]: time="2020-10-30T08:30:39.460569874+01:00" level=warning msg="Your kernel does not support cgroup rt runtime"
Oct 30 08:30:39 ubuntu dockerd[9275]: time="2020-10-30T08:30:39.460672730+01:00" level=warning msg="Your kernel does not support cgroup blkio weight"
Oct 30 08:30:39 ubuntu dockerd[9275]: time="2020-10-30T08:30:39.460820506+01:00" level=warning msg="Your kernel does not support cgroup blkio weight_device"
Oct 30 08:30:39 ubuntu dockerd[9275]: time="2020-10-30T08:30:39.461286028+01:00" level=info msg="Loading containers: start."
Oct 30 08:30:39 ubuntu dockerd[9275]: time="2020-10-30T08:30:39.620849970+01:00" level=info msg="Default bridge (docker0) is assigned with an IP address 172.17.0>
Oct 30 08:30:39 ubuntu dockerd[9275]: time="2020-10-30T08:30:39.717281156+01:00" level=info msg="Loading containers: done."
Oct 30 08:30:39 ubuntu dockerd[9275]: time="2020-10-30T08:30:39.754253372+01:00" level=info msg="Docker daemon" commit=4484c46d9d graphdriver(s)=overlay2 version>
Oct 30 08:30:39 ubuntu dockerd[9275]: time="2020-10-30T08:30:39.755461813+01:00" level=info msg="Daemon has completed initialization"
Oct 30 08:30:39 ubuntu systemd[1]: Started Docker Application Container Engine.

Docker komutlarını her çalıştırdığınızda sudo yazmamak için kullanıcınızı Docker grubuna ekleyin.

sudo usermod -aG docker ${USER}
newgrp docker

4. Master k3s Düğümünü kurun

Bu adımda ana düğümü kurup hazırlayacağız.  Bu, k3s hizmetinin kurulmasını ve başlatılmasını içerir.

curl -sfL https://get.k3s.io | sh -s - --docker

Ana düğüme k3s yüklemek için yukarıdaki komutu çalıştırın.  Betik k3s’i yükler ve otomatik olarak başlatır.

[INFO]  Finding release for channel stable
[INFO]  Using v1.27.4+k3s1 as release
[INFO]  Downloading hash https://github.com/k3s-io/k3s/releases/download/v1.27.4+k3s1/sha256sum-amd64.txt
[INFO]  Downloading binary https://github.com/k3s-io/k3s/releases/download/v1.27.4+k3s1/k3s
[INFO]  Verifying binary download
[INFO]  Installing k3s to /usr/local/bin/k3s
[INFO]  Creating /usr/local/bin/kubectl symlink to k3s
[INFO]  Creating /usr/local/bin/crictl symlink to k3s
[INFO]  Skipping /usr/local/bin/ctr symlink to k3s, command exists in PATH at /usr/bin/ctr
[INFO]  Creating killall script /usr/local/bin/k3s-killall.sh
[INFO]  Creating uninstall script /usr/local/bin/k3s-uninstall.sh
[INFO]  env: Creating environment file /etc/systemd/system/k3s.service.env
[INFO]  systemd: Creating service file /etc/systemd/system/k3s.service
[INFO]  systemd: Enabling k3s unit
Created symlink /etc/systemd/system/multi-user.target.wants/k3s.service → /etc/systemd/system/k3s.service.
[INFO]  systemd: Starting k3s

Hizmetin başarıyla yüklenip yüklenmediğini kontrol etmek için şunları kullanabilirsiniz:

$ systemctl status k3s
● k3s.service - Lightweight Kubernetes
     Loaded: loaded (/etc/systemd/system/k3s.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2023-05-09 13:01:03 UTC; 1min 9s ago
       Docs: https://k3s.io
    Process: 11151 ExecStartPre=/sbin/modprobe br_netfilter (code=exited, status=0/SUCCESS)
    Process: 11152 ExecStartPre=/sbin/modprobe overlay (code=exited, status=0/SUCCESS)
   Main PID: 11153 (k3s-server)
      Tasks: 0
     Memory: 420.9M
     CGroup: /system.slice/k3s.service
             └─11153 /usr/local/bin/k3s server --docker

Oct 30 08:33:32 ubuntu k3s[11153]: I1030 08:33:32.532935   11153 reconciler.go:196] operationExecutor.UnmountVolume started for volume "helm-traefik-token-dmfz6">
Oct 30 08:33:32 ubuntu k3s[11153]: I1030 08:33:32.533481   11153 reconciler.go:196] operationExecutor.UnmountVolume started for volume "values" (UniqueName: "kub>
Oct 30 08:33:32 ubuntu k3s[11153]: W1030 08:33:32.533849   11153 empty_dir.go:453] Warning: Failed to clear quota on /var/lib/kubelet/pods/d1fae0b1-f3ac-481a-b6a>
Oct 30 08:33:32 ubuntu k3s[11153]: I1030 08:33:32.538649   11153 operation_generator.go:782] UnmountVolume.TearDown succeeded for volume "kubernetes.io/configmap>
Oct 30 08:33:32 ubuntu k3s[11153]: I1030 08:33:32.555370   11153 operation_generator.go:782] UnmountVolume.TearDown succeeded for volume "kubernetes.io/secret/d1>
Oct 30 08:33:32 ubuntu k3s[11153]: I1030 08:33:32.653113   11153 reconciler.go:319] Volume detached for volume "helm-traefik-token-dmfz6" (UniqueName: "kubernete>
Oct 30 08:33:32 ubuntu k3s[11153]: I1030 08:33:32.653137   11153 reconciler.go:319] Volume detached for volume "values" (UniqueName: "kubernetes.io/configmap/d1f>
Oct 30 08:33:33 ubuntu k3s[11153]: W1030 08:33:33.978774   11153 pod_container_deletor.go:77] Container "23d34e0acde3f4ab7e41d99e9cff16e7ba8cd76122158dfc18b64ae0>
Oct 30 08:33:33 ubuntu k3s[11153]: W1030 08:33:33.997821   11153 pod_container_deletor.go:77] Container "a52fe91aa3e7b137ebe4dd993e358c382f96b5df342cb1c098acadb6>
Oct 30 08:33:35 ubuntu k3s[11153]: W1030 08:33:35.022454   11153 pod_container_deletor.go:77] Container "2b9f302427059276bc2e1d012db5cbcaeb72ed373cb52218edb6eb4b

Ana düğümün çalışıp çalışmadığını şu şekilde kontrol edebilirsiniz:

sudo kubectl get nodes -o wide

Çıktı şunun gibi olmalı:

root@mastre:~# sudo kubectl get nodes -o wide
NAME     STATUS   ROLES    AGE    VERSION        INTERNAL-IP     EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION     CONTAINER-RUNTIME
master   Ready    master   3m2s   v1.18.9+k3s1   172.16.10.3   <none>        Ubuntu 20.04.1 LTS   5.4.0-52-generic   docker://19.3.8

5. Güvenlik duvarındaki bağlantı noktalarına izin verin

Master ve çalışan düğümler arasında iletişim kurmak için kullanılacak portlara izin vermemiz gerekiyor.  Bağlantı noktaları 443 ve 6443’tür.

sudo ufw allow 6443/tcp
sudo ufw allow 443/tcp

Düğümleri ana makineye birleştirmek için kullanılacak ana düğümden bir jeton çıkarmanız gerekir.

Ana düğümde:

sudo cat /var/lib/rancher/k3s/server/node-token

Daha sonra şuna benzeyen bir jeton elde edeceksiniz:

K1078f2861628c95aa328595484e77f831adc3b58041e9ba9a8b2373926c8b034a3::server:417a7c6f46330b601954d0aaaa1d0f5b

6. Çalışan düğümlere k3’leri yükleyin

Bir sonraki adım k3’leri çalışan düğümlere kurmaktır.  Çalışan düğümlere k3’leri yüklemek için aşağıdaki komutları çalıştırın:

curl -sfL http://get.k3s.io | K3S_URL=https://<master_IP>:6443 K3S_TOKEN=<join_token> sh -s - --docker

Burada master_IP, ana düğümün IP’sidir ve join_token, ana düğümden elde edilen belirteçtir.  Örneğin:

curl -sfL http://get.k3s.io | K3S_URL=https://172.16.10.3:6443 K3S_TOKEN=K1078f2861628c95aa328595484e77f831adc3b58041e9ba9a8b2373926c8b034a3::server:417a7c6f46330b601954d0aaaa1d0f5b sh -s - --docker

Çalışan düğümlerdeki k3s aracısının çalışıp çalışmadığını şu şekilde doğrulayabilirsiniz:

sudo systemctl status k3s-agent

Düğümlerimizin kümeye başarıyla eklendiğini doğrulamak için şunu çalıştırın:

sudo kubectl get nodes

Çıktınız şöyle görünmelidir:

root@master:~# kubectl get nodes -o wide
NAME       STATUS   ROLES    AGE   VERSION        INTERNAL-IP     EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION       CONTAINER-RUNTIME
master     Ready    master   14m   v1.26.4+k3s1  172.16.10.3   <none>        Ubuntu 20.04.1 LTS   5.4.0-52-generic     docker://23.0.6
worker02   Ready    <none>   90s   v1.26.4+k3s1   172.16.10.10   <none>        Ubuntu 20.04.1 LTS   5.4.0-52-generic     docker://23.0.6
worker01   Ready    <none>   41s   v1.26.4+k3s1   172.16.10.4   <none>        Ubuntu 18.04.5 LTS   4.15.0-122-generic   docker://23.0.6

Bu, k3s kümemizi, uygulamaları dağıtmaya hazır şekilde başarıyla kurduğumuzu gösterir.

7. Eklentileri K3s’e Dağıtın

K3s, tüm araçlarla birlikte paketlenmeyen, ancak bunları ayrı olarak yükleyebileceğiniz hafif bir kubernetes aracıdır.

Helm Komut Satırı aracını k3s’e yükleyin

  • Helm komut satırı aracının en son sürümünü bu sayfadan indirin.
  • Tar dosyasını tar -xvcf <indirilen dosya> kullanarak çıkarıntar -xvcf <downloaded-file>
  • İkili dosyayı /usr/local/bin/helm konumuna taşıyın
sudo mv linux-amd64/helm /usr/local/bin/helm

Sürümü kontrol edin

$ helm version

Dümen kullanarak uygulamaların kurulumuna izin vermek için dümen grafiği deposunu ekleyin:

helm repo add stable https://charts.helm.sh/stable
helm repo update

8. K3s’te bir uygulamayı dağıtma

Artık K3s kümesinde bir test uygulaması konuşlandırabiliriz.

K3’lerde Nginx Web proxy’sini dağıtma

Nginx, kümenin içindeki ve dışındaki giriş web trafiği rotalarını ortaya çıkarmak için bir web proxy’si olarak kullanılabilir.

Helm’i kullanarak nginx web proxy’sini kurabiliriz:

helm install nginx-ingress stable/nginx-ingress --namespace kube-system \
  --set defaultBackend.enabled=false

Uygulamanın şu şekilde yüklenip yüklenmediğini test edebiliriz:

$ kubectl get pods -n kube-system -l app=nginx-ingress -o wide

Çıktı şöyle olmalıdır:

root@master:~# kubectl get pods -n kube-system -l app=nginx-ingress -o wide
NAME                                       READY   STATUS    RESTARTS   AGE   IP          NODE       NOMINATED NODE   READINESS GATES
nginx-ingress-controller-56547fb57-vsjdm   1/1     Running   0          28s   10.42.2.6   worker01   <none>           <none>

Nginx web proxy’sini k3s’e başarıyla dağıttık.

9. K3s’ kaldırma (Bonus)

Çalışan düğümlerdeki k3’leri kaldırmak için şunu yürütün:

sudo /usr/local/bin/k3s-agent-uninstall.sh
sudo rm -rf /var/lib/rancher

Ana düğümdeki k3’leri kaldırmak için şunu yürütün:

sudo /usr/local/bin/k3s-uninstall.sh
sudo rm -rf /var/lib/rancher

 

 

Yazının orijinalini buradan okuyabilirsiniz.

 

 

 

 

Skip to content