logo
eng-flag

Kubernetes Notları ve İpuçları

İçindekiler

  1. Kubernetes Kurulumu
  2. Temel Kubernetes Komutları
  3. Podlarla Çalışma
  4. Dağıtımlar
  5. Servisler
  6. ConfigMap ve Secret'lar
  7. Ad Alanları (Namespaces)
  8. Kalıcı Depolama Alanları (Persistent Volumes)
  9. StatefulSet'ler
  10. DaemonSet'ler
  11. Job'lar ve CronJob'lar
  12. RBAC (Rol Tabanlı Erişim Kontrolü)
  13. Helm
  14. İzleme ve Loglama
  15. Sorun Giderme

Kubernetes Kurulumu

Minikube Kurulumu (yerel geliştirme için)

curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

kubectl Kurulumu

curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

Minikube'i Başlat

minikube start

Temel Kubernetes Komutları

Küme bilgilerini kontrol et

kubectl cluster-info

Düğüm bilgilerini al

kubectl get nodes

Tüm ad alanlarındaki tüm kaynakları al

kubectl get all --all-namespaces

Belirli bir kaynak hakkında ayrıntılı bilgi al

kubectl describe <resource_type> <resource_name>

Örnek:

kubectl describe pod my-pod

Podlarla Çalışma

Bir YAML dosyasından bir pod oluştur

kubectl apply -f pod.yaml

Tüm pod'ları listele

kubectl get pods

Belirli bir pod hakkında ayrıntılı bilgi al

kubectl describe pod <pod_name>

Bir pod'u sil

kubectl delete pod <pod_name>

Çalışan bir pod'da komut çalıştır

kubectl exec -it <pod_name> -- <command>

Örnek:

kubectl exec -it my-pod -- /bin/bash

Pod loglarını görüntüle

kubectl logs <pod_name>

Dağıtımlar

Bir dağıtım oluştur

kubectl create deployment <deployment_name> --image=<image_name>

Tüm dağıtımları listele

kubectl get deployments

Bir dağıtımı güncelle

kubectl set image deployment/<deployment_name> <container_name>=<new_image>

Bir dağıtımı ölçeklendir

kubectl scale deployment <deployment_name> --replicas=<number_of_replicas>

Bir dağıtımı sil

kubectl delete deployment <deployment_name>

Servisler

Bir servis oluştur

kubectl expose deployment <deployment_name> --type=<service_type> --port=<port>

Tüm servisleri listele

kubectl get services

Belirli bir servis hakkında ayrıntılı bilgi al

kubectl describe service <service_name>

Bir servisi sil

kubectl delete service <service_name>

ConfigMap ve Secret'lar

Bir ConfigMap oluştur

kubectl create configmap <configmap_name> --from-file=<path_to_file>

Bir Secret oluştur

kubectl create secret generic <secret_name> --from-literal=<key>=<value>

ConfigMap'leri listele

kubectl get configmaps

Secret'ları listele

kubectl get secrets

Ad Alanları (Namespaces)

Bir ad alanı oluştur

kubectl create namespace <namespace_name>

Tüm ad alanlarını listele

kubectl get namespaces

Geçerli ad alanını ayarla

kubectl config set-context --current --namespace=<namespace_name>

Kalıcı Depolama Alanları (Persistent Volumes)

Bir PersistentVolume oluştur

apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-pv
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: manual
  nfs:
    server: nfs-server.default.svc.cluster.local
    path: "/path/to/data"

Bir PersistentVolumeClaim oluştur

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
  storageClassName: manual

PersistentVolumes'ları listele

kubectl get pv

PersistentVolumeClaim'leri listele

kubectl get pvc

StatefulSet'ler

Bir StatefulSet oluştur

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  serviceName: "nginx"
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

StatefulSet'leri listele

kubectl get statefulsets

Bir StatefulSet'i ölçeklendir

kubectl scale statefulset <statefulset_name> --replicas=<number_of_replicas>

DaemonSet'ler

Bir DaemonSet oluştur

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: fluentd-elasticsearch
  namespace: kube-system
  labels:
    k8s-app: fluentd-logging
spec:
  selector:
    matchLabels:
      name: fluentd-elasticsearch
  template:
    metadata:
      labels:
        name: fluentd-elasticsearch
    spec:
      containers:
      - name: fluentd-elasticsearch
        image: quay.io/fluentd_elasticsearch/fluentd:v2.5.2

DaemonSet'leri listele

kubectl get daemonsets

Job'lar ve CronJob'lar

Bir Job oluştur

apiVersion: batch/v1
kind: Job
metadata:
  name: pi
spec:
  template:
    spec:
      containers:
      - name: pi
        image: perl
        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never
  backoffLimit: 4

Bir CronJob oluştur

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            args:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster
          restartPolicy: OnFailure

Job'ları listele

kubectl get jobs

CronJob'ları listele

kubectl get cronjobs

RBAC (Rol Tabanlı Erişim Kontrolü)

Bir rol oluştur

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: pod-reader
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "list", "watch"]

Bir rol bağlaması oluştur

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: read-pods
subjects:
- kind: User
  name: jane
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io

Roller ve Rol Bağlamalarını listele

kubectl get roles
kubectl get rolebindings

Helm

Helm kurulumu

curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

Bir Helm chart'ı yükle

helm install <release_name> <chart_name>

Yüklenen Helm chart'larını listele

helm list

Bir Helm chart'ı kaldır

helm uninstall <release_name>

İzleme ve Loglama

Prometheus ile izleme

  1. Prometheus ve Grafana'yı Helm kullanarak kurun:
helm install prometheus prometheus-community/prometheus
helm install grafana grafana/grafana

Loglama için EFK yığını

  1. Elasticsearch, Fluentd ve Kibana'yı kurun.

Sorun Giderme

Pod'larda sorun giderme

kubectl describe pod <pod_name>
kubectl logs <pod_name>
kubectl exec -it <pod_name> -- /bin/sh

Düğüm sorunları

kubectl describe node <node_name>
kubectl top node <node_name>

2024 © Tüm hakları saklıdır - buraxta.com