Kubernetes: эффективные команды

  1. Расшировать параметр секрета.
kubectl get secret/db -o yaml | grep DB_PASSWORD | sed 's/.*DB_PASSWORD:\s//' | base64 --decode

где db - имя секрета, DB_PASSWORD - один из параметров секрета.

  1. Удалить все поды используя helm.
helm ls --all --short | xargs -L1 helm delete
  1. Удалить все поды в состоянии Evicted.
kubectl get pods | grep Evicted | awk '{print $1}' | xargs kubectl delete pod
  1. Скрипт для просмотра занятого пространства образами docker.
#!/usr/bin/env bash
for container in `kubectl get pods --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}'`
do
    echo -e "$container\t\t $(docker image ls `kubectl get pod $container -o jsonpath='{.spec.containers[0].image}'` --format='{{println .Size}}')"
done
  1. Скрипт для для установления соответствия между задеплоеными подами, нодами, где они находятся и зоной в которой располагаются.
#!/usr/bin/env bash

set -euo pipefail

PODZONES=()
for POD in $(kubectl get pods -o custom-columns=NAME:.metadata.name --no-headers)
  do
    NODE=$(kubectl get pod ${POD} -o=jsonpath='{.spec.nodeName}')
    ZONE=$(kubectl get nodes -o json | jq  -r --arg NODE "${NODE}" '.items[].metadata | {name, labels} | select(.name==$NODE) | .labels."topology.kubernetes.io/zone"')
    PODZONES+=(${ZONE})
    echo -e "${POD}\t${NODE}\t${ZONE}"
done

CPODS=$(kubectl get pods -o custom-columns=NAME:.metadata.name --no-headers | wc -l)
CNODES=$(kubectl get nodes -o custom-columns=NAME:.metadata.name --no-headers | wc -l)
CZONES=$(kubectl get nodes -o json | jq  -r '.items[].metadata.labels."topology.kubernetes.io/zone"' | sort | uniq -c)
echo "----------ИТОГО:----------"
echo -e "Всего подов:\t${CPODS}"
echo -e "Всего нод:\t${CNODES}"
echo -e "Количество зон нод:\n${CZONES}"
echo "Количество подов в зонах:"
printf "%s\n" "${PODZONES[@]}" | sort | uniq -c 

Certification Kubernetes Administrator

  1. Создать NGINX под.
kubectl run --generator=run-pod/v1 nginx --image=nginx

или

kubectl run --image=nginx nginx
  1. Сгенерировать YAML манифест без создания пода.
kubectl run --generator=run-pod/v1 nginx --image=nginx --dry-run -o yaml
  1. Создать deployment.
kubectl create deployment --image=nginx nginx
  1. Создать сервис и открыть порт для пода в deployment.
kubectl expose deployment nginx --port 80
  1. Создать сервис и именем redis-service и открыть порт 6379 для него. Команда выведет конфигурацию в yaml-формате, без применения в кластере.
kubectl expose pod redis --port=6379 --name redis-service --dry-run=client -o yaml

или следующая команда выведет конфигурацию для сервиса в формате yaml с маппингом портов без применения в кластере.

kubectl create service clusterip redis --tcp=6379:6379 --dry-run=client -o yaml

или следующая команда создать сервис с типом NodePort без применения в кластере.

kubectl expose pod nginx --port=80 --name nginx-service --type=NodePort --dry-run=client -o yaml

или следующая команда создать NodePort сервис с выделением внешнего порта и маппингом портов пода/сервиса.

kubectl create service nodeport nginx --tcp=80:80 --node-port=30080 --dry-run=client -o yaml
  1. Редактировать параментры deployment.
kubectl edit deployment nginx
  1. Сгенерировать YAML манифест без создания deployment.
kubectl create deployment --image=nginx nginx --dry-run -o yaml
  1. Сгенерировать YAML манифест без создания deployment с 4 репликами и сохранить в файл.
kubectl create deployment --image=nginx --replicas=4 nginx --dry-run -o yaml > nginx-deployment.yaml
  1. Создать namespace.
kubectl create namespace <имя>
  1. Переключиться на namespace.
kubectl config set-context $(kubectl config current-context) --namespace=dev
  1. Созать квоту для namespace.
apiVersion: v1
kind: ResourceQuota
metadata:
  name: compute-quota
  namespace: dev
spec:
  hard:
    pods: "10"
    requests.cpu: "4"
    requests.memory: 5Gi
    limits.cpu: "10"
    limits.memory: 10Gi
  1. Установить новый образ контейнера в deployment ресурс:
kubectl set image deployment nginx nginx=nginx:1.18
  1. Установить под на определенной ноде кластера.
apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
	  - image: nginx
	    name: nginx
  nodeName: node01
  1. Просмотреть соответствие labels и pod.
kubectl get pods --show-labels

Посмотреть соответствие ReplicaSet и Pod.

kubectl get sts --show-labels
  1. Отфильтровать pods по labels.
kubectl get pods -l env=prod,tier=frontend
  1. Установить для ноды Taints.
kubectl taint nodes <node-name> key=value:taint-effect

Taint-effect принимает значения - NoSchedule, PreferNoSchedule, NoExecute.

Пример:

kubectl taint nodes node1 app=blue:NoSchedule
  1. Установить label для ноды и разместить под на данной ноде.
kubectl label nodes <node-name> <label-key>=<label-value>

В Yaml-файле указать nodeSelector с необходимым label.

apiVersion: v1
kind: Pod
metadata: 
  name: myapp-pod
spec:
  containers:
  - name: data-processor
    image: data-processor
  nodeSelector:
    size: Large
  1. Получить команду для подключения нод к кластеру.
kubeadm create token --print-join-command
  1. Посмотреть логи с предыдущего пода, перед рестартом.
kubectl logs -f web --previous
Сведения о статье:
Дата публикации: 06/08/2020 7:14PM
Последнее обновление: 19/07/2021 4:54PM (rmntrvn)
Поделиться статьей: 
Автор: rmntrvn
Постоянная ссылка: http://kb.rmntrvn.ru/kb/kubernetes-effective-commands
kubernetes | secret |