Команды Kubernetes в Unix/Linux

Сделаю себе заметку со списком команд для работы с Kubernetes. Дополнять буду по мере необходимости использования тех или иных команд на работе или на моем сервере.

Для начала, если используете или планируете использовать vi/vim, то добавим настройки. Открываем:

sh
1 lines
$ vim ~/.vimrc
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Вставляем:

sh
15 lines
" Yaml file handling
autocmd FileType yaml setlocal ts=2 sts=2 sw=2 expandtab
filetype plugin indent on
autocmd FileType yaml setl indentkeys-=<:>
" Copy paste with ctr+c, ctr+v, etc
:behave mswin
:set clipboard=unnamedplus
:smap <Del> <C-g>"_d
:smap <C-c> <C-g>y
:smap <C-x> <C-g>x
:imap <C-v> <Esc>pi
:smap <C-v> <C-g>p
:smap <Tab> <C-g>1>
:smap <S-Tab> <C-g>1<
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Так же можно добавить автодополнение команд для kubectl.

Если используете BASH:

sh
2 lines
$ source <(kubectl completion bash) &&
echo "source <(kubectl completion bash)" >> ~/.bashrc
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Перезапускаем оболочку или можно выполнить:

sh
1 lines
$ bash ~/.bashrc
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Если используете ZSH:

sh
2 lines
$ source <(kubectl completion zsh) &&
echo "if [ $commands[kubectl] ]; then source <(kubectl completion zsh); fi" >> ~/.zshrc
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Перезапускаем оболочку или можно выполнить:

sh
1 lines
$ . ~/.zshrc
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

И так, приступим к командам.

Работа с POD-ами в Kubernetes

Вывести все поды которые задеплоились:

sh
3 lines
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
mirrormaker-in-kubernetes-chart-mirrormaker-in-kubernetes-mpsb8 0/1 Pending 0 19d
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Вывести все нейм-спейсы которые используют поды:

sh
6 lines
$ kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
default mirrormaker-in-kubernetes-chart-mirrormaker-in-kubernetes-mpsb8 0/1 Pending 0 19d
docker compose-7b7c5cbbcc-6l5gt 1/1 Running 0 28d
docker compose-api-dbbf7c5db-jxmz4 1/1 Running 1 28d
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Чтобы вывести информацию о задеплоином ПОД-е, используем:

sh
3 lines
$ kubectl get pod mirrormaker-in-kubernetes-chart-mirrormaker-in-kubernetes-mpsb8 -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
mirrormaker-in-kubernetes-chart-mirrormaker-in-kubernetes-mpsb8 0/1 Pending 0 19d <none> <none> <none> <none>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Т.е синтаксис такой:

sh
1 lines
$ kubectl get pod <NAME_of_POD_HERE> -o wide
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Или чтобы вывести инфу в виде YAML вывода, используем:

sh
1 lines
$ kubectl get pod <NAME_of_POD_HERE> -o yaml
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Если нужно получить YAML вывод от ПОД-а без информации о кластере, то вот команда:

sh
1 lines
$ kubectl get pod my-pod -o yaml --export
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Для выводадискрайба POD-а, выполняем:

sh
1 lines
$ kubectl describe pod <NAME_of_POD_HERE>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Или:

sh
1 lines
$ kubectl describe pods <NAME_of_POD_HERE>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Можно еще так:

sh
1 lines
$ kubectl describe nodes <NAME_of_POD_HERE>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Если есть необходимость отсортировать поды, например по количеству рестартов, то команда:

sh
1 lines
$ kubectl get pods --sort-by='.status.containerStatuses[0].restartCount'
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Получить все поды по определенной лейбе:

sh
2 lines
$ kubectl get pods --selector=app=my_app_here -o
jsonpath='{.items[*].metadata.labels.version}'
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Так же, при необходимости, можно вывести все поды по конкретному неймспйсу и чтобы ПОД-ы были запущены:

