Kubectl є основою всього, що стосується Kubernetes, але чи знали ви, як добре можна використовувати kubectl для налагодження та пошуку інформації?
Ось деякі рідкісні команди, які корисні для налагодження та виявлення проблем.
Отже, насолоджуйтеся, і якщо ви готуєтесь до CKA, перевірте мій репозиторій з посібником.
Фото від 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)