# Пособие для самостоятельного изучения по теме "Kubernetes Intro" 1. Как поставить kubernetes 2. Как пользоваться 3. Основные команды ::: info **Kubetnetes**(**k8s**) - система для оркестрации, автоматической установки, масштабирования и управления контейнерными средами. Проект с открытым исходным кодом, который располагается [тут](https://github.com/kubernetes/kubernetes). ::: ## Как поставить kubernetes k8s предоставляется в нескольких вариациях. Установка отличается способом установки и потребляемых ресурсов системы. Раздличают: - **kubectl** - просто набор команд для командной строки, может быть поставлена отдельно от кластера и остальной системы kubernetes. - **kind** - позволяет запускать kubernetes на локальной машине.. Единственное усовие для установки это установленный Docker. - **minikube** - локальный кластер, который можно использовать на одной машине. Используется для изучения функционала k8s и может быть использован для разработки. - **kubeadm** - инструмент для полуавтоматической установки k8s локально. ::: warning Рекомендуемое максимальное количество нод в кластере - 50. Большее количество будет вызывать проблемы в конфигурации и управлении. ::: ::: danger Для практического изучения k8s будем использовать **minikube**. ::: **Минимальные системные требования для minikube:** 1. 2 ядра процессора 2. 2Гб свободной оперативной памяти 3. 20Гб свободного места на жестком диске 4. Доступ в интернет 5. Установленная среда виртуализации Скачать соответствующий пакет для используемой операционной системы можно [тут](https://minikube.sigs.k8s.io/docs/start/). Пример установки для системы macOS: ``` curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-arm64 sudo install minikube-darwin-arm64 /usr/local/bin/minikube ``` После выполнения команд нужно запустить команду в терминале: ``` minikube start ``` Далее minikube выполнит все необходимые действия для создания окружения k8s и откроет доступ к готовому кластеру. Консоль при установке должна выводить аналогичные сообщения: ![](https://i.imgur.com/EevE53d.jpg) ## Как пользоваться ### Проверка состояния кластера ::: success Внутри **Kubernetes** всё является объектом. Объекты включаются следующим образом **container->pod->namespace**. Поэтому нужно команды конструировать по отношению к объекту. ::: Любые команды, которые отправляются в k8s должны быть прописаны через оснастку kubectl. Если она не подтянулась автоматически, можно установить её при помощи команды: ``` minikube kubectl -- get po -A ``` В этом случае скачивание и установка необходимой версии kubectl произойдет автоматически. Введенная команда должна вывести информацию о том в каком состоянии сейчас находятся ресурсы кластера. Пример вывода команды: ![](https://i.imgur.com/7qC2s4i.png) Чтобы посмотреть более подробно на состояние и настройки кластера, можно использовать команду: ``` minikube dashboard ``` После выполнения команды автоматически происходит открытие ссылки на dashboard: ![](https://i.imgur.com/xBAFGpI.png) Набор данных пуст, так как это запущенная команда сразу после старта и установки нового кластера. ### Установка нового приложения У k8s как и у docker есть тестовое приложение, которое можно развернуть для тестирования функциональности. В k8s это приложение **echoserver**. Чтобы установить приложение ужно запустить следущие команды: ``` kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.4 kubectl expose deployment hello-minikube --type=NodePort --port=8080 minikube service hello-minikube ``` Запущенный сервис будет просто собирать запросы. В логе можно посомтреть обращения к системе. Могут быть пробелмы с работой сетевого интерфейса, обычно решается установкой более новой версии minikube или перезагрузкой системы. ### Дополнительные полезные команды Попробуем рассмотреть команды, на примере minikube ноды, которые могут понадобиться для полноценного взаимодействия с k8s. Первой командой получем все ноды: ``` kubectl get nodes ``` Команду выше можно использовать с фильтром по имени ноды: ``` kubectl get nodes node1 ``` Чтобы собрать полную информацию по ноде, можно запустить команду: ``` kubectl describe nodes node1 ``` ::: danger Информации будет очень много, все они касаются характеристик ноды и её возможностей в кластере. ::: Чтобы запустить новый pod, в кластере можно пользоваться наименованиями, которые обнаруживаются в реестре image для контейнеров, например в dockerhub: ``` kubectl run devopsrep --image=nginx ``` Теперь иожно получить список всех pod через команду `get`: ``` kubectl get pods ``` Вывод команды будет примерно такой: ``` NAME READY STATUS RESTARTS AGE devopsrep 1/1 Running 0 57s ``` Удаоение pod выполняется командой: ``` kubectl delete pod devopsrep ``` ### Деплой через YAML kubernetes как и ansible может конфигурироваться чреез yaml файлы. Рассмотрим простой пример. Создадим pod: ``` kubectl run devopsrep --image=nginx ``` Теперь получим данные о конфигурации pod: ``` kubectl get pods devopsrep -o yaml ``` Вывод информации о созданном pod как раз будет в формате yaml. Фрагмент вывода команды: ![](https://i.imgur.com/gw9psKR.png) Ниже приведен пример pos, если бы мы создавали его в системе: ```yaml # This is an example of a pod --- apiVersion: v1 kind: Pod metadata: name: "devopsrep-pod" labels: name: "devopsrep-pod" spec: containers: - image: "nginx:alpine" name: nginx ``` Кстати, конфигурацию можно задеплоить командой: ``` kubectl apply -f test.yaml ``` Проверить создание pod можно командой: ``` kubectl get pods devopsrep-pod ``` Переконфигурирование pod, который уже был создан возможно проводить через новый файл или видоизмененный исходный. Ниже исправлена строка с наименованием image: ```yaml # This is an example of a pod --- apiVersion: v1 kind: Pod metadata: name: "devopsrep-pod" labels: name: "devopsrep-pod" spec: containers: - image: "nginx:latest" name: nginx ``` Запустить обновление можно вот так: ``` kubectl apply -f test1.yaml ``` Now, what do we see when we execute the following command? ``` kubectl get pods devopsrep-pod -o yaml ``` Чтобы pod был доступен снаружи в k8s используется понятие service. Это прослойка, которая позволяет получить доступ к данным pod и одновременно с этим прослойка может заниматься задачами балансировки. Изучить этот механизм можно [здесь](https://kubernetes.io/docs/concepts/services-networking/service/). В качесте самостоятельного задания можно попробовать пробросить порты для того чтобы открыть привествтенную страницу nginx в браузере. (Все нужные команды рассмотрены в документе выше). ### Полезные ссылки https://kubernetes.io/docs/home/