sh
4 lines
$ kubectl get pods --field-selector=status.phase=Running -n docker
NAME READY STATUS RESTARTS AGE
compose-7b7c5cbbcc-6l5gt 1/1 Running 0 28d
compose-api-dbbf7c5db-jxmz4 1/1 Running 1 28d
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Получить ExternalIPs всех узлов:

sh
1 lines
$ kubectl get nodes -o jsonpath='{.items[*].status.addresses[?(@.type=="ExternalIP")].address}'
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Получить ПОД-ы со всеми лейбами которые они имеют, можно запустив команду:

sh
1 lines
$ kubectl get pods --show-labels
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Удалить под можно так:

sh
1 lines
$ kubectl delete pod <NAME_OF_POD_HERE_1> <NAME_OF_POD_HERE_2>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Чтобы удалить ПОД с помощью файла в котором хранится конфигурация, можно так:

sh
1 lines
$ kubectl delete -f ./pod.json
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Удалить ПОД-ы по определенной лейбе:

sh
1 lines
$ kubectl delete pods -l name=myLabel
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Для удаления всех ПОД-ов в определенном неймспейсе:

sh
1 lines
$ kubectl -n <NAMESPACE_HERE> delete pod --all
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Удалить все POD-ы, соответствующие awk pattern1 или pattern2 паттернам:

sh
1 lines
$ kubectl get pods -n <NAMESPACE_HERE> --no-headers=true | awk '/pattern1|pattern2/{print $1}' | xargs kubectl delete -n <NAMESPACE_HERE> pod
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Идем дальше.

Работа с Deployments в Kubernetes

Создаем один deployment:

sh
1 lines
$ kubectl run <NAME_of_POD_HERE> --image=<NAME_of_IMAGE_HERE> --record
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Получаем список деплойментов:

sh
1 lines
$ kubectl get deployments
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Скользящее обновление «www» контейнеров «frontend» развертывания, обновление образа:

sh
1 lines
$ kubectl set image deployment/frontend www=image:v2
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Список истории развертываний можно получить так:

sh
1 lines
$ kubectl rollout history deployment/<YOUR_DEPLOYMENT_NAME_HERE>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Если нужно получить конкретную, то выполняем:

sh
1 lines
$ kubectl rollout undo deployment/<YOUR_DEPLOYMENT_NAME_HERE> --to-revision=N
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Наблюдайте за непрерывным обновлением статуса развертывания «внешнего интерфейса» до завершения

sh
1 lines
$ kubectl rollout status -w deployment/<YOUR_DEPLOYMENT_NAME_HERE>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Чтобы развернуть несколько реплик с приложением, выполняем:

sh
1 lines
$ kubectl scale deployment/<NAME_of_POD_HERE> --replicas=<N_COUNT_REPLICAS>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Можно использовать файл:

sh
1 lines
$ kubectl scale --replicas=3 -f scale_replicas.yaml
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Если текущий размер деплоймена с равен 3, масштабируйте его до 4 так:

sh
1 lines
$ kubectl scale --current-replicas=3 --replicas=4 deployment/<YOUR_DEPLOYMENT_HERE>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Можно сделать реплику для нескольких деплойментов, например:

sh
1 lines
$ kubectl scale --replicas=5 rc/<YOUR_DEPLOYMENT_HERE_1> rc/<YOUR_DEPLOYMENT_HERE_2> rc/<YOUR_DEPLOYMENT_HERE_3>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Чтобы заменить ПОД описание которого содержится в файле можно так:

sh
1 lines
$ cat pod.json | kubectl replace -f -
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Можно выполнить команду и пересоздать ПОД силой (Будет аутедж!):

sh
1 lines
$ kubectl replace --force -f ./pod.json
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

И так далее.

Работа с Services в Kubernetes

Чтобы получить список сервисов, выполняем:

sh
3 lines
$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 28d
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Если есть необходимость отсортировать сервисы по имени, используем команду:

sh
1 lines
$ kubectl get services --sort-by=.metadata.name
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Создать POD в виде сервиса (создает endpoints):

