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 reboot2. 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 worker02DNS 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 -yBunun 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 dockerAyrı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 docker4. 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 - --dockerAna 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 k3sHizmetin 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 "2b9f302427059276bc2e1d012db5cbcaeb72ed373cb52218edb6eb4bAna 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.85. 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/tcpDüğü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-tokenDaha sonra şuna benzeyen bir jeton elde edeceksiniz:
K1078f2861628c95aa328595484e77f831adc3b58041e9ba9a8b2373926c8b034a3::server:417a7c6f46330b601954d0aaaa1d0f5b6. Ç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 - --dockerBurada 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-agentDüğü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.6Bu, 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ın
tar -xvcf <downloaded-file> - İkili dosyayı /usr/local/bin/helm konumuna taşıyın
sudo mv linux-amd64/helm /usr/local/bin/helmSürümü kontrol edin
$ helm versionDü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 update8. 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=falseUygulamanı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/rancherAna 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.

Kariyerime 26 yıl önce başladım. Windows ve Linux sistemlerinin kurulumu, yapılandırılması, yönetimi ve bakımı dahil olmak üzere birden fazla sistem üzerinde uzmanlaştım.
Açık kaynak dünyasındaki en son gelişmelerden haberdar olmaktan ve Linux hakkındaki en son araçları, özellikleri ve hizmetleri denemekten hoşlanıyorum.
Son 6 yıldır sistem ve ağ yöneticisi olarak görev yapıyorum ayrıca Pardus Dönüşüm Projesini yönetiyorum ve Pardus İşletim Sisteminin yaygınlaşması adına uğraş gösteriyorum.
Boş zamanlarımda açık kaynaklı uygulamaların Türkçe çevirisine katılıyorum ve The Document Foundation üyesiyim.