Ваша первая практика с Kubernetes

KubernetesKubernetesBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

Добро пожаловать в вашу первую практическую работу (лабораторную работу) по Kubernetes! В этой практической работе вы познакомитесь с Kubernetes, мощной системой для управления контейнеризованными приложениями. К концу практической работы вы создадите и взаимодействуете с вашим первым развертыванием (deployment) в Kubernetes.

Не беспокойтесь, если вы новичок в контейнерах или оркестрации - мы объясним каждую концепцию по мере продвижения. Давайте начнем наше путешествие в мир Kubernetes!

Примечание: В этой практической работе требуется скачивать (pull) образы, но бесплатные пользователи не могут получить доступ в Интернет из среды практической работы. Эта практическая работа доступна только для пользователей LabEx Pro.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("Kubernetes")) -.-> kubernetes/BasicsGroup(["Basics"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicCommandsGroup(["Basic Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/TroubleshootingandDebuggingCommandsGroup(["Troubleshooting and Debugging Commands"]) kubernetes/BasicsGroup -.-> kubernetes/initialization("Initialization") kubernetes/BasicCommandsGroup -.-> kubernetes/get("Get") kubernetes/BasicCommandsGroup -.-> kubernetes/create("Create") kubernetes/BasicCommandsGroup -.-> kubernetes/delete("Delete") kubernetes/BasicCommandsGroup -.-> kubernetes/run("Run") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/describe("Describe") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/exec("Exec") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/logs("Logs") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/port_forward("Port-Forward") subgraph Lab Skills kubernetes/initialization -.-> lab-391133{{"Ваша первая практика с Kubernetes"}} kubernetes/get -.-> lab-391133{{"Ваша первая практика с Kubernetes"}} kubernetes/create -.-> lab-391133{{"Ваша первая практика с Kubernetes"}} kubernetes/delete -.-> lab-391133{{"Ваша первая практика с Kubernetes"}} kubernetes/run -.-> lab-391133{{"Ваша первая практика с Kubernetes"}} kubernetes/describe -.-> lab-391133{{"Ваша первая практика с Kubernetes"}} kubernetes/exec -.-> lab-391133{{"Ваша первая практика с Kubernetes"}} kubernetes/logs -.-> lab-391133{{"Ваша первая практика с Kubernetes"}} kubernetes/port_forward -.-> lab-391133{{"Ваша первая практика с Kubernetes"}} end

Запуск кластера Kubernetes

Мы начнем с создания локального кластера Kubernetes с использованием Minikube. Minikube позволяет запускать однодневный (single-node) кластер Kubernetes на вашем компьютере, что идеально подходит для обучения и разработки.

Сначала откройте терминал. Вы должны находиться в директории /home/labex/project. Если вы не уверены, вы можете перейти в эту директорию, введя:

cd /home/labex/project

Теперь давайте запустим кластер Minikube:

Примечание: Бесплатные пользователи не могут подключиться к Интернету, поэтому Minikube уже запущен заранее при запуске практической работы. Вы можете пропустить этот шаг. Перейдите на профессиональный план, чтобы самостоятельно попрактиковаться в запуске кластера.

Только для профессиональных пользователей
minikube start
Инициализация кластера Minikube

Эта команда инициализирует кластер Kubernetes на вашем локальном компьютере. Вот что происходит в фоновом режиме:

  1. Minikube создает виртуальную машину (VM) на вашем компьютере.
  2. Он устанавливает и настраивает Kubernetes внутри этой виртуальной машины.
  3. Он настраивает сеть, чтобы ваш компьютер мог взаимодействовать с кластером.

Этот процесс может занять несколько минут. Вы увидите много вывода, пока Minikube работает. Не беспокойтесь, если вы не понимаете все - главное, дождаться сообщения "Done!" в конце.

Создание первого развертывания (Deployment)

Теперь, когда наш кластер запущен, давайте создадим наше первое развертывание (deployment) в Kubernetes. Развертывание - это объект Kubernetes, который управляет группой идентичных подов (pods). (Не беспокойтесь, мы скоро объясним, что такое поды!)

Мы создадим развертывание, которое запускает один контейнер веб - сервера NGINX. NGINX - это популярный веб - сервер, который мы будем использовать в этом примере.

Запустите эту команду:

kubectl create deployment hello-kubernetes --image=nginx:latest --port=80

Разберем эту команду по частям:

  • kubectl - это инструмент командной строки для взаимодействия с Kubernetes.
  • create deployment сообщает Kubernetes создать новое развертывание.
  • hello-kubernetes - это имя, которое мы даем нашему развертыванию.
  • --image=nginx:latest указывает, что мы хотим использовать последнюю версию Docker - образа NGINX.
  • --port=80 сообщает Kubernetes, что контейнер будет прослушивать порт 80 (стандартный порт для веб - трафика).

После выполнения этой команды вы должны увидеть:

deployment.apps/hello-kubernetes created

Это означает, что Kubernetes успешно создал ваше развертывание. Но что именно он сделал?

  1. Kubernetes загрузил Docker - образ NGINX.
  2. Он создал под (группу из одного или нескольких контейнеров) и запустил контейнер NGINX внутри него.
  3. Он настроил сеть так, чтобы к поду можно было обращаться по порту 80.

Проверка развертывания (Deployment)

Теперь, когда мы создали развертывание, давайте более подробно рассмотрим, что Kubernetes настроил для нас.

Сначала проверим статус нашего развертывания:

kubectl get deployments

Вы должны увидеть что - то вроде этого:

NAME               READY   UP-TO-DATE   AVAILABLE   AGE
hello-kubernetes   1/1     1            1           2m

Этот вывод сообщает нам:

  • READY: 1/1 означает, что один под готов из одного желаемого пода.
  • UP - TO - DATE: 1 означает, что один под работает с последней конфигурацией.
  • AVAILABLE: 1 означает, что один под доступен для обработки трафика.

Далее, давайте посмотрим на поды (pods), которые создало наше развертывание:

kubectl get pods

Вы должны увидеть что - то вроде этого:

NAME                                READY   STATUS    RESTARTS   AGE
hello-kubernetes-6b89d599b9-x7tpv   1/1     Running   0          3m

Точное имя пода будет другим, но вы должны увидеть один под со статусом "Running" (Запущен). Этот под содержит наш контейнер NGINX.

Если вы не видите запущенного пода, подождите минуту и попробуйте снова. Kubernetes может все еще создавать под или загружать образ NGINX.

Чтобы получить более подробную информацию о нашем поде, запустите:

kubectl describe pod hello-kubernetes-6b89d599b9-x7tpv

Примечание: Замените hello-kubernetes-6b89d599b9-x7tpv на имя вашего пода, как показано в выводе команды kubectl get pods.

Эта команда выведет много информации. Не беспокойтесь, если не понимаете все сейчас. Основные вещи, на которые стоит обратить внимание:

  • Status: Должен быть "Running" (Запущен)
  • IP: Внутренний IP - адрес пода
  • Containers: Информация о контейнере NGINX, запущенном в поде

Если вы видите какие - то ошибки в этом выводе, они могут помочь диагностировать проблемы с вашим подом.

Доступ к вашему приложению

Теперь, когда наше развертывание (deployment) запущено, давайте обратимся к веб - серверу NGINX, который мы развернули.

В типичной среде Kubernetes мы бы создали Сервис (Service), чтобы сделать наше развертывание доступным в сети. Для упрощения в этой локальной среде мы вместо этого используем перенаправление портов (port forwarding).

Запустите эту команду:

kubectl port-forward $(kubectl get pods -o name) 8080:80

Эта команда делает следующее:

  • $(kubectl get pods -o name) получает имя нашего пода (pod).
  • 8080:80 сообщает Kubernetes перенаправить трафик с порта 8080 на вашем локальном компьютере на порт 80 в поде.

Вы не увидите никакого вывода, но команда будет продолжать работать. Это нормально!

Теперь откройте новое окно терминала и запустите:

curl http://localhost:8080
Отображение приветственной страницы NGINX

Вы должны увидеть HTML - содержимое - это приветственная страница NGINX!

Если вы не видите HTML:

  • Убедитесь, что команда перенаправления портов все еще работает в другом терминале.
  • Проверьте, что вы правильно ввели команду curl.
  • Попробуйте обратиться к http://localhost:8080 в веб - браузере, если curl не работает.

Чтобы остановить перенаправление портов, вернитесь в исходное окно терминала и нажмите Ctrl + C.

Очистка ресурсов

Отличная работа! Вы успешно развернули и получили доступ к приложению в Kubernetes. Теперь давайте очистим наши ресурсы.

Сначала удалим наше развертывание (deployment):

kubectl delete deployment hello-kubernetes

Вы должны увидеть:

deployment.apps "hello-kubernetes" deleted

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

Проверьте, что развертывание и под удалены:

kubectl get deployments
kubectl get pods

Обе команды должны вернуть "No resources found in default namespace." (В пространстве имен по умолчанию не найдено ресурсов).

Если вы все еще видите ресурсы, подождите немного и попробуйте снова. Kubernetes может все еще быть в процессе их удаления.

Наконец, остановите кластер Minikube:

minikube stop

Это остановит виртуальную машину Minikube, но сохранит состояние кластера на вашем компьютере. Вы можете запустить его снова позже с помощью команды minikube start.

Если вы хотите полностью удалить кластер Minikube, вы можете выполнить команду minikube delete. Однако это не обязательно на данный момент.

Итоги

Поздравляем! В этом практическом занятии вы сделали первые шаги с Kubernetes. Вы научились:

  1. Запускать локальный кластер Kubernetes с использованием Minikube
  2. Создавать развертывание (deployment) с помощью kubectl
  3. Проверять развертывание и поды (pods), которые оно создает
  4. Получать доступ к развернутому приложению с использованием перенаправления портов (port forwarding)
  5. Очищать ресурсы и останавливать кластер

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

Помните, что Kubernetes - это мощная и сложная система. Нормально, если некоторые концепции еще не ясны - изучение Kubernetes - это путь. Продолжайте практиковаться, и вы постепенно получите более глубокое понимание. Удачи в вашем путешествии по изучению Kubernetes!