Kubernetes: K0s ile Linux’ta Kubernetes kümesi dağıtımı

Bir Kubernetes kümesi kurmanın basit bir yolu olup olmadığını hiç merak ettiniz mi? Evet var. K0s, herhangi bir altyapıya dağıtılabilen basit, sağlam ve sertifikalı bir Kubernetes dağıtımıdır. Bu, K0’ların herhangi bir özel veya genel bulut ortamında çalışabileceği anlamına gelir.

K0s, tek bir komutla dağıtılan kurulum için gereken tüm minimum bağımlılıklarla birlikte bir ikili dosya halinde paketlenmiştir. Bu, Kubernetes kümenizi yükleme ve yapılandırma karmaşıklığını önemli ölçüde azaltır. Bu aynı zamanda Kubernetes konusunda hiçbir beceriye sahip olmayan mühendislerin yine de bir Kubernetes kümesi kurabileceği anlamına gelir.

K0’lar ayrıca normal K8’ler kadar güvenlidir, çünkü güvenlik açığı sorunları doğrudan k0s dağıtımında kolayca düzeltilebilir. K0s aynı zamanda açık kaynak kodludur!

K0s’nin özellikleri

K0s, tam özellikli bir Kubernetes dağıtımıdır ve Kubernetes’in tüm özellikleriyle birlikte gelir. Bu özelliklerden bazıları şunlardır:

Konteyner Çalışma Zamanı – ContainerD
Tüm Linux işletim sistemi ve Windows 2019+ desteği
x86-64, ARM64 ve ARMv7 desteği
CIS için yerleşik güvenlik ve uyumluluk
Desteklenen CNI sağlayıcıları: Kube-Router (Varsayılan), Calico, özel.
Desteklenen depolama ve CSI sağlayıcıları – Kubernetes-in-Three depolama sağlayıcıları, özel.Resmi web sitelerinde tartışılan k0’ların daha fazla özelliği var.

Linux üzerinde k0s Kümesini Kurun

Bu makale, Linux üzerinde bir k0s kümesi kurmak için gereken basit adımları kapsayacaktır. Adımlar aşağıda vurgulanmıştır:

  1. K0s kontrol düzlemini kurun
  2. İşçi düğümünü K0s kümesine ekleme
  3. k0s kümesine daha fazla denetleyici düğümü ekleyin
  4. Örnek uygulamayı k0s’de dağıtma
  5. k0s kümesini uzaktan yönetin

k0s Kontrol Düzlemini Kurun

Aşama 1. k0s ikili dosyasını indirin

Daha önce vurguladığımız gibi, K0s’ın kurulumu basittir. Kontrol düzlemi olarak kullanmayı düşündüğünüz düğüme K0s’yi indirmek ve kurmak için aşağıdaki komutu çalıştırın:

curl -sSLf https://get.k0s.sh | sudo sh

Yukarıdaki komut, k0s ikili dosyasını indirir ve /usr/local/bin dizinine kaydeder. Lütfen /usr/local/bin yolunun ikili yol olarak bildirildiğinden emin olun. echo $PATH komutunu çalıştırarak bunu doğrulayabilirsiniz. Yukarıdaki yol listelenmemişse, aşağıdaki komutu kullanarak yolu eklemeniz gerekir:

echo "export PATH=\$PATH:/usr/local/bin" | sudo tee -a /etc/profile
source /etc/profile

Adım 2. k0s denetleyicisini kurun

Root kullanıcıya geçin:

sudo su -

K0s denetleyicisini kurun ve işçi birimi etkinleştirin.

k0s install controller --enable-worker

Kurulumun tamamlanmasını bekleyin ve ardından denetleyiciyi başlatın.

sudo systemctl start k0scontroller

Başarıyla başlatılıp başlatılmadığını görmek için denetleyicinin durumunu kontrol edin.

