Використання kubectl для створення Deployment

Використання kubectl для створення Deployment

Цілі

  • Дізнайтесь про Deployment застосунків.
  • Розгорніть свій перший застосунок у Kubernetes за допомогою kubectl.

Перш ніж ви розпочнете

Команди оболонки в цьому посібнику використовують синтаксис оболонки POSIX, який підтримується стандартними оболонками у більшості систем Linux та macOS (наприклад, bash, zsh або sh). Користувачі Windows повинні використовувати оболонку, сумісну з POSIX, таку як Windows Subsystem for Linux (WSL) або Git Bash, щоб виконувати команди у наведеному вигляді. Команди, що використовують export, $() та подібні конструкції, не сумісні з PowerShell або командним рядком Windows.

Deployment у Kubernetes

Коли у вас є запущений кластер Kubernetes, ви можете розгортати на ньому свої контейнеризовані застосунки. Для цього створіть Deployment Kubernetes. Deployment вказує Kubernetes, як створювати та оновлювати екземпляри вашого застосунку. Після створення Deployment панель управління Kubernetes планує запуск екземплярів застосунку, що входять до цього Deployment, на окремих вузлах кластера.

Коли екземпляри застосунку створено, контролер Deployment у Kubernetes безперервно стежить за ними. Якщо вузол, на якому працює екземпляр, вимикається або видаляється, контролер Deployment замінює екземпляр новим на іншому вузлі кластера. Це забезпечує механізм самовідновлення на випадок відмови машин або їх обслуговування.

До появи оркестрування для запуску застосунків часто використовували скрипти встановлення, але вони не давали змоги відновитися після відмови машини. Створюючи екземпляри застосунку й підтримуючи їх роботу на різних вузлах, Deployment у Kubernetes забезпечують принципово інший підхід до керування застосунками.

Розгортання вашого першого застосунку в Kubernetes

Ви можете створювати Deployment і керувати ним за допомогою інтерфейсу командного рядка Kubernetes — kubectl. kubectl використовує API Kubernetes для взаємодії з кластером. У цьому модулі ви вивчите найпоширеніші команди kubectl, потрібні для створення Deployment, які запускають ваші застосунки в кластері Kubernetes.

Коли ви створюєте Deployment, вам потрібно вказати образ контейнера вашого застосунку та кількість реплік, які ви хочете запустити. Згодом цю інформацію можна змінити, оновивши ваш Deployment; Модуль 5 і Модуль 6 цього курсу розповідають, як масштабувати та оновлювати ваші Deployment.

Для вашого першого Deployment ви використаєте застосунок hello-node, упакований у Docker-контейнер, який використовує NGINX, щоб повертати всі запити. (Якщо ви ще не пробували створити застосунок hello-node і розгорнути його в контейнері, можете спершу зробити це за інструкціями з посібника Привіт Minikube.)

Вам також потрібно встановити kubectl. Якщо його ще не встановлено, перейдіть на сторінку Встановлення інструментів.

Тепер, коли ви знаєте, що таке Deployment, розгорнімо наш перший застосунок!

Основи kubectl

Загальний формат команди kubectl: kubectl дія ресурс.

Команда виконує вказану дію (наприклад, create, describe або delete) над вказаним ресурсом (наприклад, node або deployment). Ви можете додати --help після підкоманди, щоб отримати додаткову інформацію про можливі параметри (наприклад, kubectl get nodes --help).

Перевірте, що kubectl налаштовано для роботи з вашим кластером, виконавши команду kubectl version.

Переконайтесь, що kubectl встановлено і ви можете бачити як версію клієнта, так і версію сервера.

Щоб переглянути вузли в кластері, виконайте команду kubectl get nodes.

Ви побачите доступні вузли. Пізніше Kubernetes вибере, де розгорнути наш застосунок, на основі ресурсів, доступних на вузлах.

Розгортання застосунку

Розгорнімо наш перший застосунок у Kubernetes за допомогою команди kubectl create deployment. Нам потрібно вказати назву Deployment і розташування образу застосунку (для образів, розміщених поза Docker Hub, вкажіть повну URL-адресу репозиторію).

kubectl create deployment kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1

Чудово! Ви щойно розгорнули свій перший застосунок, створивши Deployment. Під час цього виконано кілька дій:

  • пошук відповідного вузла, де може бути запущений екземпляр застосунку (у нас доступний лише 1 вузол)
  • планування запуску застосунку на цьому вузлі
  • налаштування кластера на перепланування екземпляра на новий вузол за потреби

Щоб переглянути ваші Deployment, скористайтеся командою kubectl get deployments:

kubectl get deployments

Ми бачимо, що є 1 Deployment, який запускає один екземпляр вашого застосунку. Екземпляр працює в контейнері на вашому вузлі.

Перегляд застосунку

Podʼи, які працюють у Kubernetes, працюють в ізольованій приватній мережі. Стандартно їх видно з інших Podʼів і Service у тому самому кластері Kubernetes, але не ззовні цієї мережі. Коли ми використовуємо kubectl, ми взаємодіємо з нашим застосунком через точку доступу API.

Інші способи відкрити доступ до вашого застосунку ззовні кластера Kubernetes ми розглянемо пізніше, у Модулі 4. Оскільки це базовий посібник, тут ми не пояснюємо докладно, що таке Pods, це буде розглянуто в подальших темах.

Команда kubectl proxy може створити проксі, який пересилатиме дані в приватну мережу, що охоплює весь кластер. Роботу проксі можна завершити, натиснувши Control-C, і під час роботи він нічого не виводить.

Для запуску проксі потрібно відкрити друге вікно термінала.

kubectl proxy

Проксі зʼєднує ваш хост із кластером Kubernetes. Він продовжує працювати у другому терміналі, тому виконуйте наведені нижче команди у початковому терміналі.

Ви можете побачити всі ці API, доступні через точку доступу проксі. Наприклад, ми можемо запитати версію напряму через API за допомогою команди curl:

curl http://localhost:8001/version

API-сервер автоматично створює для кожного Podʼа точку доступу на основі імені Podʼа, яка також доступна через проксі.

Спочатку нам потрібно отримати імʼя Podʼа, і ми збережемо його в змінній середовища POD_NAME.

export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')
echo Name of the Pod: $POD_NAME

Ви можете отримати доступ до Podʼа через API за допомогою проксі, виконавши команду:

curl http://localhost:8001/api/v1/namespaces/default/pods/$POD_NAME:8080/proxy/

Щоб новий Deployment був доступний без використання проксі, потрібен Service, про який ідеться в Модулі 4.

Що далі