kubectl

Установка: https://kubernetes.io/ru/docs/tasks/tools/install-kubectl/ Доп. конфигурация: https://kubernetes.io/ru/docs/tasks/tools/install-kubectl/#дополнительная-конфигурация-kubectl

Resource Types

kubectl cheat sheet | ru

# --- ~/.bash_aliases
alias k=kubectl
alias kcf='kubectl create -f'
alias kcd='kubectl config set-context $(kubectl config current-context) --namespace'
alias kcdc="kubectl config view -o jsonpath='{.contexts[].context.namespace}' && echo ''"

CLI

General

# --- show cluster state
k cluster-info
# --- show components statuses
k get componentstatuses
# --- --- or
k get cs
# --- port forward
kubectl port-forward kubia 8080:8080
# --- top command for pods
kubectl top pod
# --- restart deployment
kubectl rollout restart deployment my-deployment

get

# --- get all resources in all namespaces
k get all --all-namespaces

# --- get secret with decode
#     -json for jq
#     -r for remove quotes
k get secret kdkop -o json | jq -r .data.snap01 | base64 --decode

delete

# --- delete almost all resources from current namespace
kubectl delete all --all
# --- delete with custom grace-period
kubectl delete po mypod --grace-period=5
# --- force delete without grace-period
kubectl delete po mypod --grace-period=0 --force

run

# --- quick pod run
k run nginx --image=nginx

# --- 
kubectl run httpie --image alpine/httpie  \
  --namespace prometheus \
  --env="DNS_DOMAIN=cluster" --env="POD_NAMESPACE=default"
  -- sleep 99999

# --- быстрый запуск множества реплик модуля
kubectl run test --image busybox --replicas 5 -- sleep 99999

# --- быстрый запуск модуля с циклической командой (имитация нагрузки)
kubectl run -it --rm --restart=Never loadgenerator --image=busybox -- sh -c \
  "while true; do wget -O – -q http://kubia.default; done"

# --- быстрый запуск модуля с назначением метки
kubectl run busybox -l app=busybox --image busybox -- sleep 999999

# --- запуск модуля с заданной учетной записью
k run test --image=luksa/kubectl-proxy --overrides='{ "spec": { "serviceAccount": "admin" } }'

# --- запуск пода с заданным nodeSelector
kubectl run test --image ubuntu \
  --overrides='{"spec": { "nodeSelector": {"role": "kdk"}}}' \
  -- sleep 999999

# --- quick start postgres with resources and env variables
#     --requests and --limits are deprecated 
kubectl run postgres --image postgres \
  --requests='cpu=50m,memory=50Mi' \
  --limits='cpu=100m,memory=100Mi' \
  --env='POSTGRES_PASSWORD=secret'

curl

k run test --image=luksa/kubectl-proxy
k exec -it test -- sh
curl  localhost:8001/api/v1/namespaces/kdk-dev/pods \
  -X POST \
  -H  'Content-Type: application/yaml' \
  -d '---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: clusterkopfpeerings.kopf.dev
spec:
  scope: Cluster
  group: kopf.dev
  names:
    kind: ClusterKopfPeering
    plural: clusterkopfpeerings
    singular: clusterkopfpeering
  versions:
    - name: v1
      served: true
      storage: true
      schema:
        openAPIV3Schema:
          type: object
          properties:
            status:
              type: object
              x-kubernetes-preserve-unknown-fields: true
'

apply

apiVersion: v1
kind: Pod
metadata:
  name: httpie
spec:
  nodeSelector:
    role: kdk
  serviceAccountName: ignite
  containers:
    - name: main
      image: alpine/httpie
      command: ["sleep", "9999999"]

debug

Подключиться к контейнеру app пода POD_NAME эфимерным котнейнером busybox Можно видеть процессы контейнера app

kubectl debug -it -c debugger --target=app --image=busybox ${POD_NAME}
ps auxf

Создаем копию пода POD_NAME под названием test-pod и подключаемся к нему. Внутри отладчика видим все процессы всех контейнеров пода

kubectl debug -it -c debugger --image=busybox \
  --copy-to test-pod \
  --share-processes \
  ${POD_NAME}
ps auxf

Written with StackEdit.