EğitimlerKonteynerler ve Docker
Ubuntu'ya K3s nasıl kurulur: Traefik ve HTTPS ile tek düğümlü Kubernetes
K3s'i resmi betikle Ubuntu'ya kurun, kubectl'i kendi kullanıcınızla kullanın, test uygulamasını Traefik ve Let's Encrypt ile yayınlayın, yedekleyip yükseltin.
- Orta
- 45 dk okuma
- Güncellendi
Denendiği sistemler: Ubuntu 24.04 LTS, Ubuntu 26.04 LTS
Bu sayfada
- Ön koşullar
- Adım 1 — Yalnızca K3s'in ihtiyaç duyduğu portları açın
- Adım 2 — Kurulum betiğini indirin ve inceleyin
- Adım 3 — K3s'i kurun
- Adım 4 — kubectl'i yönetici kullanıcınızla kullanın
- Adım 5 — Traefik arkasına bir test uygulaması dağıtın
- Adım 6 — cert-manager ve Let's Encrypt ile HTTPS ekleyin
- Yedekleme ve geri yükleme
- K3s'i yükseltme
- K3s'i kaldırma
- Sorun giderme
- Traefik'in svclb pod'ları Pending durumunda kalıyor, 80 ve 443 portları yanıt vermiyor
- ufw açıkken pod'lar ad çözemiyor veya servislere ulaşamıyor
- The connection to the server 127.0.0.1:6443 was refused
- kubectl sunucuda oturum açmanız gerektiğini söylüyor
- Sertifika hiç hazır olmuyor
- Sonraki adımlar
K3s, tek bir ikili dosya olarak paketlenmiş, hafif ve tam uyumlu bir Kubernetes dağıtımıdır. containerd'yi, Flannel ağını, CoreDNS'i, local-path depolama sağlayıcısını, ServiceLB yük dengeleyicisini ve Traefik ingress denetleyicisini birlikte getirir; bu sayede tek bir sunucu gerçek bir Kubernetes kümesi çalıştırmaya yeter. Bu rehber K3s'i bir Ubuntu LTS sunucusuna resmi kurulum betiğiyle (önce indirip okuyarak) kurar, yönetici kullanıcınız için kubectl ayarlar, bir test uygulamasını Traefik üzerinden yayınlar, cert-manager ile Let's Encrypt sertifikaları ekler; yedekleme, yükseltme ve kaldırma konularını da ele alır.
Ön koşullar
- Ubuntu 26.04 LTS veya Ubuntu 24.04 LTS çalıştıran bir sunucu. SUSE'nin v1.36 için K3s destek matrisi Ubuntu 26.04, 24.04 ve 22.04'ü doğrular. Debian bu matrikste yer almaz; K3s belgeleri K3s'in çoğu modern Linux sisteminde çalışması gerektiğini söyler ve Debian için kurulum notları verir, ancak bu rehber yalnızca doğrulanmış Ubuntu sürümlerini esas alır.
sudoyetkisi ve SSH anahtarıyla girişi olan, root olmayan bir kullanıcı; Yeni bir Linux sunucusunu güvenli hale getirin ve SSH anahtarlarını ayarlayın rehberlerindeki gibi.- Sunucu için benzersiz bir ana makine adı (K3s her düğümde bunu ister).
- Boş 80 ve 443 portları. Traefik bu portları ServiceLB üzerinden alır; bu nedenle aynı makinede Caddy, Nginx veya başka bir web sunucusu çalıştırmayın.
- HTTPS bölümü için: sunucuyu gösteren bir A kaydına sahip
hello.example.comgibi bir alan adı. - Docker gerekmez: K3s kendi konteyner çalışma ortamını getirir.
| Kaynak | En düşük (resmi) | Önerilen başlangıç |
|---|---|---|
| CPU | Sunucu düğümü başına 2 çekirdek | Öğrenmek için 2 vCPU, gerçek iş yükleri için 4 vCPU |
| Bellek | Sunucu düğümü başına 2 GB | 4 GB veya daha fazlası |
| Disk | SSD önerilir; veri deposu yoğun yazma yapar | 40 GB SSD |
En düşük değerler K3s gereksinimler sayfasından alınmıştır. Sağ sütun temkinli bir başlangıç noktasıdır; resmi veya ölçülmüş bir değer değildir. İş yüklerinizin ihtiyacını bunun üzerine ekleyin.
Adım 1 — Yalnızca K3s'in ihtiyaç duyduğu portları açın
Tek düğümde internetin yalnızca SSH'ye ve 80 ile 443 portlarındaki Traefik'e ulaşması gerekir. K3s gereksinimlerindeki diğer portlar (agent'lar için 6443, Flannel VXLAN için 8472/udp, kubelet için 10250, etcd için 2379-2380) düğümler arası trafiği taşır. K3s belgeleri ufw'nin kapatılmasını önerir ve açık tutmak isteyenler için kurallar verir. Bu rehber ufw'yi bu kurallarla açık tutar: iki from satırı varsayılan pod ağına (10.42.0.0/16) ve servis ağına (10.43.0.0/16) izin verir.
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow from 10.42.0.0/16 to any
sudo ufw allow from 10.43.0.0/16 to any
sudo ufw enable
sudo ufw status verbosekubectl komutunu SSH tüneli olmadan kendi bilgisayarınızdan çalıştırmak istiyorsanız API portuna yalnızca kendi adresinizden izin verin (belgelendirme IP'sini kendi adresinizle değiştirin):
sudo ufw allow from 198.51.100.25 to any port 6443 proto tcpAdım 2 — Kurulum betiğini indirin ve inceleyin
Resmi kurulum yöntemi get.k3s.io adresindeki betiktir. Root olarak ne yapacağını okuyabilmek için önce indirin:
curl -sfL https://get.k3s.io -o k3s-install.sh
less k3s-install.shKısaca betik şunları yapar:
- systemd'yi (veya OpenRC'yi) algılar ve bir sunucu mu yoksa
K3S_URLayarlıysa bir agent mı kuracağına karar verir; INSTALL_K3S_VERSIONveyaINSTALL_K3S_CHANNELayarlamadıysanız sürümüupdate.k3s.ioüzerindekistablekanalından öğrenir;k3sikili dosyasını projenin GitHub sürümlerinden indirir, SHA-256 sağlamasını doğrular ve/usr/local/bin/k3skonumuna kurar;kubectl,crictlvectrkomutları henüz yoksa bunlar için sembolik bağlantılar ilek3s-killall.shvek3s-uninstall.shbetiklerini oluşturur;k3ssystemd birimini ve ortam dosyasını/etc/systemd/system/altına yazar, ardından servisi etkinleştirip başlatır.
Adım 3 — K3s'i kurun
İncelediğiniz betiği çalıştırın:
sudo sh k3s-install.shServisi ve kümeyi kontrol edin:
sudo systemctl status k3s --no-pager
sudo kubectl get nodes
sudo kubectl get pods -ADüğüm yaklaşık bir dakika sonra Ready olarak listelenir. kube-system içinde coredns, local-path-provisioner, metrics-server, traefik ve bir svclb-traefik pod'unu Running, helm-install işlerini ise Completed olarak görmelisiniz.
Adım 4 — kubectl'i yönetici kullanıcınızla kullanın
K3s yönetici kubeconfig dosyasını yalnızca root'un okuyabildiği /etc/rancher/k3s/k3s.yaml konumuna yazar. Bu dosya tam cluster-admin yetkisi verir; özgün dosyayı herkese okunabilir yapmak yerine kendi kullanıcınıza özel bir kopya verin:
mkdir -p ~/.kube
sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
sudo chown $USER:$USER ~/.kube/config
chmod 600 ~/.kube/config
echo 'export KUBECONFIG=$HOME/.kube/config' >> ~/.bashrc
export KUBECONFIG=$HOME/.kube/config
kubectl get nodeskubectl get nodes artık sudo olmadan çalışır. K3s her başladığında k3s.yaml içindeki sertifikaları yeniler, ancak kopyalar güncellenmez; kubectl bir gün yetkisiz olduğunuzu bildirirse dosyayı yeniden kopyalayın.
Kümeyi kendi bilgisayarınızdan kullanmak için ~/.kube/config dosyasını oraya kopyalayın. En basit güvenli yol, server: https://127.0.0.1:6443 satırını geçerli tutan bir SSH tünelidir:
ssh -L 6443:127.0.0.1:6443 user@203.0.113.10Bunun yerine Adım 1'de 6443 portunu IP adresinize açtıysanız server alanındaki 127.0.0.1 değerini sunucunun adresiyle değiştirin.
Adım 5 — Traefik arkasına bir test uygulaması dağıtın
K3s, Traefik'i bir IngressClass ile dağıtır. Adını doğrulayın:
kubectl get ingressclasstraefik görmelisiniz. Şimdi bir namespace, bir Nginx deployment'ı, bir servis ve hello.example.com için bir ingress içeren bir manifest oluşturun. nano hello.yaml ile yeni bir dosya açın ve şunu yapıştırın:
apiVersion: v1
kind: Namespace
metadata:
name: hello
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello
namespace: hello
spec:
replicas: 1
selector:
matchLabels:
app: hello
template:
metadata:
labels:
app: hello
spec:
containers:
- name: web
image: nginx:stable
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: hello
namespace: hello
spec:
selector:
app: hello
ports:
- port: 80
targetPort: 80
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: hello
namespace: hello
spec:
ingressClassName: traefik
rules:
- host: hello.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: hello
port:
number: 80Uygulayın ve test edin; önce sunucunun kendisinde bir Host başlığıyla, ardından DNS üzerinden:
kubectl apply -f hello.yaml
kubectl -n hello get pods,svc,ingress
curl -I -H "Host: hello.example.com" http://127.0.0.1
curl -I http://hello.example.comİki istek de Server: nginx ile HTTP/1.1 200 OK döndürür. Trafik 80 portundaki ServiceLB'den Traefik'e, oradan da hello servisine akar.
Adım 6 — cert-manager ve Let's Encrypt ile HTTPS ekleyin
Traefik TLS sonlandırabilir ama sertifikaya ihtiyaç duyar. Kubernetes içinde sertifika almanın ve yenilemenin yaygın yolu cert-manager'dır. cert-manager belgelerindeki statik manifest ile kurun (Ekim 2026'da kurulum sayfasının gösterdiği sürüm v1.21.2'dir; daha yenisi için sayfayı kontrol edin):
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.21.2/cert-manager.yaml
kubectl -n cert-manager wait --for=condition=Available deployment --all --timeout=300s
kubectl -n cert-manager get podscert-manager, cert-manager-cainjector ve cert-manager-webhook pod'ları Running olmalıdır. Ardından Let's Encrypt HTTP-01 doğrulamalarını Traefik üzerinden çözen bir ClusterIssuer oluşturun. Kendi e-posta adresinizle clusterissuer.yaml olarak kaydedin:
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: [email protected]
privateKeySecretRef:
name: letsencrypt-prod-account-key
solvers:
- http01:
ingress:
ingressClassName: traefikkubectl apply -f clusterissuer.yaml
kubectl get clusterissuercert-manager ACME hesabını kaydettiğinde READY değeri True olur. Şimdi ingress'e bir annotation ve bir tls bölümü ekleyerek sertifika isteyin. Bunu hello-ingress.yaml olarak kaydedin:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: hello
namespace: hello
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
ingressClassName: traefik
tls:
- hosts:
- hello.example.com
secretName: hello-tls
rules:
- host: hello.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: hello
port:
number: 80kubectl apply -f hello-ingress.yaml
kubectl -n hello get certificate
curl -I https://hello.example.comBir dakika sonra sertifika READY True olarak görünür ve curl HTTPS üzerinden başarılı olur.
Yedekleme ve geri yükleme
Tek bir K3s sunucusu varsayılan olarak gömülü bir SQLite veri deposu kullanır. Durum bilgisi /var/lib/rancher/k3s/server/db/ içinde durur; /var/lib/rancher/k3s/server/token konumundaki sunucu token'ı ise buradaki gizli verileri şifreler. Aynı token olmadan geri yüklenen veri deposu kullanılamaz. Tutarlı bir kopya için K3s'i durdurun (çalışan pod'lar boşaltılmaz ama API kısa bir süre erişilemez olur), ikisini /etc/rancher/k3s ile birlikte arşivleyin ve yeniden başlatın:
sudo mkdir -p /opt/backups
sudo systemctl stop k3s
sudo tar czf /opt/backups/k3s-server-$(date +%F).tar.gz /var/lib/rancher/k3s/server/db /var/lib/rancher/k3s/server/token /etc/rancher/k3s
sudo systemctl start k3sBu arşiv uygulama verilerinizi değil küme durumunu içerir. Varsayılan local-path StorageClass'ın kalıcı volume'ları /var/lib/rancher/k3s/storage altında durur; bunların içindeki veritabanlarını kendi döküm araçlarıyla yedekleyin. Manifestlerinizi (hello.yaml vb.) Git'te tutun ve her yedeği sunucunun dışına kopyalayın.
Aynı sunucuya geri yüklemek için INSTALL_K3S_VERSION ile aynı K3s sürümünü kurun, ardından veri deposunu ve token'ı değiştirin.
sudo systemctl stop k3s
sudo rm -rf /var/lib/rancher/k3s/server/db
sudo tar xzf /opt/backups/k3s-server-2026-10-09.tar.gz -C /
sudo systemctl start k3sKurulumu --cluster-init ile yaptıysanız K3s, SQLite yerine gömülü etcd kullanır. Bu durumda 00:00 ve 12:00'de kendiliğinden anlık görüntü alır ve son beşini /var/lib/rancher/k3s/server/db/snapshots içinde tutar. İstediğiniz an bir tane alabilirsiniz:
sudo k3s etcd-snapshot save
sudo ls /var/lib/rancher/k3s/server/db/snapshotsBir etcd anlık görüntüsünü geri yüklemek için K3s'i durdurun ve K3s etcd-snapshot belgelerinde anlatıldığı gibi sudo k3s server --cluster-reset --cluster-reset-restore-path= komutunu anlık görüntünün yoluyla birlikte çalıştırın.
K3s'i yükseltme
K3s sürüm kanalları yayınlar: stable (varsayılan ve üretim için önerilen), latest ve v1.36 gibi her Kubernetes ara sürümü için ayrı bir kanal. Yükseltmek için betiği yeniden indirin ve kurulumda kullandığınız ortam değişkenleri ve seçeneklerle tekrar çalıştırın. /etc/rancher/k3s/config.yaml içindeki seçenekler korunur; ancak komut satırında verdiğiniz ve şimdi yazmadığınız her şey kaybolur.
curl -sfL https://get.k3s.io -o k3s-install.sh
sudo INSTALL_K3S_CHANNEL=stable sh k3s-install.sh
kubectl get nodesVERSION sütunu yeni sürümü gösterir. Kubernetes ara sürümlerini atlamayın: stable sizden birden fazla ara sürüm ilerideyse sürüm kanalları üzerinden adım adım yükseltin; örneğin INSTALL_K3S_CHANNEL=v1.36 ile. Önce sürüm notlarını okuyun ve yedek alın. Elle uğraşmadan yükseltme için K3s, bir kanalı izleyen yükseltme planlarını (Plan) uygulayan system-upgrade-controller'ı belgeler.
K3s'i kaldırma
sudo /usr/local/bin/k3s-uninstall.shSorun giderme
Traefik'in svclb pod'ları Pending durumunda kalıyor, 80 ve 443 portları yanıt vermiyor
ServiceLB, Traefik'i 80 ve 443 ana makine portlarında yayınlar ve pod'ları yalnızca bu portların boş olduğu düğümlerde başlar. Portları büyük olasılıkla başka bir web sunucusu (Caddy, Nginx, Apache) veya Docker'dan bir konteyner tutuyordur. sudo ss -tlnp | grep -E ':(80|443) ' ile kontrol edin, diğer servisi durdurun ve pod'ların başlamasını bekleyin.
ufw açıkken pod'lar ad çözemiyor veya servislere ulaşamıyor
Güvenlik duvarı pod ve servis ağlarından gelen trafiği engelliyor. Adım 1'deki from 10.42.0.0/16 ve from 10.43.0.0/16 kurallarını ekleyin ya da K3s'in önerisini izleyerek ufw'yi kapatıp sağlayıcınızın ağ güvenlik duvarını kullanın.
The connection to the server 127.0.0.1:6443 was refused
K3s servisi çalışmıyor veya hâlâ başlıyor. sudo systemctl status k3s ile kontrol edin ve logu sudo journalctl -u k3s -e ile okuyun. Sık görülen nedenlerden biri /etc/rancher/k3s/config.yaml içindeki hatalı bir seçenektir.
kubectl sunucuda oturum açmanız gerektiğini söylüyor
Kubeconfig kopyanız, K3s'in sonradan yenilediği sertifikaları içeriyor. Adım 4'teki kopyalama komutlarını tekrarlayın.
Sertifika hiç hazır olmuyor
kubectl -n hello describe certificate hello-tls ve kubectl get challenges -A komutlarını çalıştırın. Hataların çoğu, henüz sunucuyu göstermeyen DNS kayıtlarından veya 80 portunun engellenmesinden kaynaklanır; çünkü Let's Encrypt'in HTTP-01 doğrulaması Traefik'e düz HTTP üzerinden ulaşmak zorundadır.
Sonraki adımlar
- Traefik'in bağımsız bir proxy olarak kullanımını Traefik reverse proxy rehberinde karşılaştırın.
- Yalnızca birkaç konteynere ihtiyacınız varsa Docker ile Portainer daha basit bir seçenektir.
- Kümeler için boyutlandırılmış sunuculara Kubernetes VPS sayfasında göz atın.
- Yüksek erişilebilirlik, agent'lar ve yapılandırma seçenekleri için resmi K3s belgelerini okuyun.
Sık sorulan sorular
K3s'i çalıştırmak için Docker gerekir mi?
Hayır. K3s kendi containerd çalışma ortamını crictl ve ctr araçlarıyla birlikte getirir. Docker aynı sunucuda çalışabilir, ancak 80 ve 443 portlarını paketle gelen Traefik ingress denetleyicisi için boş bırakın.
Tek düğümlü bir K3s kümesi üretim için yeterli mi?
Tek bir K3s sunucusu eksiksiz bir Kubernetes kümesidir ve küçük iş yükleri için iyi çalışır, ancak tek arıza noktasıdır. Yedeklilik için K3s, gömülü etcd veya harici bir veri deposu ile ek sunucu düğümlerini destekler.
Tek düğümlü bir K3s sunucusu hangi portlara ihtiyaç duyar?
İnternetten yalnızca SSH ile Traefik için 80 ve 443. 6443 Kubernetes API portudur; kubectl'i uzaktan çalıştıracaksanız yalnızca kendi IP adresinize açın. K3s belgelerindeki diğer portlar düğümler arası trafik içindir.
K3s kubeconfig dosyası nerede?
K3s yönetici kubeconfig dosyasını yalnızca root'un okuyabildiği /etc/rancher/k3s/k3s.yaml konumuna yazar. Yönetici kullanıcınız için ~/.kube/config konumuna kopyalayın ve K3s sertifikaları yeniledikten sonra yeniden kopyalayın; kopyalar kendiliğinden güncellenmez.
Paketle gelen Traefik'i kapatabilir miyim?
Evet. Tüm sunucuları --disable=traefik ile başlatın, örneğin /etc/rancher/k3s/config.yaml içinde bir disable girdisiyle; ardından tercih ettiğiniz ingress denetleyicisini kurun.
Kaynaklar
- docs.k3s.io/quick-start
- docs.k3s.io/installation/requirements
- docs.k3s.io/installation/configuration
- docs.k3s.io/cluster-access
- docs.k3s.io/networking/networking-services
- docs.k3s.io/add-ons/storage
- docs.k3s.io/datastore/backup-restore
- docs.k3s.io/cli/etcd-snapshot
- docs.k3s.io/upgrades/manual
- docs.k3s.io/upgrades/automated
- docs.k3s.io/installation/uninstall
- raw.githubusercontent.com/k3s-io/k3s/master/install.sh