# systemctl status k0scontroller
● k0scontroller.service - k0s - Zero Friction Kubernetes
     Loaded: loaded (/etc/systemd/system/k0scontroller.service; enabled; preset: enabled)
     Active: active (running) since Mon 2025-05-26 19:47:03 EAT; 2s ago
       Docs: https://docs.k0sproject.io
   Main PID: 2154 (k0s)
      Tasks: 8
     Memory: 196.3M (peak: 196.7M)
        CPU: 3.973s
     CGroup: /system.slice/k0scontroller.service
             └─2154 /usr/local/bin/k0s controller --enable-worker=true

May 26 19:47:05 ubuntu01.cloudspinx.com k0s[2154]: time="2025-05-26 19:47:05" level=info msg="signed certificate with serial number 723580074612215042197249206066978391479856383188" component=cfssl
May 26 19:47:05 ubuntu01.cloudspinx.com k0s[2154]: time="2025-05-26 19:47:05" level=info msg="generate received request" component=cfssl
May 26 19:47:05 ubuntu01.cloudspinx.com k0s[2154]: time="2025-05-26 19:47:05" level=info msg="received CSR" component=cfssl
May 26 19:47:05 ubuntu01.cloudspinx.com k0s[2154]: time="2025-05-26 19:47:05" level=info msg="generating key: rsa-2048" component=cfssl
May 26 19:47:05 ubuntu01.cloudspinx.com k0s[2154]: time="2025-05-26 19:47:05" level=info msg="generate received request" component=cfssl
May 26 19:47:05 ubuntu01.cloudspinx.com k0s[2154]: time="2025-05-26 19:47:05" level=info msg="received CSR" component=cfssl
May 26 19:47:05 ubuntu01.cloudspinx.com k0s[2154]: time="2025-05-26 19:47:05" level=info msg="generating key: rsa-2048" component=cfssl
May 26 19:47:05 ubuntu01.cloudspinx.com k0s[2154]: time="2025-05-26 19:47:05" level=info msg="generate received request" component=cfssl
May 26 19:47:05 ubuntu01.cloudspinx.com k0s[2154]: time="2025-05-26 19:47:05" level=info msg="received CSR" component=cfssl
May 26 19:47:05 ubuntu01.cloudspinx.com k0s[2154]: time="2025-05-26 19:47:05" level=info msg="generating key: rsa-2048" component=cfssl

Hizmetin önyüklemede başlatılmasını sağlayın

sudo systemctl enable k0scontroller

Artık komut önekini kullanarak k0s kümenize erişebilirsiniz:

# k0s kubectl <command>

K0s, kubeadmin ve kubectl ile birlikte gelir. Bu nedenle, kümeyi kullanmak için başka bir şey yüklemeniz gerekmez.

Bölmelerin başlatılıp başlatılmadığını kontrol edin.

k0s kubectl get pod

Örnek çıktı:

# k0s kubectl get pods --all-namespaces
NAMESPACE     NAME                              READY   STATUS    RESTARTS   AGE
kube-system   coredns-7bf57bcbd8-sq5zm          1/1     Running   0          67s
kube-system   konnectivity-agent-rjrpk          1/1     Running   0          62s
kube-system   kube-proxy-dd9rm                  1/1     Running   0          65s
kube-system   kube-router-wf587                 1/1     Running   0          66s
kube-system   metrics-server-7446cc488c-sg9ww   1/1     Running   0          62s

Bölmelerin ortaya çıkmasının biraz zaman aldığını unutmayın.

Kullanılabilir düğümleri kontrol edin

# k0s kubectl get nodes -o wide
NAME                      STATUS     ROLES    AGE   VERSION       INTERNAL-IP    EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION     CONTAINER-RUNTIME
ubuntu01.cloudspinx.com   NotReady   <none>   7s    v1.33.1+k0s   172.35.1.221   <none>        Ubuntu 24.04.2 LTS   6.8.0-60-generic   containerd://1.7.27

Çalışan Düğümlerini k0s Kümesine Ekleme

Bir sonraki aşama, çalışan düğümlerini k0s kümesine eklemektir. Bunu yapmak için, çalışan düğümü olarak kullanmayı düşündüğümüz sunucuya k0s ikili dosyasını indirip kurmamız gerekiyor.

