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ın
tar -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.

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.