У цій статті ми коротко проведемо процедуру підготовки сервера та розгортання найпростішого кластера Kubernetes на одному хості, розгляньте приклад контейнера Nginx в околицях Kubernetes.
Зміст:
- Установка Docker для Kubernates
- Налаштування та запуску кластерів Kubernetes
- Запуск контейнера Nginx в Kubernetes
Коротко про те, що таке Кубернаї. Кубернети (Часто використовується зменшення K8)- Це відкритий код, створений для управління конвеєрними програмами, розгортанням автоматизації та масштабуванням.
Kubernetes написано в Google Engooders. Google відкрив вихідний код Kubernetes у 2014 році.
Плюси використання:
- Найбільш оптимальне використання заліза
- Спрощує доставку програми внаслідок інтеграції з CI/CD
- Дозволяє швидко масштабувати програми
- відмовостійкість
- Толерантність
Це одна з найбільш очевидних переваг реалізації. Давайте встановимо Kubernetes у віртуальну машину з Ubuntu Server 20 OS.04 і подивіться на практиці, як це працює.
Параметри VM:
- Ip: 192.168.0.дев'ятнадцять
- Ім'я хоста: K8S-Master
Підключіться до консолі сервера через SSH.
Спочатку вимкніть брандмауер
# Sudo ufw відключити
Брандмауер зупинився та відключений при запуску системи
Тоді вам потрібно вимкнути файл насоса Swap. Кубернатс не почнеться з нього:
# Sudo swapoff -a
# Sudo sed -i 's/^\/swap/# \/swap/'/etc/fstab
Установка Docker для Kubernates
Далі вам потрібно встановити систему контейнерів Docker. Розробники Kubernates офіційно оголосили, що з моменту Kubernates V1.23 Вони повністю відмовиться від Докера як виконане контейнерне середовище. Замість Docker буде використовуватися внутрішній інтерфейс виконання контейнера (CRI). Всі старі версії K8S та поточні Kubernetes v1.21 Продовжуйте використовувати Docker як систему контейнерності.
Встановіть пакети, які дозволяють отримати доступ до APT -сховищ на протоколі HTTPS:
# Sudo apt-get update && sudo apt-gget instport-transport-https ca-certificates curl software-properties-common gnupg2
Додайте офіційний ключ Docker GPG:
# Sudo curl -fssl https: // завантажити.Докер.Com/linux/ubuntu/gpg | Sudo apt-ключ додавання -
Додайте сховище Docker:
# Sudo add-apt-repository \
"Deb [arch = amd64] https: // завантажити.Докер.Com/linux/ubuntu \
$ (lsb_release -cs) \
Стабільний "
Тепер ви можете встановити сам Docker:
# Sudo apt-get update && sudo apt-get install -y \
Контейнер.Io = 1.2.13-2 \
Docker -ce = 5: 19.03.11 ~ 3-0 ~ Ubuntu- $ (lsb_release -cs) \
Docker -ce -cli = 5: 19.03.11 ~ 3-0 ~ Ubuntu- $ (lsb_release -cs)
Створіть конфігураційний файл для Doker Demon:
# Sudo mkdir/etc/docker/
# Sudo nano/etc/docker/deemon.Json
Вкажіть наступну конфігурацію:
"Exec-opts": ["рідний.CgroupDriver = systemd], "log-driver": "json-file", "log-opts": "max-size": "100 м", "драйвер зберігання": "накладання2"
- Exec-opts - Параметр визначає, що буде керувати групами контролю контейнера.
- Драйвер - Напишу журнал в json
- Максимальний - Максимальний розмір журналу фала
- Водій - Драйвер для файлової системи зображень.
Відновіть послугу Docker і додайте її до автоматичного завантаження:
# Sudo mkdir -p/etc/systemd/system/docker.Послуга.D
# Sudo Systemctl Daemon-Reload
# Sudo systemctl перезавантажити docker
# Sudo systemctl enable docker
Синхронізація стану Докера.Сервіс із SYSV Service Script за допомогою/lib/systemd/systemd-sysv-innstall. Виконання:/lib/systemd/systemd-sysv-incall увімкнути docker
Після цього потрібно додати, щоб змінити параметри iptables:
# Sudo nano /etc /система.D/K8.Конфігурація
Потрібно додати такі параметри:
Сітка.Мост.Bridge-NF-Call-IP6Tables = 1 сітка.Мост.Bridge-nf-call-iptables = 1Ці параметри дозволяють обробляти мостовий трафік у NetFilter.
Застосуйте налаштування:
# Sudo syssctl - Система
Налаштування та запуску кластерів Kubernetes
Тепер вам потрібно встановити утиліти, які дозволяють розширювати, налаштувати та керувати кластером Кубернети.
- Кубедм - Це утиліта, яка дозволяє спростити встановлення кластера Kubernetes
- Кублет - компонент, який запускається на всіх вузлах кластера і контролює початок поту, монітори та Т.D ..
- Кубектл - Комбінований утиліта управління кластерами K8
Щоб їх встановити, додайте клавішу GPG:
# Sudo curl -s https: // пакети.Хмара.Google.Com/apt/doc/apt-ключ.GPG | Sudo apt-ключ додавання -
Додайте сховище:
# Sudo cat <
Eof
Ми оновлюємо список повторень та встановлюємо утиліти K8S:
# Sudo apt-get оновлення
# Sudo apt -get install -kubelet kubeadm kubectl
Весь підготовчий етап завершено, ви можете почати встановлювати самі Kubernetes.
Завантажте необхідні зображення із сховища. Ми запускаємо команду і переходимо на заливання кави, процес може бути не швидким, все залежить від швидкості вашого Інтернету.
# Sudo kubeadm конфігураційні зображення витягують
Щоб ініціалізувати кластер K8S, дотримуйтесь команди:
# Sudo kubeadm init-network-cidr = 10.244.0.0/16
Ключ -Pod-network-cidr вказує на те, що внутрішня (розгорнута Кубернети) буде 10.244.0.0/16.
Перший раз, коли я запустив цю команду, я отримав повідомлення про помилку:
[Init] Використання версії Kubernetes: v1.21.2 [Preflight] Запуск попереднього польоту перевіряє фазу виконання помилки перед польотом: [Preflight] сталася деякі фатальні помилки: [errum numcpu]: кількість доступних процесорів 1 менше, ніж необхідний 2 [Preflight] Якщо ви знаєте, що ви робите, Ви можете зробити перевірку нефаталу з "ігнорувати-плюхові-сердир = ...", щоб побачити запас акцій цієї помилки, виконані за допомогою --v = 5 або вище
Потрібно бігати з ключем --v = 5
, що виведе детальну причину помилки. У моєму випадку було виділено VM, на якому Kubernetes встановив лише одне ядро, і було потрібно щонайменше 2.
Я вимкнув VM, додав додатковий VCPU і все почалося. З успішним запуском ми повинні отримати такий висновок:
[Init] Використання версії Kubernetes: v1.21.2 [Preflight] Запуск попереднього польоту перевіряє [перед польотом], витягуючи зображення, необхідні для налаштування кластера Kubernetes [Preflight] Це може зайняти хвилину-дві, залежно від швидкості вашого підключення до Інтернету [Preflight] Ви також можете виконати цю дію в заздалегідь використовуючи "kubeadm config images taull" [certs] за допомогою сертифікатної папки "/etc/kubernetes/pki" [certs], генеруючи сертифікат "ca" та ключ [certs], що генерує сертифікат "apiserver" та клавіші [certs] apiserver, що обслуговується cert, підписаний Для імен DNS [K8S-Master Kubernetes Kubernetes.За замовчуванням Kubernetes.За замовчуванням.SVC Kubernetes.За замовчуванням.SVC.Кластер.Місцевий] та IPS [10.96.0.1 192.168.0.19] [Certs] Генерування сертифіката та ключа Apiserver-kubelet-client "[certs] генерування сертифіката та ключа сертифікатів сертифікатів" сертифікат "та ключів [certs] генеруючи сертифікат та клавіші [certs] сертифікат /ключ [Certs] etcd/сервер "Сертифікат та ключ [ceres] etcd/сервер підписується на імена DNS [K8S-Master Localhost] та IPS [192.168.0.19 127.0.0.1 :: 1] [Certs] Покоління "etcd/peer" сертифікат та ключ [certs] etcd/peer serving cert підписується на назви DNS [K8s-Master localhost] та IPS [192.168.0.19 127.0.0.1 :: 1] [certs] Генерування сертифікату та клавіш "etcd/healthceck-client" [certs] генерування сертифікату та клавіш "certs]" adiserver-etcd-client "[certs] генерування клавіші та відкритого ключа kubeconfig] за допомогою папок Kubeconfig [kubeconfig] за допомогою KubeConfig "/etc/kubernetes" [kubeconfig] писати "адміністратор.Conf "kubeconfig файл [kubeconfig] написання" kubelet.Conf "kubeconfig file [kubeconfig] написати" контролер-менеджер.Conf "kubeconfig file [kubeconfig] написати" планувальник ".Conf "kubeconfig file [kubelet-start] Записний файл середовища kubelet з прапорами у файл"/var/kubelet/kubeadm-flags.Env "[kubelet-start] Запис конфігурації kubelet у файл"/var/lib/kubelet/config.yaml "[kubelet-start] запуск кулевого [керуючого площини] за допомогою маніфестної папки"/etc/kubernetes/maniastes "[керуюча площина], створюючи статичний маніфест стручка для" kube-apiserver "[керуюча площина], створюючи статичний стручковий маніфест для "kube-controller-manager" [керуюча площина] створення статичного маніфесту стручка для "kube-scheduler" [etcd] креатичного маніфесту для локального etcd для kubelet для завантаження площини управління як статичні стручки з каталогу "/etc///etc/etc//etc//etc/etc/etc/etc/etc/etc/etc/etc/etc/etc/. Kubernetes/проявки ". Це може зайняти до 4M0 [apicLient] Усі компоненти управління контрольними після 12.505102 секунди [завантаження-конфіг] зберігання конфігурації USSAP "Kubeadm-Config" у просторі імен "Kube-System" [kubelet] Створення конфігурації "kubelet -ornfig.21 "в просторі імен Kube-SOSTEM з конфігурацією для кубелетів у кластері [завантаження-керти]. Будь ласка, дивіться-inupload-certs [kark-control-plane], що позначають вузол k8s-master як керуючу площину, додавши мітки: [вузол-роль.Кубернети.IO/MASTER (відставлений) вузол-роль.Кубернети.IO/КОНТРОЛЬНИЙ ПЛАЙН.Кубернети.IO/Виключення-від-зовнішній навантаження Баланс] [Площа-контроль позначки], що позначає вузол K8S-Master як контрольну площину, додавши.Кубернети.IO/Master: Noschedule] [Bootstrap-token] Використання маркера: Z689OJ.pu0b5nxub3frdob6 [bootstrap-token] Налаштування токенів bootstrap, cluster-info configmap, ролі RBAC [bootstrap-token] налаштовані правила RBAC, щоб дозволити токенам для завантаження вузлів [Bootstrap-token] налаштовані правила RBAC, щоб дозволити завантажувальники вузлів для post csrsp in post csrsp in v pll in v prod v prod v pro post pro pl. Замовте для вузлів отримати довгострокові дані сертифікатів [Bootstrap-token] налаштовані правила RBAC, щоб дозволити контролер CSRApprover автоматично затвердити CSR з токену Bootstrap Node [Bootstrap-token] налаштовані правила RBAC, щоб дозволити обертання сертифікатів для всіх сертифікатів клієнта вузла в кластері [Bootstrap-token] Створення конфігурації "Cluster-Info" у просторі імен "Kube-Public" [kubelet-finalize] оновлення "/etc/kubernetes/kubelett.conf ", щоб вказати на сертифікат клієнта Кублета та ключ [Addons] Застосовуваний необхідний додаток: Coredns [Addons] застосований Essential Addon: Kube-Proxy Ваш керуючий площина Kubernetes успішно ініціалізується! Щоб почати використовувати кластер, вам потрібно запустити наступний як звичайний користувач: mkdir -p $ home/.Kube sudo cp -i/etc/kubernetes/адміністратор.Conf $ home/.Kube/config sudo chown $ (id -u): $ (id -g) $ home/.Альтернативно Kube/config, якщо ви є користувачем Root, ви можете запустити: експортувати kubeconfig =/etc/kubernetes/admin.Cont You Shoup тепер розгорніть мережу стручок на кластер. Запустіть "kubectl infoct -f [podnetwork].Yaml "З одним із варіантів, перелічених за адресою: https: // kubernetes.IO/Docs/Concepts/Cluster-dministranis/Addons/Ви приєднуєте будь-які вузли числа, запускаючи наступне на кожному як корінь: kubeadm Приєднуйтесь до 192.168.0.19: 6443 -Token Z689OJ.PU0B5NXUB3FRDOB6 \-Discovery-Token-Ca-Cert-Cert-Hash SHA256: 0C91B280545CA2769DA492EE24BA0DB2630F9D6FC379BD7C585DF56451
Весь кластер K8S розпочався. Для того, щоб виконати команди з поточного користувача, вам потрібно скопіювати адміністратора Config Cluster.
Створіть каталог у домашньому каталозі поточного користувача:
# mkdir -p $ home/.Куб
Скопіюйте конфігурацію адміністратора кластера:
# Sudo cp -i/etc/kubernetes/адміністратор.Conf $ home/.Kube/config
Налаштуйте права:
# Sudo Chown $ (id -u): $ (id -g) $ home/.Kube/config
Також ця конфігурація може бути скопійована безпосередньо в хост, з якого ви хочете керувати кластером K8S.
Кластер майже налаштований, але вам все одно потрібно встановити плагін, який керуватиме мережею (інтерфейс контейнерного мережі CNI)). Для цього ми виконуємо таку команду:
# kubectl застосувати -f https: // raw.Githubusercontent.Com/coreos/flannel/master/documentation/kube-flannel.yml
ПОПЕРЕДЖЕННЯ: Політика/V1beta1 podsecurityPolacy відбивається у V1.21+, недоступний у V1.25+ podsecurityPolicy.Політика/PSP.Фланель.Непривілейований Creed Cledole.RBAC.Дозвіл.K8.IO/Flannel Creed ClusterroLebinding.RBAC.Дозвіл.K8.IO/Flannel Creed ServiceAccount/Flannel Creed Configmap/Kube-flannel-cfg Creed Deemonset.Програми/kube-flannel-ds creed
А оскільки у нас є тестовий кластер і він складається з одного вузла. Тому нам потрібно дозволити запуск контейнерів до головного вузла.
# Кубектл Тенн-вузли-Всі вузол-роль.Кубернети.IO/Master-Node/K8S-Master Untainted
Щоб перевірити, чи всі компоненти кластера розпочалися та працюють, виконайте команду:
# Kubectl отримувати стручки-kube-cube-sostem
Ця команда відображає всі запущені субсидії в просторі імен системи.
Стручок - Це логічна асоціація контейнерів або контейнера в одну програму із загальною IP -адресою та ресурсами диска. POD може складатися з одного контейнера або декількох. Припустимо, один із проектів, який ми маємо під складом Nginx, Gunicorn з проектом Django та селерою.Запуск контейнера Nginx в Kubernetes
Кластер Kubernates встановлений і працює, ви можете спробувати запустити тест під наприклад, з веб -сервером nginx. Для цього виконайте команду:
# kubectl запустити nginx -image = nginx
Pod/nginx creed
За допомогою цієї команди ми вказали кластер завантажити зображення Nginx останню доступну версію та почати стручок таким чином.
Щоб перевірити роботу нашого стручка, ми виконаємо:
# Kubectl отримати стручки -w
Ключ -w дозволяє очікувати зміни статусу.
Для перегляду журналів POD:
# kubectl журналів nginx -f
Щоб підключитися до віртуальної консолі POD, використовуйте команду:
# kubectl exec -it nginx - /bin /bash
Видалити стручок:
# Kubectl delete pods nginx