
Сделаю себе заметку со списком команд для работы с Kubernetes. Дополнять буду по мере необходимости использования тех или иных команд на работе или на моем сервере.
Для начала, если используете или планируете использовать vi/vim, то добавим настройки. Открываем:
$ vim ~/.vimrc
Вставляем:
" Yaml file handlingautocmd FileType yaml setlocal ts=2 sts=2 sw=2 expandtabfiletype plugin indent onautocmd 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<
Так же можно добавить автодополнение команд для kubectl.
Если используете BASH:
$ source <(kubectl completion bash) &&echo "source <(kubectl completion bash)" >> ~/.bashrc
Перезапускаем оболочку или можно выполнить:
$ bash ~/.bashrc
Если используете ZSH:
$ source <(kubectl completion zsh) &&echo "if [ $commands[kubectl] ]; then source <(kubectl completion zsh); fi" >> ~/.zshrc
Перезапускаем оболочку или можно выполнить:
$ . ~/.zshrc
И так, приступим к командам.
Работа с POD-ами в Kubernetes
Вывести все поды которые задеплоились:
$ kubectl get podsNAME READY STATUS RESTARTS AGEmirrormaker-in-kubernetes-chart-mirrormaker-in-kubernetes-mpsb8 0/1 Pending 0 19d
Вывести все нейм-спейсы которые используют поды:
$ kubectl get pods --all-namespacesNAMESPACE NAME READY STATUS RESTARTS AGEdefault mirrormaker-in-kubernetes-chart-mirrormaker-in-kubernetes-mpsb8 0/1 Pending 0 19ddocker compose-7b7c5cbbcc-6l5gt 1/1 Running 0 28ddocker compose-api-dbbf7c5db-jxmz4 1/1 Running 1 28d
Чтобы вывести информацию о задеплоином ПОД-е, используем:
$ kubectl get pod mirrormaker-in-kubernetes-chart-mirrormaker-in-kubernetes-mpsb8 -o wideNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATESmirrormaker-in-kubernetes-chart-mirrormaker-in-kubernetes-mpsb8 0/1 Pending 0 19d <none> <none> <none> <none>
Т.е синтаксис такой:
$ kubectl get pod <NAME_of_POD_HERE> -o wide
Или чтобы вывести инфу в виде YAML вывода, используем:
$ kubectl get pod <NAME_of_POD_HERE> -o yaml
Если нужно получить YAML вывод от ПОД-а без информации о кластере, то вот команда:
$ kubectl get pod my-pod -o yaml --export
Для выводадискрайба POD-а, выполняем:
$ kubectl describe pod <NAME_of_POD_HERE>
Или:
$ kubectl describe pods <NAME_of_POD_HERE>
Можно еще так:
$ kubectl describe nodes <NAME_of_POD_HERE>
Если есть необходимость отсортировать поды, например по количеству рестартов, то команда:
$ kubectl get pods --sort-by='.status.containerStatuses[0].restartCount'
Получить все поды по определенной лейбе:
$ kubectl get pods --selector=app=my_app_here -ojsonpath='{.items[*].metadata.labels.version}'
Так же, при необходимости, можно вывести все поды по конкретному неймспйсу и чтобы ПОД-ы были запущены:
$ kubectl get pods --field-selector=status.phase=Running -n dockerNAME READY STATUS RESTARTS AGEcompose-7b7c5cbbcc-6l5gt 1/1 Running 0 28dcompose-api-dbbf7c5db-jxmz4 1/1 Running 1 28d
Получить ExternalIPs всех узлов:
$ kubectl get nodes -o jsonpath='{.items[*].status.addresses[?(@.type=="ExternalIP")].address}'
Получить ПОД-ы со всеми лейбами которые они имеют, можно запустив команду:
$ kubectl get pods --show-labels
Удалить под можно так:
$ kubectl delete pod <NAME_OF_POD_HERE_1> <NAME_OF_POD_HERE_2>
Чтобы удалить ПОД с помощью файла в котором хранится конфигурация, можно так:
$ kubectl delete -f ./pod.json
Удалить ПОД-ы по определенной лейбе:
$ kubectl delete pods -l name=myLabel
Для удаления всех ПОД-ов в определенном неймспейсе:
$ kubectl -n <NAMESPACE_HERE> delete pod --all
Удалить все POD-ы, соответствующие awk pattern1 или pattern2 паттернам:
$ kubectl get pods -n <NAMESPACE_HERE> --no-headers=true | awk '/pattern1|pattern2/{print $1}' | xargs kubectl delete -n <NAMESPACE_HERE> pod
Идем дальше.
Работа с Deployments в Kubernetes
Создаем один deployment:
$ kubectl run <NAME_of_POD_HERE> --image=<NAME_of_IMAGE_HERE> --record
Получаем список деплойментов:
$ kubectl get deployments
Скользящее обновление «www» контейнеров «frontend» развертывания, обновление образа:
$ kubectl set image deployment/frontend www=image:v2
Список истории развертываний можно получить так:
$ kubectl rollout history deployment/<YOUR_DEPLOYMENT_NAME_HERE>
Если нужно получить конкретную, то выполняем:
$ kubectl rollout undo deployment/<YOUR_DEPLOYMENT_NAME_HERE> --to-revision=N
Наблюдайте за непрерывным обновлением статуса развертывания «внешнего интерфейса» до завершения
$ kubectl rollout status -w deployment/<YOUR_DEPLOYMENT_NAME_HERE>
Чтобы развернуть несколько реплик с приложением, выполняем:
$ kubectl scale deployment/<NAME_of_POD_HERE> --replicas=<N_COUNT_REPLICAS>
Можно использовать файл:
$ kubectl scale --replicas=3 -f scale_replicas.yaml
Если текущий размер деплоймена с равен 3, масштабируйте его до 4 так:
$ kubectl scale --current-replicas=3 --replicas=4 deployment/<YOUR_DEPLOYMENT_HERE>
Можно сделать реплику для нескольких деплойментов, например:
$ kubectl scale --replicas=5 rc/<YOUR_DEPLOYMENT_HERE_1> rc/<YOUR_DEPLOYMENT_HERE_2> rc/<YOUR_DEPLOYMENT_HERE_3>
Чтобы заменить ПОД описание которого содержится в файле можно так:
$ cat pod.json | kubectl replace -f -
Можно выполнить команду и пересоздать ПОД силой (Будет аутедж!):
$ kubectl replace --force -f ./pod.json
И так далее.
Работа с Services в Kubernetes
Чтобы получить список сервисов, выполняем:
$ kubectl get servicesNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEkubernetes ClusterIP 10.96.0.1 <none> 443/TCP 28d
Если есть необходимость отсортировать сервисы по имени, используем команду:
$ kubectl get services --sort-by=.metadata.name
Создать POD в виде сервиса (создает endpoints):
$ kubectl expose deployment/<YOUR_DEPLOYMENT_NAME_HERE> --port=8080 --type=NodePort
Удалить service по определенной лейбе:
$ kubectl delete service -l name=myLabel
Для удаления всех service-ов в определенном неймспейсе:
$ kubectl -n <NAMESPACE_HERE> delete service --all
Шагаем дальше!
Работа с Volumes в Kubernetes
Чтобы получить список Persistent Volumes:
$ kubectl get pv
Чтобы получить список Persistent Volumes Claims:
$ kubectl get pvc
Если есть необходимость сортировки, можно использовать:
$ kubectl get pv -n <YOUR_NAMESPACE_HERE> --sort-by=.spec.capacity.storage
Можно использовать другие ключи при необходимости.
Работа с Secrets в Kubernetes
Для начала, получим список сикретов:
$ kubectl get secretsNAME TYPE DATA AGEdefault-token-rr6t6 kubernetes.io/service-account-token 3 28dsh.helm.release.v1.mirrormaker-in-kubernetes-chart.v1 helm.sh/release.v1 1 19d
Если не знаете как создать сикрет через CLI, то можно использовать помощь:
$ kubectl create secret generic --help
Например, создаем вот такой сикрет:
$ kubectl create secret generic mysql --from-literal=password=root
Получим информацию о созданном сикрете так:
$ kubectl get secrets mysql -o yamlapiVersion: v1data:password: cm9vdA==kind: Secretmetadata:creationTimestamp: "2019-12-23T21:33:24Z"name: mysqlnamespace: defaultresourceVersion: "210625"selfLink: /api/v1/namespaces/default/secrets/mysqluid: e0ad6215-cc96-4e03-9ea8-ca5a58a5980ctype: Opaque
Или, можно создать сикрет следующим образом:
$ cat <<EOF | kubectl apply -f -apiVersion: v1kind: Secretmetadata:name: mysecrettype: Opaquedata:password: $(echo -n "s33msi4" | base64 -w0)username: $(echo -n "jane" | base64 -w0)EOF
Кому как удобнее, так и используйте.
Вывести все секреты, которые в данный момент используются ПОД-ами:
$ kubectl get pods -o json | jq '.items[].spec.containers[].env[]?.valueFrom.secretKeyRef.name' | grep -v null | sort | uniq
Что дальше? Дальше идем….
Работа с ConfigMaps в Kubernetes
Чтобы создать конфиг-мапу, например с JS файла:
$ kubectl create configmap <configmap_name_here> --from-file=config.js
Получаем инфу о конфиг-мапе:
$ kubectl get configmap <configmap_name_here> -o yaml
Работа с DNS в Kubernetes
Получим все DNS-ы по всем неймспейсам:
$ kubectl get pods --all-namespaces |grep dnskube-system coredns-5c98db65d4-95dlc 1/1 Running 1 28dkube-system coredns-5c98db65d4-rhvvs 1/1 Running 1 28d
Проверить DNS для nginx ПОД-а (при условии, что POD / контейнер работает) можно так:
$ kubectl exec -ti busybox -- nslookup nginx
Примечание: kube-proxy, работающий в worker узлах, управляет службами и устанавливает правила iptables для прямого трафика.
Работа с Ingress в Kubernetes
Получаем все ингресы:
$ kubectl get ingress
Или, если необходимо использовать другой namespace:
$ kubectl get ingress -n dockerNo resources found in docker namespace.
Команды для управления типом службы Ingress для ClusterIP:
$ kubectl expose deployment <YOUR_DEPLOYMENT_HERE> --port=2368
Идем дальше.
Работа с Horizontal Pod Autoscaler в Kubernetes
Чтобы получить все поды которые были задеплоины в виде горизонтального маштабирования, так:
$ kubectl get hpa
Или, если нужно указать другое имя для неймспейса:
$ kubectl get hpa -n dockerNo resources found in docker namespace.
Задеплоим сервис с репликой, например:
$ kubectl autoscale deployment <YOUR_DEPLOYMENT_HERE> --min=6 --max=666
Для помощи, используем:
$ kubectl autoscale --help
Работа с DaemonSets в Kubernetes
Чтобы получить ДемонСеты, стоит выполнить:
$ kubectl get daemonsets
Или:
$ kubectl get ds
Дальше добавлю если будет тут инфа.
Работа с Scheduler в Kubernetes
Политика на основе NodeSelector:
$ kubectl label node minikube foo=bar
Связывание узлов через API-сервер:
$ kubectl proxy$ curl -H "Content-Type: application/json" -X POST --data @binding.json http://localhost:8001/api/v1/namespaces/default/pods/foobar-sched/binding
Есть команда:
$ kubectl taint node master foo=bar:NoSchedule
Как-то так.
Troubleshooting в Kubernetes
И так, вот список команд которые помогут в траблшутинге K8S:
$ kubectl describe$ kubectl logs$ kubectl exec$ kubectl get nodes --show-labels$ kubectl get events
Пример, если необходимо получить логи с ПОД-а:
$ kubectl logs <YOUR_POD_HERE>
Тоже самое, но с использованием меток:
$ kubectl logs -l name=<YOUR_LABEL_HERE>
Вывести логи с придедущего инстала:
$ kubectl logs <YOUR_POD_HERE> --previous
Тоже самое, но мулитиконвеер:
$ kubectl logs <YOUR_POD_HERE> -c <YOUR_CONTAINER_HERE>
Журналы дампа, с именем метки = yourLabel (стандартный вывод):
$ kubectl logs -l name= yourLabel -c <YOUR_CONTAINER_HERE>
Можно добавить опцию «-f» чтобы получать логи в реальном времени:
$ kubectl logs -f <YOUR_POD_HERE>
Запускать pod как интерактивную оболочку:
$ kubectl run -i --tty busybox --image=busybox -- sh
Чтобы запустить энжинкс в pod в определенном пространстве имен:
$ kubectl run nginx --image=nginx --restart=Never -nyour_namespace_here
Запустите pod с nginx и запишите его спецификацию в файл с именем pod.yaml можно так:
$ kubectl run nginx --image=nginx --restart=Never --dry-run -o yaml > pod.yaml
Приатачиться к контейнеру можно так:
$ kubectl attach <YOUR_POD_HERE> -i
Чтобы сделать форвординг портов с локальной машины (например 5555) на ПОД (порт 6666), выполните:
$ kubectl port-forward <YOUR_POD_HERE> 5555:6666
Чтобы выполнить команду на ПОД-е (только в одном контейнере):
$ kubectl exec <YOUR_POD_HERE> -- ls /
Чтобы выполнить команду на ПОД-е (в нескольких контейнерах):
$ kubectl exec <YOUR_POD_HERE> -c <YOUR_CONTAINER_HERE> -- ls /
Показать метрики для данного ПОД-а и его контейнеров:
$ kubectl top pod <YOUR_POD_HERE> --containers
Выводим список ивентов отсортированых по timestamp:
$ kubectl get events --sort-by=.metadata.creationTimestamp
Может что-то еще полезное найду и дополню тут.
Взаимодействие с нодами и кластером
Можно пометить ноду как «недоступную» чтобы на нее не шел трафик:
$ kubectl cordon <YOUR_POD_HERE>
Выводим узел на мейнененс окно:
$ kubectl drain <YOUR_POD_HERE>
Вернуть ноду можно так:
$ kubectl uncordon <YOUR_POD_HERE>
Посмотреть метрики на хосте:
$ kubectl top node <YOUR_POD_HERE>
Чтобы вывести мастер-адресс и его сервисы, выполните:
$ kubectl cluster-infoKubernetes master is running at https://kubernetes.docker.internal:6443KubeDNS is running at https://kubernetes.docker.internal:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxyTo further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
Вывести текущее состояние дампа кластера в stdout:
$ kubectl cluster-info dump
Можно записать текущее состояние дампа кластера в файл, например:
$ kubectl cluster-info dump --output-directory=./k8s_state.json
Идем дальше.
Работа с Role Based Access Control в Kubernetes
Перечислите все поддерживаемые типы ресурсов вместе с их короткими именами, группой API, являются ли они пространством имен и Kind:
$ kubectl api-resources
Такс, чтобы вывести все ресурсы пространства имен:
$ kubectl api-resources --namespaced=true
Чтобы вывести все ресурсы не относящихся к пространству имен:
$ kubectl api-resources --namespaced=false
Чтобы получить только список имен, можно использовать:
$ kubectl api-resources -o name
Или, использовать такой подход (показать все ресурсы с расширенным (он же «широкий») выводом):
$ kubectl api-resources -o wide
Получить все ресурсы, которые поддерживают «list» и «get»:
$ kubectl api-resources --verbs=list,get
Получить все ресурсы в группе API «Расширения»:
$ kubectl api-resources --api-group=extensionsNAME SHORTNAMES APIGROUP NAMESPACED KINDdaemonsets ds extensions true DaemonSetdeployments deploy extensions true Deploymentingresses ing extensions true Ingressnetworkpolicies netpol extensions true NetworkPolicypodsecuritypolicies psp extensions false PodSecurityPolicyreplicasets rs extensions true ReplicaSet
Почти подошли к завершению…
Работа с Role Based Access Control в Kubernetes
Создаем роль:
$ kubectl create role YOUR_ROLE_HERE --verb=get --verb=list --verb=watch --resource=pods
Получаем инфу о роле:
$ kubectl get rolebinding <YOUR_ROLE_HERE> -o yaml
Работа с Security Contexts в Kubernetes
Чтобы задеплоить контекст который описан в файле, выполните:
$ kubectl apply -f https://k8s.io/examples/pods/security/security-context.yaml
Или 2-й пример:
$ kubectl apply -f https://k8s.io/examples/pods/security/security-context-2.yaml
Дополню позже, когда столкнусь с необходимостью….
Работа с Pod Security Policies в Kubernetes
Дополню позже, когда столкнусь с необходимостью….
Работа с Network Policies в Kubernetes
Создаем аннотацию:
$ kubectl annotate ns <namespace> "net.beta.kubernetes.io/network-policy={"ingress": {"isolation": "DefaultDeny"}}"
Чтобы получить полную или обновленную информацию, советую обратиться к официальной документации!
Вот и все, статья «Команды Kubernetes в Unix/Linux» завершена.
Was this helpful?
0 / 0