sh
1 lines
$ kubectl expose deployment/<YOUR_DEPLOYMENT_NAME_HERE> --port=8080 --type=NodePort
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Удалить service по определенной лейбе:

sh
1 lines
$ kubectl delete service -l name=myLabel
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Для удаления всех service-ов в определенном неймспейсе:

sh
1 lines
$ kubectl -n <NAMESPACE_HERE> delete service --all
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Шагаем дальше!

Работа с Volumes в Kubernetes

Чтобы получить список Persistent Volumes:

sh
1 lines
$ kubectl get pv
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Чтобы получить список Persistent Volumes Claims:

sh
1 lines
$ kubectl get pvc
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Если есть необходимость сортировки, можно использовать:

sh
1 lines
$ kubectl get pv -n <YOUR_NAMESPACE_HERE> --sort-by=.spec.capacity.storage
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Можно использовать другие ключи при необходимости.

Работа с Secrets в Kubernetes

Для начала, получим список сикретов:

sh
4 lines
$ kubectl get secrets
NAME TYPE DATA AGE
default-token-rr6t6 kubernetes.io/service-account-token 3 28d
sh.helm.release.v1.mirrormaker-in-kubernetes-chart.v1 helm.sh/release.v1 1 19d
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Если не знаете как создать сикрет через CLI, то можно использовать помощь:

sh
1 lines
$ kubectl create secret generic --help
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Например, создаем вот такой сикрет:

sh
1 lines
$ kubectl create secret generic mysql --from-literal=password=root
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Получим информацию о созданном сикрете так:

sh
14 lines
$ kubectl get secrets mysql -o yaml
apiVersion: v1
data:
password: cm9vdA==
kind: Secret
metadata:
creationTimestamp: "2019-12-23T21:33:24Z"
name: mysql
namespace: default
resourceVersion: "210625"
selfLink: /api/v1/namespaces/default/secrets/mysql
uid: e0ad6215-cc96-4e03-9ea8-ca5a58a5980c
type: Opaque
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Или, можно создать сикрет следующим образом:

sh
10 lines
$ cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
password: $(echo -n "s33msi4" | base64 -w0)
username: $(echo -n "jane" | base64 -w0)
EOF
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Кому как удобнее, так и используйте.

Вывести все секреты, которые в данный момент используются ПОД-ами:

sh
1 lines
$ kubectl get pods -o json | jq '.items[].spec.containers[].env[]?.valueFrom.secretKeyRef.name' | grep -v null | sort | uniq
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Что дальше? Дальше идем….

Работа с ConfigMaps в Kubernetes

Чтобы создать конфиг-мапу, например с JS файла:

sh
1 lines
$ kubectl create configmap <configmap_name_here> --from-file=config.js
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Получаем инфу о конфиг-мапе:

sh
1 lines
$ kubectl get configmap <configmap_name_here> -o yaml
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Работа с DNS в Kubernetes

Получим все DNS-ы по всем неймспейсам:

sh
3 lines
$ kubectl get pods --all-namespaces |grep dns
kube-system coredns-5c98db65d4-95dlc 1/1 Running 1 28d
kube-system coredns-5c98db65d4-rhvvs 1/1 Running 1 28d
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Проверить DNS для nginx ПОД-а (при условии, что POD / контейнер работает) можно так:

sh
1 lines
$ kubectl exec -ti busybox -- nslookup nginx
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Примечание: kube-proxy, работающий в worker узлах, управляет службами и устанавливает правила iptables для прямого трафика.

Работа с Ingress в Kubernetes

Получаем все ингресы:

sh
1 lines
$ kubectl get ingress
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Или, если необходимо использовать другой namespace:

sh
2 lines
$ kubectl get ingress -n docker
No resources found in docker namespace.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Команды для управления типом службы Ingress для ClusterIP:

sh
1 lines
$ kubectl expose deployment <YOUR_DEPLOYMENT_HERE> --port=2368
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Идем дальше.

