Інженерія запитів для розширеного використання Kubectl

pic

Kubectl є основою всього, що стосується Kubernetes, але чи знали ви, як добре можна використовувати kubectl для налагодження та пошуку інформації?

Ось деякі рідкісні команди, які корисні для налагодження та виявлення проблем.

Отже, насолоджуйтеся, і якщо ви готуєтесь до CKA, перевірте мій репозиторій з посібником.

pic

Фото від Ian Taylor на Unsplash

Команда для налагодження

Команда debug корисна для створення ефермерних контейнерів з подами для цілей налагодження

# Налагодження поду  
kubectl debug mypod -it --image=busybox  

# Налагодження вузла  
kubectl debug node/mynode -it --image=ubuntu  

# Копіювання подів для налагодження  
kubectl debug mypod --copy-to=my-debugger --image=debian

Моніторинг використання ресурсів

Використовуйте команду top, щоб отримати інформацію про використання ресурсів подами на основі процесора чи пам'яті

# поди, які споживають найбільше ресурсів  
kubectl top pods --all-namespaces  

# вузли, які споживають найбільше ресурсів  
kubectl top nodes

Аналіз використання ресурсів у порівнянні з їх запитом — потрібен плагін kubectl-resource-capacity

kubectl resource-capacity --sort cpu.util --pods

Мережа

Перенаправлення порту пода для перегляду програми локально

kubectl port-forward  :

Перевірка кінцевих точок сервісу

kubectl get endpoints 

Інспекція з'єднання пода/сервісу зсередини пода

kubectl exec -it  -- ping 

Короткотривалі поди для налагодження

Використовуйте короткотривалі поди для виконання дій в контексті кластера та їх видалення після завершення.

Приклад: nslookup і отримання IP-адреси зсередини кластера для сервісу

kubectl run test-nslookup --image=busybox:1.28 -it   
--restart=OnFailure -- nslookup nginx-resolver-service  

для подів замініть на IP пода  

kubectl run test-nslookup --image=busybox:1.28 -it   
--restart=OnFailure -- nslookup {pod IP}

Інлайн патчинг

Використовуйте команди patch для модифікації ресурсів

Приклад додавання анотації до деплойменту

kubectl patch deployment my-deployment -p   
'{"metadata":{"annotations":{"debug":"true"}}}' --type=merge

Розширений вибір полів

Використовуйте — field-selector для фільтрації ресурсів

# Список подів, що не працюють  
kubectl get pods --field-selector=status.phase!=Running  

# Знайти вузли за певною умовою  
kubectl get nodes --field-selector=spec.unschedulable=true

Запити JSONPath для індивідуальних виводів

Використовуйте jsonpath для фільтрації виводів та отримання конкретних ресурсів

# Отримати всі імена подів у просторі імен  
kubectl get pods -o jsonpath='{.items[*].metadata.name}'  

# Список контейнерних образів для всіх подів  
kubectl get pods -o jsonpath=  
'{range .items[*].spec.containers[*]}{.image}{"\n"}{end}'  

# Показати кількість перезапусків всіх контейнерів у поді  
kubectl get pod  -o jsonpath=  
'{.status.containerStatuses[*].restartCount}'

Налагодження проблем з авторизацією

Команда auth can-i надзвичайно корисна для налагодження проблем з RBAC

Перевірте, чи може користувач виконати операцію

# чи може користувач видаляти секрети  
kubectl auth can-i delete secrets --as= -n {namespace}

Переглянути всі дозволи користувача

kubectl auth can-i --list

Сортування та фільтрація

— sort-by корисний для організації виводів

Сортувати поди за кількістю перезапусків

kubectl get pods --sort-by='.status.containerStatuses[0].restartCount'

Сортувати PV за ємністю зберігання

kubectl get pv --sort-by=.spec.capacity.storage

Моніторинг живих логів з усіх подів за міткою

kubectl logs -l app= -f --all-containers=true

Список усіх ресурсів у форматі дерева

kubectl tree deployment {deployment name}

Робота з просторами імен

Перемикання на інший простір імен

kubectl config set-context $(kubectl config current-context)  
 --namespace=dev  

kubectl config set-context --current --namespace=dev

Видалення простору імен у стані "terminating"

kubectl get namespace {namespace} -o json > ns.json

Видалити kubernetes з finalizers у json

kubectl replace --raw "/api/v1/namespaces/{namespace}/finalize"
-f ./ns.json
```

Реєстраційний секрет

Створіть секрет для зберігання даних реєстрації

kubectl create secret docker-registry regcred \  
--docker-server=${SERVER URL} \  
--docker-username=${REGISTRY USERNAME} \  
--docker-password=${REGISTRY PASSWORD} \  
--docker-email=${REGISTRY EMAIL}

Об'єднання двох KubeConfig

Резервне копіювання існуючого конфігураційного файлу  
cp ~/.kube/config ~/.kube/config.bak  

Об'єднання та отримання нового конфігураційного файлу  
KUBECONFIG=~/.kube/config:/path/to/new/config kubectl config view  
 --flatten > /tmp/config  

Заміна старого конфігураційного файлу  
mv /tmp/config ~/.kube/config




Перекладено з: [The prompt Engineering of Advanced Kubectl](https://diptochakrabarty.medium.com/the-prompt-engineering-of-advanced-kubectl-ba64191aa1f6)

Leave a Reply

Your email address will not be published. Required fields are marked *