Серия «Kubernetes»

Kubernetes, создание и управление Deployments – K8s. Часть 3

Сегодня предлагаю разобрать следующий по списку объект Kubernetes, а именно Deployment.

Создание и управление Deployments

Команда для создания deployment выглядит так:

kubectl create deployment DEPLOYMENT_NAME --image IMAGE_NAME

Чтобы посмотреть список созданных deployment:

kubectl get deployments

Как и у Pods, у deployments есть команда для отображения подробной информации:

kubectl describe deployments DEPLOYMENT_NAME

Для скейлинга деплоймента можно использовать такую команду:

kubectl scale deployment DEPLOYMENT_NAME --replicas NUM_OF_REPLICAS

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

kubectl get pods

После скейлинга можно посмотреть параметр replica set:

kubectl get rs

Эта команда выводит информация о количестве подов, которые должны быть запущены в деплойменте.

И теперь, если вы удалите Pod, то он автоматически перезапустится. Таким образом Deployment всегда будет поддерживать количество работающих подов, которое было указано при скейлинге.

Так же можно сделать автоскейлинг:

kubectl autoscale deployment DEPLOYMENT_NAME --min=MIN_NUM_REPLICS --max=MAX_NUM_REPLICAS --cpu-percent=CPU_PERCENT_NUM

Команда для проверки:

kubectl get hpa

Deployment также можно создать с помощью YAML файла. С минимально необходимым YAML файлом вы можете ознакомиться в моем GitHub`е.

И для запуска deployment через yaml файл используется вот такая команда:

kubectl apply -f FILE_NAME.yaml

Для удаления deployment есть команда delete:

kubectl delete deployments DEPLOYMENT_NAME

Обновление Docker Image в Deployment

Посмотреть историю обновлений:

kubectl rollout history deployment/DEPLOYMENT_NAME

Команда для обновления вот такая:

kubectl set image deployment/DEPLOYMENT_NAME CONTAINER_NAME=UPDATED_CONTAINER_NAME --record

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

kubectl rollout status deployment/DEPLOYMENT_NAME

А как откатить последнее выполненное обновление? Легко:

kubectl rollout undo deployment/DEPLOYMENT_NAME

Можно откатиться на любую ревизию:

kubectl rollout undo deployment/DEPLOYMENT_NAME --to-revision=REVISION_NUM

Как обновиться, если вместо версии вы ранее указали latest? Вот так:

kubectl rollout restart deployment/DEPLOYMENT_NAME

Обсудить эту заметку можно в нашем Телеграм канале: https://t.me/devops_spb_ru (@devops_spb_ru)

Показать полностью

Главные объекты Kubernetes и работа с Pod – K8s. Часть 2

Главные объекты K8s

  • Pod – объект в котором работают один или больше Docker контейнеров

  • Deployment – сэт одинаковых подов, нужен для Auto scaling и для обновления Docker image, держит минимальное количество работающих подов

  • Service – предоставляет доступ к Deployment через: ClusterIP, NodePort, LoadBalance или ExternalName

  • Nodes – сервера где все это работает

  • Cluster – логическое объединение нодов

И сегодня мы поговорим про Pod.

Создание и управление Pods

kubectl run POD_NAME --image=IMAGE_NAME --port=PORT

Эта команда создаст pod с именем POD_NAME из Docker image с именем IMAGE_NAME и откроет на этом поде порт с номеров PORT. Но есть и второй вариант создания пода:

kubectl apply -f FILE_NAME.yaml

Данная команда создаст файл на основании yaml файла. С минимально необходимым yaml файлом вы можете ознакомиться в моем GitHub`е.

Для вывода списка созданных подов можно использовать следующую команду:

kubectl get pods

Как удалить Pod? Очень просто, для этого есть команда:

kubectl delete pods POD_NAME

Окей, мы создали под, что дальше? А дальше у нас есть следующие команды для работы с Pods:

kubectl describe pods POD_NAME

