Пиша за бъдещото си аз (и бъдеща статия за дейбъг на k8s). Тук ми е списъка с малките радости в живота при дебъг и по-точно:
- tail -f like experience with kubect get pods podname:
kubectl logs -f podname
2. За повече инфо около някой pod (особено когато вече е умрял и не можем да му видим логовете с горната команда) имаме:
kubectl describe pod
Имаме доооста информация включително и малко логове, имаме си и друга информация като volumes, портове, от къде се контролира (особено полезно ако като тепърва започвате с k8s и тръгнете да триете под и той след 5 секунди пак възкръсва като Марая Кери при падането на първата снежинка за годината) и още много.
3. Филтриране на подове и игра с output-а на kubectl. Ако искате да видите всички running pods какво правите? Мда, със сигурност не правите като мен – първичното решение да направите kubectl get pods и после да въртите разни bash тъпотии за да филтрирате. Можете обаче да използвате супер полезните field-selectors и да правите с output-а каквото си пожелаете. Нещо, което ми трябваше е да видя всички работещи pod-ове на кои node-ове живеят. Стана с една команда:
kubectl get pods --field-selector status.phase=Running -o wide
4. Какво става на клъстъра ми? Всеки се пита понякога, особено ако си хоствате сами k8s-а. Е, можете да намерите много информация с:
kubectl get events
Изсипва ви тонове с информация. Можете да сортирате по време с kubectl get events –sort-by=’.lastTimestamp’, но и нещо, което не знаех до момента в който не тръгнах да пиша тази статия. Можете да видите предишните stage-ове на вече умрели pod-ове! Което е супер полезно стига да им знаете името – kubectl get events podname
5. CPU/Memory usage per node/pod, особено както сега се боря като дебела женичка в добричка дискотека 2000 г.
kubectl top node nodename
kubectl top pod podname
6. Приключвам с най-верния ми приятел – kubectl exec, който ми позволява да се логна на pod-а и да видя логове и каквото друго ми е нужно. Тук е хубаво да отбележим, че докато работите по някой dockerfile, който е по-засукан можете да използвате root user-а. Не е стандартна, нито добра практика, но ще ни спести няколко билда. Като посвикне човек вече става интинктивно. Имайте предвид, че тук викаме bash, но ако ти каже, че няма използвайте sh:
kubectl exec -it podname -- bash
Също така можете да изпълнявте команди директно на пода, например искаме да видим всички env vars на pod-а:
kubectl exec -it podname -- env
7. Get k8s secrets directly (convert base64 secrets on the fly)
Когато работим със secrets или sealedSecrets ни се налага понякога да видим някой secret. Тяхната природа е да бъдат base64 кодирани и имаме още една стъпка в декриптирането. Е, с тази команда (забележете, че трябва да имате инсталиран jq):
kubectl get secrets some-secret -o jsonpath='{.data}' | jq -r 'to_entries[] | "\(.key): \(.value | @base64d)"'
7.1 Ако пък не искате да използвате горната команда (хинт – можете да си я сложите като alias) – можете да декодирате и кодирате стрингове по base64 директно в конзолата с:
~ echo "https://www.youtube.com/watch?v=dQw4w9WgXcQ" | base64
aHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1kUXc0dzlXZ1hjUQo=
~ echo "aHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1kUXc0dzlXZ1hjUQo=" | base64 -d
https://www.youtube.com/watch?v=dQw4w9WgXcQ
Edit – мислих да кръстя статията “Debug Kubernetes like a pro”, но съм много далеч от pro та за това – shrimp.