Це багатосторінковий друкований вигляд цього розділу. Натисність щоб друкувати.

Повернутися до звичайного перегляду сторінки.

Ознайомлення з основами Kubernetes

Цілі

Цей посібник ознайомлює з основами системи оркестрування кластерів Kubernetes. Кожен модуль містить вступну інформацію про основні можливості та концепції Kubernetes, а також посібник, кроки якого ви можете виконувати самостійно.

За допомогою цих посібників ви дізнаєтесь:

  • Як розгорнути контейнеризований застосунок в кластері.
  • Як масштабувати Deployment.
  • Як оновити контейнеризований застосунок до нової версії програмного забезпечення.
  • Як налагодити контейнеризований застосунок.

Чим Kubernetes може бути корисний для вас?

З сучасними вебсервісами користувачі очікують доступності застосунків 24/7, а розробники прагнуть розгортати нові версії цих застосунків кілька разів на день. Контейнеризація допомагає пакувати програмне забезпечення для досягнення цих цілей, даючи змогу випускати й оновлювати застосунки без простою. Kubernetes допомагає забезпечити, щоб контейнеризовані застосунки працювали там і тоді, де й коли вам потрібно, і допомагає їм отримувати ресурси та інструменти, потрібні для роботи. Kubernetes — це готова до промислового використання платформа з відкритим кодом, створена на основі накопиченого Google досвіду оркестрування контейнерів у поєднанні з найкращими ідеями спільноти.

Модулі «Основи Kubernetes»

Що далі

1 - Створення кластера

Дізнайтесь про кластери Kubernetes та створіть простий кластер за допомогою Minikube.

1.1 - Використання Minikube для створення кластера

Цілі

  • Дізнайтесь, що таке кластер Kubernetes.
  • Дізнайтесь, що таке Minikube.
  • Запустіть кластер Kubernetes на вашому компʼютері.

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

Цей посібник передбачає, що ви вже встановили minikube. Інструкції зі встановлення див. у minikube start.

Примітка:

Виконуйте лише інструкції з кроку 1: Встановлення. Решту описано в цьому посібнику.

Вам також потрібно встановити kubectl. Інструкції зі встановлення див. у розділі Встановлення інструментів.

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

Кластери Kubernetes

Kubernetes керує високодоступним кластером компʼютерів, зʼєднаних для роботи як єдине ціле. Абстракції в Kubernetes дозволяють розгортати контейнеризовані застосунки в кластері, не привʼязуючи їх до певних машин. Щоб скористатися цією новою моделлю розгортання, застосунки повинні бути упаковані таким чином, щоб відокремити їх від хостів: вони повинні бути контейнеризовані. Контейнеризовані застосунки є більш гнучкими та доступними, ніж у минулих моделях розгортання, коли застосунки встановлювалися безпосередньо на відповідні машини як пакунки, глибоко інтегровані в хост. Kubernetes автоматизує розподіл та планування контейнерів застосунків у кластері у більш ефективний спосіб. Kubernetes є платформою з відкритим кодом, готовою до промислового використання.

Кластер Kubernetes складається з двох типів ресурсів:

  • Панелі управління (Control Plane), що координує роботу кластера
  • Вузлів (Nodes) — робочих машин, на яких працюють застосунки

Схема кластера

Панель управління (Control Plane) відповідає за керування кластером. Вона координує всі процеси у вашому кластері, як-от планування застосунків, підтримання їх бажаного стану, масштабування застосунків і впровадження нових оновлень.

Вузол (Node) — це віртуальна машина або фізичний компʼютер, що виступає в ролі робочої машини в кластері Kubernetes. Кожен вузол має kubelet — агент для керування вузлом і взаємодії з панеллю управління Kubernetes. Також на вузлі мають бути інструменти для виконання операцій з контейнерами, як-от containerd або CRI-O. Поширена й підтримувана модель розгортання запускає компоненти панелі управління Kubernetes на виділених вузлах панелі управління.

Коли ви розгортаєте застосунки в Kubernetes, ви кажете панелі управління запустити контейнери застосунку. Панель управління планує запуск контейнерів на вузлах кластера. Компоненти рівня вузла, як-от kubelet, взаємодіють з панеллю управління через API Kubernetes, який надає панель управління. Кінцеві користувачі також можуть безпосередньо використовувати API Kubernetes для взаємодії з кластером.

Кластер Kubernetes можна розгорнути як на фізичних, так і на віртуальних машинах. Щоб розпочати розробку з Kubernetes, ви можете скористатися Minikube. Minikube — це спрощена реалізація Kubernetes, яка створює віртуальну машину на вашому локальному компʼютері та розгортає простий кластер, що містить лише один вузол. Minikube доступний для Linux, macOS і Windows. Minikube CLI надає основні операції початкового налаштування (bootstrapping) для роботи з кластером, зокрема start, stop, status і delete.

Створення кластера Minikube

Щоб запустити кластер Minikube:

minikube start

Щоб перевірити стан кластера:

minikube status

Повний покроковий приклад, зокрема розгортання вашого першого застосунку та ознайомлення з Kubernetes Dashboard, див. у посібнику Привіт Minikube.

Що далі

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

2.1 - Використання 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.

Що далі

3 - Вивчення застосунку

4 - Відкриття доступу до застосунку за межами кластера

5 - Масштабування застосунку

6 - Оновлення застосунку