Данная команда выведет подробнейшую информацию о поде с именем POD_NAME. Тут вы можете увидеть имя ноды на которой запущен данный под, ip адреса, какие volume приаттачены к контейнеру и так далее.

kubectl exec POD_NAME CMD_NAME

Данная команда запускает команду CMD_NAME внутри пода POD_NAME. Для примера:

kubectl exec -it POD_NAME sh

Запустит шелл в интерактивном режиме (ключ -it).

kubectl logs POD_NAME

Данная команда выведет логи пода с именем POD_NAME.

kubectl port-forward POD_NAME LOCAL_PORT:REMOTE_PORT

Данная команда пробросит порт с вашего локального компьютера (LOCAL_PORT) на порт (REMOTE_PORT) пода с именем POD_NAME.

В следующих статьях мы посмотрим на такие объекты k8s как Deployment и Service.

Обсудить эту заметку можно в нашем Телеграм канале: https://t.me/devops_spb_ru (@devops_spb_ru)

Показать полностью

Основы Kubernetes для DevOps – K8s. Часть 1

Что такое Kubernetes?

K8s – это opensource проект разработанный Google на языке Go, изначально разрабатывался для своих же приложений. Первая версия вышла в 2014 году. Kubernetes предназначен для контейнеризированных приложений.

Прежде чем изучать Kubernetes я рекомендую ознакомиться с темой про Docker!

Основные «фишки» Kubernetes:

  • Автоматизация развертывания приложений

  • Автоматизация масштабирования приложений

  • Автоматизация управления приложениями

Из чего состоит K8s?

Основной компонент Kubernetes это Cluster.

Вы создаете Kubernetes Cluster состоящий из Nodes.

Nodes существуют двух типов:

  • Worker Node – сервер на котором запускаются и работают контейнеры.

  • Master Node – сервер который управляет Worker Nodes.

Когда вы запускаете команды управления, они всегда посылаются на Master Node. Напрямую с Worker Node вы не взаимодействуете.

Чуть подробнее про Nodes

На Kubernetes Master Node работают три главных процесса k8s:

  • kube-apiserver

  • kube-controller-manager

  • kube-scheduler

На Kubernetes Worker Node работают два главных процесса k8s:

  • kubelet

  • kube-proxy

Kubernetes Cluster

Обычно в Kubernetes кластере запущена одна Master нода (две и более нод используют для высокодоступных вариантов кластера) и одна Worker нода. Это самый минимальный набор для кластера.

Что может k8s и почему он популярен

  • Service discovery and load balancing. Вы запустили один Docker контейнер в k8s кластере. K8s дает вам доступ к этому Docker контейнеру через ip адрес, через определенный порт на любой Worker через определенный порт на любой Worker ноде или через DNS имя, также если вы запустили несколько копий вашего Docker контейнера, то k8s сделает load balancing между этими контейнерами.

  • Storage orchestration. Вы можете присоединить любой локальный диск или диск из AWS, GCP или Azure к одному или нескольким Docker контейнерам.

  • Automated rollouts and rollbacks. Автоматическое обновление на новую версию Docker Image или возврат на предыдущую версию.

  • Automatic bin packing. Вы создаете k8s кластер, где Kubernetes может запускать Docker контейнеры. Вы указываете сколько процессоров и оперативной памяти нужно каждой копии этих контейнеров, а k8s уже сам решит на каких Worker Node их лучше запускать.

  • Self-healing. Вы указываете сколько копий Docker контейнеров вам нужно и если с контейнером что-то произошло (завис, просто не отвечает и т.д.), то k8s это исправляет.

  • Secret and configuration management. K8s позволяет вам хранить «секреты», например пароли или любую секретную информацию все ваших приложений в Docker контейнере.

На этом тезисное знакомство с кубером можно считать законченным. В следующих заметках мы будем поднимать локальный k8s кластер, создавать Docker Images и еще раз пройдемся по основным понятиям k8s.

Обсудить эту заметку можно в нашем Телеграм канале: https://t.me/devops_spb_ru (@devops_spb_ru)

Показать полностью
Отличная работа, все прочитано!