kubectl
Установка: https://kubernetes.io/ru/docs/tasks/tools/install-kubectl/
Доп. конфигурация: https://kubernetes.io/ru/docs/tasks/tools/install-kubectl/#дополнительная-конфигурация-kubectl
# --- ~/.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
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'
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
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
# --- получаем имя пода по метке POD_NAME=$(kubectl get pods -l ref=app -o jsonpath='{.items[0].metadata.name}')
Можно видеть процессы контейнера 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
KUBECONFIG
Сливаем 2 файла конфигурации в один (источник - https://medium.com/@jacobtomlinson/how-to-merge-kubernetes-kubectl-config-files-737b61bd517d)
# --- делаем копию существующего файла $ cp ~/.kube/config ~/.kube/config.bak # --- сливаем 2 файла в один файл $ KUBECONFIG=~/.kube/config:/path/to/new/config kubectl config view --flatten > /tmp/config # --- заменяем старый файл конфигурации новым $ mv /tmp/config ~/.kube/config # (опционально) удаляем копию старого файла конфигурации $ rm ~/.kube/config.bak