Çalışan düğümünü ayarlamaya başlamadan önce, düğümü kümeye katmak için kullanacağımız kimlik doğrulama belirtecini oluşturmamız gerekir.

Denetleyici düğümünde, belirteci oluşturmak için aşağıdaki komutu çalıştırın

k0s token create --role=worker

Yukarıdaki komut, çalışan düğümünün kimliğini doğrulamak için kullanılacak bir karakter dizisi oluşturur.

Çalışan düğümünde k0s ikili dosyasını indirin

sudo su -
curl -sSLf https://get.k0s.sh | sudo sh

İkili dosya nihayet başarıyla indirildiğinde, denetleyicide düğümün kimliğini doğrulamak için aşağıdaki komutu çalıştırın.

k0s worker <login-token> &

<login-token> değerini önceki adımda denetleyici düğümünde oluşturulan belirteçle değiştirin.

sudo k0s worker "H4sIAAAAAAAC/2xVUY+bPBZ9n1+RPzCtDcmoRNqHktghZHBqY5vgN8B0IDbEBSZhstr/vpq0lXal7+36nqNzrKure54K18p6GNtLv15c4VNl38epHsb10/PiT71+WiwWi7EervWwXjTT5Mb1168w8L7Al29fIABfPBisX5ZL/0Gs6mFqf7ZVMdXPxfvUXIZ2+njWxVSsF68pmF5TuGFCx7wNt0zGIhUqpgAL9sDAtDE....6n31Hxu/4dFX9z48H6bLyPj9d7Wdt6ei4vl2mchsL9v9r7MNT99PxX6dE0ba/Xi82l/9m+Pbmh/lkPdV/V43rx7/88fao+zP+I/IP8w/jxheli6n69COr6rfW/jFr/fHmf9bJrpzME8Om/AQAA//8V8FiGBwcAAA==" & 

Düğüme hazır hale gelmeden önce birkaç dakika verin. Bunun nedeni, nework, dns ve proxy için bölmelerin başlatılmasıdır.

Ardından, düğümün başarıyla eklenip eklenmediğini onaylamak için mevcut düğümleri kontrol edebilirsiniz.

k0s kubectl get nodes -o wide

K0s kümesine denetim düğümleri ekleme

Tıpkı çalışan düğümleri gibi, ek bir kontrol düğümü için mevcut denetleyici düğümünde bir belirteç oluşturmamız gerekecek.

sudo su -
k0s token create --role=controller

İkincil kontrol düğümü olarak kullanmayı düşündüğünüz ana bilgisayara k0s ikili dosyasını indirin:

sudo su -
curl -sSLf https://get.k0s.sh | sudo sh

Daha önce oluşturulan belirteci kullanarak düğümü kümeye ekleyin

k0s controller "<token>"

Örnek:

k0s controller "H4sIAAAAAAAC/3RVwXKjOhbd5yv8A+kngZ2OXTWLxpaMcZBbQhJGO0AkYAlQA7GJp+bfp5J+XTWzeLure06do7p1656H3DWyGsam7zaLK3wo7fs4VcO4eXhc/F1vHhaLxWKshms1bBb1NLlx89dfcO19g0/P3yAA3zy43qyXS/+LWFbD1Lw2ZT5Vj/n7VPdDM3086nzKN4uXBEwvCdwyoSPeBDsmI5EIFVGABfvCwLQWFgNScNsRHLgThSyVZaBsFPDo5/32bMDX2jQCYS2X0iSCCR+LrLL7T/18Ni0eVttVkYMD6UfTdV8/Q7Kn7Xv6PiT258sT4b7+Pn65Mz9NZWw2PR99M4Dbn7f8H3Yai66fGP2FfTNJ3eLLZ999q8Pbiheq2GqiurcbP4938ePoW//H+L/IPDl/3XR6beVN1mMS+fvz9X396+L4en9++v93v9alfv7w//DQAA//8NPyCvDQcAAA=="

Başarılı bir kimlik doğrulamasından sonra, yeni denetleyici düğümünün durumunu denetleyin:

# k0s status
Version: v1.33.1+k0s.0
Process ID: 2154
Role: controller
Workloads: true
SingleNode: false
Kube-api probing successful: true

