K3S ilə minimal kubernetes qurulması ( Nginx + Cert-Manager + ArgoCD)

K3S və Nginx-Ingress Reverse Proxy quraşdırılması
Ön tələblər:
- Fərdi Domain
- Linux Server ( Ubuntu Server 24.04)
1.K3S yüklə.
curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--disable traefik" sh -s -
# to check
k3s --version
Burada, yuxarıdakı koddan da göründüyü kimi, quraşdırmanı Traefik olmadan etdik. Əvəzində Nginx istifadə edəcəyik, çünki o, Traefik-dən daha yaxşı performansa malikdir.
2.Cloudflare-ə Wildcard və root domain recordu əlavə et.
A - @ - <your-ip>
A - * - <your-ip>
Nümunə Ekran Görüntüsü:

3.APT üzərindən Helm template manager yüklə.
curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null
sudo apt-get install apt-transport-https --yes
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/helm.gpg] https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list
sudo apt-get update
sudo apt-get install helm
4.K3S konfiqurasiyasını path-ə əlavə et.
echo 'export KUBECONFIG=/etc/rancher/k3s/k3s.yaml' >> ~/.bashrc
source ~/.bashrc
5.Nginx-Ingress-i reverse proxy olaraq yüklə.
ingress-nginx.yaml -> /var/lib/rancher/k3s/server/manifests/ (avtomatik tətbiq üçün)
apiVersion: v1
kind: Namespace
metadata:
name: ingress-nginx
---
apiVersion: helm.cattle.io/v1
kind: HelmChart
metadata:
name: ingress-nginx
namespace: kube-system
spec:
chart: ingress-nginx
repo: https://kubernetes.github.io/ingress-nginx
targetNamespace: ingress-nginx
version: v4.12.1
set:
valuesContent: |-
fullnameOverride: ingress-nginx
controller:
kind: DaemonSet
hostNetwork: true
hostPort:
enabled: true
service:
enabled: false
publishService:
enabled: false
metrics:
enabled: true
serviceMonitor:
enabled: false
config:
use-forwarded-headers: "true"
Yoxlamaq üçün:
kubectl get pods -n ingress-nginx
K3S və Nginx quraşdırılmasıyla birinci hissə tamamlandı. Beləliklə növbəti hissəyə — sertifikatların əldə edilməsinə keçə bilərik.
Wildcard sertifikatı əldə etmək üçün Cert-manager quraşdırılması
Kubernetes secretlərini daha anlaşılan olması üçün secret-domain-com kimi adlandırıram. Siz bunları öz domaininizə uyğun olaraq dəyişdir.
1.Cert-manager yüklə.
## CRD-ni tətbiq et
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.17.1/cert-manager.crds.yaml
## Namespace yarat
kubectl create namespace cert-manager
## Repo-nu əlavə et
helm repo add jetstack https://charts.jetstack.io --force-update
## Repo-nu yenilə
helm repo update
## Cert-Manager- yüklə
helm install cert-manager --namespace cert-manager --version v1.17.1 jetstack/cert-manager
Yoxlamaq üçün:
kubectl get pods -n cert-manager
2.Cloudflare API token-i ilə bir secret yarat:
Cloudflare-də Zone.DNS:Edit icazəsi olan bir API token yarat, sonra həmin açarı cloudflare-secret.yaml
faylına əlavə edin və K3S-ə tətbiq et.

cloudflare-secret.yaml:
apiVersion: v1
kind: Secret
metadata:
name: cloudflare-api-token-site-com # edit
namespace: cert-manager
type: Opaque
stringData:
api-token: <token> # edit
Tətbiq et:
kubectl apply -f cloudflare-secret.yaml
Yoxlamaq üçün:
kubectl get secrets -n cert-manager
3.Let's Encrypt üçün bir ClusterIssuer yarat .
cluster-issuer.yaml
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-prod-site-com # edit
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: [email protected] # edit
privateKeySecretRef:
name: letsencrypt-prod-key-site-com # edit
solvers:
- dns01:
cloudflare:
email: [email protected] # edit
apiTokenSecretRef:
name: cloudflare-api-token-site-com # edit
key: api-token
Tətbiq et:
kubectl apply -f cluster-issuer.yaml
Yoxlamaq üçün:
kubectl get clusterissuer -n cert-manager
4.Hər iki domain üçün Wildcard sertifikatları al
certificates.yaml
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: wildcard-site-com # edit
namespace: kube-system
spec:
secretName: wildcard-site-com-tls # edit
issuerRef:
name: letsencrypt-prod-site-com # edit
kind: ClusterIssuer
dnsNames:
- "*.site.com" # edit
- "site.com" # edit
Tətbiq et:
kubectl apply -f certificates.yaml
Yoxlamaq üçün:
kubectl describe certificate -n kube-system
kubectl get secret wildcard-site-com-tls -n kube-system
Aşağıdakı şəkildən də göründüyü kimi, sertifikatımız uğurla əldə edildi:

Argocd quraşdırılması
Argocd-nin yüklənməsi hissəsi ilə davam edə bilərik:
1.Namespace yaradın və argocd yüklə:
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
Yoxlamaq üçün:
kubectl get pods -n argocd
2.Tls secret-i köçür:
kubectl get secret wildcard-site-com-tls --namespace=kube-system -o yaml \ # edit
| sed 's/namespace: kube-system/namespace: argocd/' \
| kubectl apply -f -
3.İngress-i tətbiq et:
argocd-ingress.yaml:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: argocd-server-ingress
namespace: argocd
annotations:
nginx.ingress.kubernetes.io/ssl-passthrough: "true"
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
spec:
ingressClassName: nginx
rules:
- host: argocd.site.com # edit
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: argocd-server
port:
name: https
tls:
- hosts:
- argocd.site.com # edit
secretName: wildcard-site-com-tls # edit
Tətbiq et:
kubectl apply -f argocd-ingress.yaml
Yoxlamaq üçün:
kubectl get ingress -n argocd
Artıq aşağıda göründüyü kimi argocd.site.com ünvanına daxil ola bilirik:
4.Default admin parolunu götür:
kubectl get secret argocd-initial-admin-secret -n argocd -o jsonpath="{.data.password}" | base64 -d
5.Daxil olun və defaul parolu dəyişdir
6.Default parolu sil:
kubectl delete secret argocd-initial-admin-secret -n argocd
ArgoCD+Wildcard Sertifikatı ilə əldə etdiyimiz son nəticə aşağıdakı kimi olmalıdır:
Ümumi sistem məlumatlarını əldə etmək üçün komandalar:
kubectl get namespaces
kubectl get pods -A -o wide
kubectl get deployments -A -o wide
kubectl get services -A -o wide
kubectl get ingress -A -o wide