Работа с Horizontal Pod Autoscaler в Kubernetes

Чтобы получить все поды которые были задеплоины в виде горизонтального маштабирования, так:

sh
1 lines
$ kubectl get hpa
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Или, если нужно указать другое имя для неймспейса:

sh
2 lines
$ kubectl get hpa -n docker
No resources found in docker namespace.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Задеплоим сервис с репликой, например:

sh
1 lines
$ kubectl autoscale deployment <YOUR_DEPLOYMENT_HERE> --min=6 --max=666
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Для помощи, используем:

sh
1 lines
$ kubectl autoscale --help
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Работа с DaemonSets в Kubernetes

Чтобы получить ДемонСеты, стоит выполнить:

sh
1 lines
$ kubectl get daemonsets
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Или:

sh
1 lines
$ kubectl get ds
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Дальше добавлю если будет тут инфа.

Работа с Scheduler в Kubernetes

Политика на основе NodeSelector:

sh
1 lines
$ kubectl label node minikube foo=bar
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Связывание узлов через API-сервер:

sh
2 lines
$ kubectl proxy
$ curl -H "Content-Type: application/json" -X POST --data @binding.json http://localhost:8001/api/v1/namespaces/default/pods/foobar-sched/binding
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Есть команда:

sh
1 lines
$ kubectl taint node master foo=bar:NoSchedule
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Как-то так.

Troubleshooting в Kubernetes

И так, вот список команд которые помогут в траблшутинге K8S:

sh
5 lines
$ kubectl describe
$ kubectl logs
$ kubectl exec
$ kubectl get nodes --show-labels
$ kubectl get events
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Пример, если необходимо получить логи с ПОД-а:

sh
1 lines
$ kubectl logs <YOUR_POD_HERE>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Тоже самое, но с использованием меток:

sh
1 lines
$ kubectl logs -l name=<YOUR_LABEL_HERE>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Вывести логи с придедущего инстала:

sh
1 lines
$ kubectl logs <YOUR_POD_HERE> --previous
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Тоже самое, но мулитиконвеер:

sh
1 lines
$ kubectl logs <YOUR_POD_HERE> -c <YOUR_CONTAINER_HERE>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Журналы дампа, с именем метки = yourLabel (стандартный вывод):

sh
1 lines
$ kubectl logs -l name= yourLabel -c <YOUR_CONTAINER_HERE>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Можно добавить опцию «-f» чтобы получать логи в реальном времени:

sh
1 lines
$ kubectl logs -f <YOUR_POD_HERE>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Запускать pod как интерактивную оболочку:

sh
1 lines
$ kubectl run -i --tty busybox --image=busybox -- sh
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Чтобы запустить энжинкс в pod в определенном пространстве имен:

sh
2 lines
$ kubectl run nginx --image=nginx --restart=Never -n
your_namespace_here
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Запустите pod с nginx и запишите его спецификацию в файл с именем pod.yaml можно так:

sh
1 lines
$ kubectl run nginx --image=nginx --restart=Never --dry-run -o yaml > pod.yaml
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Приатачиться к контейнеру можно так:

sh
1 lines
$ kubectl attach <YOUR_POD_HERE> -i
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Чтобы сделать форвординг портов с локальной машины (например 5555) на ПОД (порт 6666), выполните:

sh
1 lines
$ kubectl port-forward <YOUR_POD_HERE> 5555:6666
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Чтобы выполнить команду на ПОД-е (только в одном контейнере):

sh
1 lines
$ kubectl exec <YOUR_POD_HERE> -- ls /
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Чтобы выполнить команду на ПОД-е (в нескольких контейнерах):

sh
1 lines
$ kubectl exec <YOUR_POD_HERE> -c <YOUR_CONTAINER_HERE> -- ls /
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Показать метрики для данного ПОД-а и его контейнеров:

sh
1 lines
$ kubectl top pod <YOUR_POD_HERE> --containers
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Выводим список ивентов отсортированых по timestamp:

sh
1 lines
$ kubectl get events --sort-by=.metadata.creationTimestamp
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Может что-то еще полезное найду и дополню тут.

Взаимодействие с нодами и кластером

Можно пометить ноду как «недоступную» чтобы на нее не шел трафик:

sh
1 lines
$ kubectl cordon <YOUR_POD_HERE>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Выводим узел на мейнененс окно:

sh
1 lines
$ kubectl drain <YOUR_POD_HERE>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Вернуть ноду можно так:

sh
1 lines
$ kubectl uncordon <YOUR_POD_HERE>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Посмотреть метрики на хосте:

sh
1 lines
$ kubectl top node <YOUR_POD_HERE>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Чтобы вывести мастер-адресс и его сервисы, выполните:

sh
5 lines
$ kubectl cluster-info
Kubernetes master is running at https://kubernetes.docker.internal:6443
KubeDNS is running at https://kubernetes.docker.internal:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Вывести текущее состояние дампа кластера в stdout:

sh
1 lines
$ kubectl cluster-info dump
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Можно записать текущее состояние дампа кластера в файл, например:

sh
1 lines
$ kubectl cluster-info dump --output-directory=./k8s_state.json
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Идем дальше.

Работа с Role Based Access Control в Kubernetes

Перечислите все поддерживаемые типы ресурсов вместе с их короткими именами, группой API, являются ли они пространством имен и Kind:

sh
1 lines
$ kubectl api-resources
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Такс, чтобы вывести все ресурсы пространства имен:

sh
1 lines
$ kubectl api-resources --namespaced=true
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Чтобы вывести все ресурсы не относящихся к пространству имен:

sh
1 lines
$ kubectl api-resources --namespaced=false
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Чтобы получить только список имен, можно использовать:

sh
1 lines
$ kubectl api-resources -o name
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Или, использовать такой подход (показать все ресурсы с расширенным (он же «широкий») выводом):

sh
1 lines
$ kubectl api-resources -o wide
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Получить все ресурсы, которые поддерживают «list» и «get»:

sh
1 lines
$ kubectl api-resources --verbs=list,get
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Получить все ресурсы в группе API «Расширения»:

sh
8 lines
$ kubectl api-resources --api-group=extensions
NAME SHORTNAMES APIGROUP NAMESPACED KIND
daemonsets ds extensions true DaemonSet
deployments deploy extensions true Deployment
ingresses ing extensions true Ingress
networkpolicies netpol extensions true NetworkPolicy
podsecuritypolicies psp extensions false PodSecurityPolicy
replicasets rs extensions true ReplicaSet
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Почти подошли к завершению…

Работа с Role Based Access Control в Kubernetes

Создаем роль:

sh
1 lines
$ kubectl create role YOUR_ROLE_HERE --verb=get --verb=list --verb=watch --resource=pods
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Получаем инфу о роле:

sh
1 lines
$ kubectl get rolebinding <YOUR_ROLE_HERE> -o yaml
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Работа с Security Contexts в Kubernetes

Чтобы задеплоить контекст который описан в файле, выполните:

sh
1 lines
$ kubectl apply -f https://k8s.io/examples/pods/security/security-context.yaml
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Или 2-й пример:

sh
1 lines
$ kubectl apply -f https://k8s.io/examples/pods/security/security-context-2.yaml
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Дополню позже, когда столкнусь с необходимостью….

Работа с Pod Security Policies в Kubernetes

Дополню позже, когда столкнусь с необходимостью….

Работа с Network Policies в Kubernetes

Создаем аннотацию:

sh
1 lines
$ kubectl annotate ns <namespace> "net.beta.kubernetes.io/network-policy={"ingress": {"isolation": "DefaultDeny"}}"
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Чтобы получить полную или обновленную информацию, советую обратиться к официальной документации!

Вот и все, статья «Команды Kubernetes в Unix/Linux» завершена.

Was this helpful?

0 / 0