Yeni düğümün katıldığını ve bir denetleyici rolüyle çalıştığını doğrulayabiliriz. Bu, get nodes komutunu çalıştırdığınızda düğümün kullanılabilir düğümlerde listelenmeyeceği anlamına gelir.

İkincil bir denetleyici düğümü kurmanın k0s kümenizde kararsızlığa neden olabileceğini unutmayın ve şu anda tek bir denetleyici düğümü kullanmanız önerilir.

k0s kümesini uzaktan yönetin

Yerel kubectl’i kullanarak kümenizi uzaktan yönetmek isteyebilirsiniz. K0s, KUBECONFIG dosyasını /var/lib/k0s/pki/admin.conf konumunda depolar.

Bu, yapılandırma dosyasını kolayca kopyalayabileceğiniz ve kümenize uzaktan erişmek için kullanabileceğiniz anlamına gelir.

Yapılandırma dosyasını kullanıcı giriş dizinine kopyalayın.

sudo cp /var/lib/k0s/pki/admin.conf ~/k0s.conf

Denetleyici düğümünden k0s.conf dosyasını uzak sunucunuza indirin

scp  <username>@<SERVER_IP>:~/k0s.conf .

Örnek:

scp [email protected]:~/k0s.conf .

k0s.conf dosyasındaki ana bilgisayar ayrıntılarını localhost’tan denetleyici düğümünün IP adresine değiştirin. Ardından yapılandırma dosyasını dışa aktarın.

export KUBECONFIG=k0s.conf

Artık kubectl kullanarak kümenizi uzaktan yönetebilirsiniz.

Uygulamaları k0’larda Dağıtın

Uygulama dağıtımının k0s kümesinde çalışıp çalışmadığını test edebiliriz. Biz Nginx uygulamasını kullanacağız.

kubectl apply -f - <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2 
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80
EOF

Bölmenin çalışıp çalışmadığını kontrol edin:

$ kubectl get pods
NAME                               READY   STATUS    RESTARTS   AGE
nginx-deployment-585449566-csvsf   1/1     Running   0          105s
nginx-deployment-585449566-hhx6z   1/1     Running   0          106s

İki bölme başlatıldı ve çalışıyor durumda. Bunun nedeni, yapılandırma dosyamızda sayıyı veya replikaları 2 olarak belirtmiş olmamızdır.

Hizmeti kullanıma sunmak için, nginx dağıtımını ortaya çıkarmak için NodePort hizmetini kullanacağız

$ kubectl expose deployment nginx-deployment --type=NodePort --port=80
service/nginx-deployment exposed

Hizmetin maruz kaldığı bağlantı noktasını kontrol edin

$ kubectl get svc
NAME               TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
kubernetes         ClusterIP   10.96.0.1     <none>        443/TCP        7h23m
nginx-deployment   NodePort    10.96.242.1   <none>        80:31710/TCP   94s

Hizmet, NodePort kullanılarak 31710 numaralı bağlantı noktasında kullanıma sunuldu. Worker-node ip’ini ve portu kullanarak tarayıcı üzerinden uygulamaya erişebiliriz.

k0s Kubernetes Cluster’ı Kaldırma

k0s’yi kaldırmak için k0s hizmetini durdurmanız ve ardından her düğümde yüklemeyi kaldırmanız gerekir.

sudo k0s stop

K0s kurulumunu kaldır

$ sudo k0s reset
INFO[2021-07-13 11:46:59] no config file given, using defaults         
INFO[2021-07-13 11:46:59] * remove k0s users step:                     
INFO[2021-07-13 11:46:59] no config file given, using defaults         
INFO[2021-07-13 11:47:03] * uninstal service step                      
INFO[2021-07-13 11:47:03] Uninstalling the k0s service                 
INFO[2021-07-13 11:47:03] * remove directories step                    
INFO[2021-07-13 11:47:04] * CNI leftovers cleanup step                 
INFO k0s cleanup operations done. To ensure a full reset, a node reboot is recommended. 

 

 

 

Yazının orijinalini buradan okuyabilirsiniz.