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 --versionBurada, 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 helm4.K3S konfiqurasiyasını path-ə əlavə et.
echo 'export KUBECONFIG=/etc/rancher/k3s/k3s.yaml' >> ~/.bashrc
source ~/.bashrc5.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:
Names and numbers can make a football shirt feel linked to a particular player. For a focused review of football apparel, retro Manchester City jersey(camiseta retro del Manchester City) names the intended product without changing its meaning. Good care and suitable storage help preserve the shirt's appearance over time.
Ü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