Как создать кластер Kubernetes с помощью Kubeadm в Ubuntu 18.04

Автор выбрал Free и Open Source Fund, чтобы получить пожертвование как часть Write for DOnations program.

Вступление

https://kubernetes.io [Kubernetes] - система оркестровки контейнеров, которая управляет контейнерами в масштабе. Первоначально разработанная Google на основе своего опыта запуска контейнеров в производстве, Kubernetes является открытым исходным кодом и активно развивается сообществом по всему миру.

Kubeadm автоматизирует установку и настройку таких компонентов Kubernetes, как сервер API, диспетчер контроллеров и Kube DNS. Однако он не создает пользователей и не управляет установкой зависимостей уровня операционной системы и их конфигурацией. Для выполнения этих предварительных задач можно использовать инструмент управления конфигурацией, например Ansible или SaltStack. Использование этих инструментов делает создание дополнительных кластеров или воссоздание существующих кластеров намного проще и менее подвержено ошибкам.

В этом руководстве вы с нуля создадите кластер Kubernetes с помощью Ansible и Kubeadm, а затем развернете в нем контейнерное приложение Nginx.

цели

Ваш кластер будет включать следующие физические ресурсы:

  • * Один главный узел *

Главный узел (node в Kubernetes относится к серверу) отвечает за управление состоянием кластера. Он запускает Etcd, который хранит кластерные данные среди компонентов, которые планируют рабочие нагрузки на рабочие узлы.

  • * Два рабочих узла *

Рабочие узлы - это серверы, на которых ваши работы (т. Е. контейнерные приложения и сервисы). Рабочий продолжит выполнять вашу рабочую нагрузку, как только он будет ей назначен, даже если мастер выйдет из строя после завершения планирования. Пропускная способность кластера может быть увеличена путем добавления рабочих.

После выполнения этого руководства у вас будет кластер, готовый для запуска контейнерных приложений, при условии, что серверы в кластере имеют достаточно ресурсов ЦП и ОЗУ для ваших приложений. Практически любое традиционное Unix-приложение, включая веб-приложения, базы данных, демоны и инструменты командной строки, может быть помещено в контейнер и настроено для работы в кластере. Сам кластер будет потреблять около 300-500 МБ памяти и 10% ЦП на каждом узле.

Когда кластер настроен, вы развернете на нем веб-сервер Nginx, чтобы убедиться, что он правильно выполняет рабочие нагрузки.

Предпосылки

  • Пара ключей SSH на вашем локальном компьютере Linux / macOS / BSD. Если вы ранее не использовали ключи SSH, вы можете узнать, как их настроить, следуя https://www.digitalocean.com/community/tutorials/ssh-essentials-working-with-ssh-servers-clients-and- keys # генерация-и-работа-с-ssh-keys [это объяснение того, как настроить SSH-ключи на вашем локальном компьютере].

  • Три сервера под управлением Ubuntu 18.04 с минимум 2 ГБ ОЗУ и 2 виртуальными ЦП каждый. Вы должны быть в состоянии подключиться по SSH к каждому серверу как пользователь root с вашей парой ключей SSH.

  • Ansible установлен на вашем локальном компьютере. Если вы используете Ubuntu 18.04 в качестве своей ОС, следуйте разделу «Шаг 1 - Установка Ansible» в https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-ansible-on- ubuntu-18-04 # step-1-% E2% 80% 94-installation-ansible [Как установить и настроить Ansible в Ubuntu 18.04] для установки Ansible. Для получения инструкций по установке на других платформах, таких как macOS или CentOS, следуйте official Ansible установочной документации.

  • Знакомство с Ansible playbooks. Для ознакомления, ознакомьтесь с Configuration Management 101: Написание Ansible Playbooks.

  • Знание того, как запустить контейнер из образа Docker. Посмотрите на «Шаг 5 - Запуск контейнера Docker» в https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-18-04#step-5- % E2% 80% 94-running-a-docker-container [Как установить и использовать Docker в Ubuntu 18.04], если вам требуется переподготовка.

Шаг 1 - Настройка каталога рабочей области и файла инвентаризации Ansible

В этом разделе вы создадите каталог на своем локальном компьютере, который будет служить вашим рабочим пространством. Вы настроите Ansible локально, чтобы он мог взаимодействовать и выполнять команды на ваших удаленных серверах. После этого вы создадите файл + hosts +, содержащий информацию об инвентаризации, такую ​​как IP-адреса ваших серверов и группы, к которым принадлежит каждый сервер.

Из трех ваших серверов один будет ведущим с IP-адресом, отображаемым как `. Два других сервера будут рабочими и будут иметь IP-адреса ` и ++.

Создайте каталог с именем + ~ / kube-cluster в домашнем каталоге вашего локального компьютера и вставьте в него` + cd`:

mkdir ~/kube-cluster
cd ~/kube-cluster

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

Создайте файл с именем + ~ / kube-cluster / hosts +, используя + nano + или ваш любимый текстовый редактор:

nano ~/kube-cluster/hosts

Добавьте в файл следующий текст, в котором будет указана информация о логической структуре вашего кластера:

~ / Кубэ-кластер / хосты

[masters]
master ansible_host= ansible_user=root

[workers]
worker1 ansible_host= ansible_user=root
worker2 ansible_host= ansible_user=root

[all:vars]
ansible_python_interpreter=/usr/bin/python3

Вы можете вспомнить, что inventory files в Ansible используются для указания информации о сервере, такой как IP-адреса, удаленные пользователи и группы серверов, на которые нужно настроить таргетинг как единый блок для выполнения команд. + ~ / kube-cluster / hosts + будет вашим файлом инвентаря, и вы добавили к нему две группы Ansible (* master * и * worker *), определяющие логическую структуру вашего кластера.

В группе * masters * есть запись сервера с именем «master», в которой указан IP-адрес главного узла (++) и указано, что Ansible должен выполнять удаленные команды от имени пользователя root.

Аналогично, в группе * worker * есть две записи для рабочих серверов (` и `), которые также указывают + ansible_user + в качестве пользователя root.

Последняя строка файла указывает Ansible использовать интерпретаторы Python 3 удаленных серверов для своих операций управления.

Сохраните и закройте файл после добавления текста.

Настроив инвентаризацию серверов с группами, давайте перейдем к установке зависимостей уровня операционной системы и созданию параметров конфигурации.

Шаг 2 - Создание пользователя без прав root на всех удаленных серверах

В этом разделе вы создадите пользователя без полномочий root с правами sudo на всех серверах, чтобы вы могли подключаться к ним по SSH вручную как непривилегированный пользователь. Это может быть полезно, если, например, вы хотите просмотреть системную информацию с помощью таких команд, как + top / htop +, просмотреть список запущенных контейнеров или изменить файлы конфигурации, принадлежащие пользователю root. Эти операции обычно выполняются во время обслуживания кластера, и использование пользователя без полномочий root для таких задач сводит к минимуму риск изменения или удаления важных файлов или непреднамеренного выполнения других опасных операций.

Создайте файл с именем + ~ / kube-cluster / initial.yml + в рабочей области:

nano ~/kube-cluster/initial.yml

Затем добавьте следующий play в файл, чтобы создать пользователя без полномочий root с правами sudo на всех серверах. Игра в Ansible - это набор шагов, которые необходимо выполнить для определенных серверов и групп. Следующая игра создаст некорневого пользователя sudo:

~ / Kube-кластер / initial.yml

- hosts: all
 become: yes
 tasks:
   - name: create the 'ubuntu' user
     user: name=ubuntu append=yes state=present createhome=yes shell=/bin/bash

   - name: allow 'ubuntu' to have passwordless sudo
     lineinfile:
       dest: /etc/sudoers
       line: 'ubuntu ALL=(ALL) NOPASSWD: ALL'
       validate: 'visudo -cf %s'

   - name: set up authorized keys for the ubuntu user
     authorized_key: user=ubuntu key="{{item}}"
     with_file:
       - ~/.ssh/id_rsa.pub

Вот описание того, что делает эта книга:

  • Создает некорневого пользователя + ubuntu.

  • Настраивает файл + sudoers, чтобы пользователь` + ubuntu` мог запускать команды + sudo + без запроса пароля.

  • Добавляет открытый ключ на вашем локальном компьютере (обычно + ~ / .ssh / id_rsa.pub +) в список авторизованных ключей удаленного пользователя + ubuntu +. Это позволит вам использовать SSH на каждом сервере как пользователь + ubuntu +.

Сохраните и закройте файл после добавления текста.

Затем выполните playbook, выполнив локально:

ansible-playbook -i hosts ~/kube-cluster/initial.yml

Команда будет выполнена в течение двух-пяти минут. По завершении вы увидите вывод, похожий на следующий:

OutputPLAY [all] ****

TASK [Gathering Facts] ****
ok: [master]
ok: [worker1]
ok: [worker2]

TASK [create the 'ubuntu' user] ****
changed: [master]
changed: [worker1]
changed: [worker2]

TASK [allow 'ubuntu' user to have passwordless sudo] ****
changed: [master]
changed: [worker1]
changed: [worker2]

TASK [set up authorized keys for the ubuntu user] ****
changed: [worker1] => (item=ssh-rsa AAAAB3...)
changed: [worker2] => (item=ssh-rsa AAAAB3...)
changed: [master] => (item=ssh-rsa AAAAB3...)

PLAY RECAP ****
master                     : ok=5    changed=4    unreachable=0    failed=0
worker1                    : ok=5    changed=4    unreachable=0    failed=0
worker2                    : ok=5    changed=4    unreachable=0    failed=0

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

Шаг 3 - Установка зависимостей Kubernetetes

В этом разделе вы установите пакеты уровня операционной системы, требуемые Kubernetes, с помощью менеджера пакетов Ubuntu. Эти пакеты являются:

  • Docker - среда выполнения контейнера. Это компонент, который запускает ваши контейнеры. Поддержка других сред выполнения, таких как rkt, активно разрабатывается в Kubernetes.

  • + kubeadm + - инструмент CLI, который устанавливает и настраивает различные компоненты кластера стандартным способом.

  • + kubelet + - системная служба / программа, которая работает на всех узлах и обрабатывает операции на уровне узлов.

  • + kubectl + - инструмент CLI, используемый для выдачи команд кластеру через его API-сервер.

Создайте файл с именем + ~ / kube-cluster / kube-dependencies.yml + в рабочей области:

nano ~/kube-cluster/kube-dependencies.yml

Добавьте следующие файлы в файл, чтобы установить эти пакеты на свои серверы:

~ / Кубэ-кластер / Кубэ-dependencies.yml

- hosts: all
 become: yes
 tasks:
  - name: install Docker
    apt:
      name: docker.io
      state: present
      update_cache: true

  - name: install APT Transport HTTPS
    apt:
      name: apt-transport-https
      state: present

  - name: add Kubernetes apt-key
    apt_key:
      url: https://packages.cloud.google.com/apt/doc/apt-key.gpg
      state: present

  - name: add Kubernetes' APT repository
    apt_repository:
     repo: deb http://apt.kubernetes.io/ kubernetes-xenial main
     state: present
     filename: 'kubernetes'

  - name: install kubelet
    apt:
      name: kubelet=1.14.0-00
      state: present
      update_cache: true

  - name: install kubeadm
    apt:
      name: kubeadm=1.14.0-00
      state: present

- hosts: master
 become: yes
 tasks:
  - name: install kubectl
    apt:
      name: kubectl=1.14.0-00
      state: present
      force: yes

Первая пьеса в пьесе делает следующее:

  • Устанавливает Docker, контейнер выполнения.

  • Установите + apt-transport-https, что позволит вам добавить внешние источники HTTPS в ваш список источников APT.

  • Добавляет ключ apt-хранилища Kubernetes APT для проверки ключа.

  • Добавляет хранилище Kubernetes APT в список источников APT удаленных серверов.

  • Установите + kubelet и` + kubeadm`.

Вторая игра состоит из одной задачи, которая устанавливает + kubectl на ваш мастер-узел.

Сохраните и закройте файл, когда вы закончите.

Затем выполните playbook, выполнив локально:

ansible-playbook -i hosts ~/kube-cluster/kube-dependencies.yml

По завершении вы увидите вывод, похожий на следующий:

OutputPLAY [all] ****

TASK [Gathering Facts] ****
ok: [worker1]
ok: [worker2]
ok: [master]

TASK [install Docker] ****
changed: [master]
changed: [worker1]
changed: [worker2]

TASK [install APT Transport HTTPS] *****
ok: [master]
ok: [worker1]
changed: [worker2]

TASK [add Kubernetes apt-key] *****
changed: [master]
changed: [worker1]
changed: [worker2]

TASK [add Kubernetes' APT repository] *****
changed: [master]
changed: [worker1]
changed: [worker2]

TASK [install kubelet] *****
changed: [master]
changed: [worker1]
changed: [worker2]

TASK [install kubeadm] *****
changed: [master]
changed: [worker1]
changed: [worker2]

PLAY [master] *****

TASK [Gathering Facts] *****
ok: [master]

TASK [install kubectl] ******
ok: [master]

PLAY RECAP ****
master                     : ok=9    changed=5    unreachable=0    failed=0
worker1                    : ok=7    changed=5    unreachable=0    failed=0
worker2                    : ok=7    changed=5    unreachable=0    failed=0

После выполнения Docker, + kubeadm + и + kubelet + будут установлены на всех удаленных серверах. + kubectl + не является обязательным компонентом и необходим только для выполнения команд кластера. Установка его только на мастер-узел имеет смысл в этом контексте, так как вы будете запускать команды + kubectl + только от мастера. Однако обратите внимание, что команды + kubectl + можно запускать с любого из рабочих узлов или с любого компьютера, на котором он может быть установлен и настроен для указания на кластер.

Все системные зависимости теперь установлены. Давайте настроим мастер-узел и инициализируем кластер.

Шаг 4 - Настройка мастер-узла

В этом разделе вы настроите мастер-узел. Однако прежде чем создавать какие-либо пьесы, стоит рассмотреть несколько концепций, таких как Pods и Pod Network Plugins, так как ваш кластер будет включать и то, и другое.

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

Каждый модуль имеет свой собственный IP-адрес, и модуль на одном узле должен иметь возможность доступа к модулю на другом узле, используя IP-адрес модуля. Контейнеры на одном узле могут легко общаться через локальный интерфейс. Однако связь между модулями более сложна и требует отдельного сетевого компонента, который может прозрачно направлять трафик от модуля на одном узле к модулю на другом.

Эта функциональность обеспечивается сетевыми плагинами pod. Для этого кластера вы будете использовать Flannel, стабильную и производительную опцию.

Создайте Ansible playbook с именем + master.yml + на своем локальном компьютере:

nano ~/kube-cluster/master.yml

Добавьте следующую игру в файл, чтобы инициализировать кластер и установить Flannel:

~ / Kube-кластер / master.yml

- hosts: master
 become: yes
 tasks:
   - name: initialize the cluster
     shell: kubeadm init --pod-network-cidr=10.244.0.0/16 >> cluster_initialized.txt
     args:
       chdir: $HOME
       creates: cluster_initialized.txt

   - name: create .kube directory
     become: yes
     become_user: ubuntu
     file:
       path: $HOME/.kube
       state: directory
       mode: 0755

   - name: copy admin.conf to user's kube config
     copy:
       src: /etc/kubernetes/admin.conf
       dest: /home/ubuntu/.kube/config
       remote_src: yes
       owner: ubuntu

   - name: install Pod network
     become: yes
     become_user: ubuntu
     shell: kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml >> pod_network_setup.txt
     args:
       chdir: $HOME
       creates: pod_network_setup.txt

Вот разбивка этой пьесы:

  • Первая задача инициализирует кластер путем запуска + kubeadm init +. Передача аргумента + - pod-network-cidr = 10.244.0.0 / 16 + указывает частную подсеть, из которой будут назначаться IP-адреса модуля. Фланель по умолчанию использует вышеуказанную подсеть; мы говорим + kubeadm + использовать ту же подсеть.

  • Вторая задача создает каталог + .kube + в + / home / ubuntu +. Этот каталог будет содержать информацию о конфигурации, такую ​​как файлы ключей администратора, которые необходимы для подключения к кластеру, и адрес API кластера.

  • Третье задание копирует файл + / etc / kubernetes / admin.conf +, который был сгенерирован из + kubeadm init +, в домашний каталог пользователя без полномочий root. Это позволит вам использовать + kubectl + для доступа к вновь созданному кластеру.

  • Последняя задача запускает + kubectl apply + для установки + Flannel +. + kubectl apply -f descriptor. [yml | json] + - это синтаксис для указания + kubectl + для создания объектов, описанных в файле + descriptor. [yml | json] +. Файл + kube-flannel.yml + содержит описания объектов, необходимых для настройки + Flannel + в кластере.

Сохраните и закройте файл, когда вы закончите.

Запустите playbook локально, запустив:

ansible-playbook -i hosts ~/kube-cluster/master.yml

По завершении вы увидите вывод, похожий на следующий:

Output
PLAY [master] ****

TASK [Gathering Facts] ****
ok: [master]

TASK [initialize the cluster] ****
changed: [master]

TASK [create .kube directory] ****
changed: [master]

TASK [copy admin.conf to user's kube config] *****
changed: [master]

TASK [install Pod network] *****
changed: [master]

PLAY RECAP ****
master                     : ok=5    changed=4    unreachable=0    failed=0

Чтобы проверить состояние главного узла, введите в него SSH с помощью следующей команды:

ssh ubuntu@

Оказавшись внутри главного узла, выполните:

kubectl get nodes

Теперь вы увидите следующий вывод:

OutputNAME      STATUS    ROLES     AGE       VERSION
master    Ready     master    1d        v1.14.0

В выходных данных указывается, что узел + master + выполнил все задачи инициализации и находится в состоянии + Ready +, из которого он может начать принимать рабочие узлы и выполнять задачи, отправленные на сервер API. Теперь вы можете добавить рабочих с вашего локального компьютера.

Шаг 5 - Настройка рабочих узлов

Добавление рабочих в кластер включает выполнение одной команды для каждого. Эта команда включает в себя необходимую информацию о кластере, такую ​​как IP-адрес и порт главного сервера API, а также безопасный токен. Только узлы, которые проходят в безопасном токене, смогут присоединиться к кластеру.

Вернитесь в свою рабочую область и создайте книгу с именем + worker.yml +:

nano ~/kube-cluster/workers.yml

Добавьте следующий текст в файл, чтобы добавить рабочих в кластер:

~ / Kube-кластер / workers.yml

- hosts: master
 become: yes
 gather_facts: false
 tasks:
   - name: get join command
     shell: kubeadm token create --print-join-command
     register: join_command_raw

   - name: set join command
     set_fact:
       join_command: "{{ join_command_raw.stdout_lines[0] }}"


- hosts: workers
 become: yes
 tasks:
   - name: join cluster
     shell: "{{ hostvars['master'].join_command }} >> node_joined.txt"
     args:
       chdir: $HOME
       creates: node_joined.txt

Вот что делает playbook:

  • Первая игра получает команду соединения, которую необходимо выполнить на рабочих узлах. Эта команда будет иметь следующий формат: + kubeadm join --token <token> <master-ip>: <master-port> --discovery-token-ca-cert-hash sha256: <hash> +. Как только она получает фактическую команду с правильными значениями * token * и * hash *, задача устанавливает ее как факт, чтобы следующая игра имела доступ к этой информации.

  • Вторая игра имеет одну задачу, которая запускает команду соединения на всех рабочих узлах. По завершении этой задачи два рабочих узла станут частью кластера.

Сохраните и закройте файл, когда вы закончите.

Запустите playbook, выполнив локально:

ansible-playbook -i hosts ~/kube-cluster/workers.yml

По завершении вы увидите вывод, похожий на следующий:

OutputPLAY [master] ****

TASK [get join command] ****
changed: [master]

TASK [set join command] *****
ok: [master]

PLAY [workers] *****

TASK [Gathering Facts] *****
ok: [worker1]
ok: [worker2]

TASK [join cluster] *****
changed: [worker1]
changed: [worker2]

PLAY RECAP *****
master                     : ok=2    changed=1    unreachable=0    failed=0
worker1                    : ok=2    changed=1    unreachable=0    failed=0
worker2                    : ok=2    changed=1    unreachable=0    failed=0

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

Шаг 6 - Проверка кластера

Иногда кластер может дать сбой во время установки, потому что узел не работает или сетевое соединение между главным и рабочим не работает правильно. Давайте проверим кластер и убедимся, что узлы работают правильно.

Вам нужно будет проверить текущее состояние кластера с главного узла, чтобы убедиться, что узлы готовы. Если вы отключились от главного узла, вы можете вернуться в него по SSH с помощью следующей команды:

ssh ubuntu@

Затем выполните следующую команду, чтобы получить статус кластера:

kubectl get nodes

Вы увидите вывод, похожий на следующий:

OutputNAME      STATUS    ROLES     AGE       VERSION
master    Ready     master    1d        v1.14.0
worker1   Ready     <none>    1d        v1.14.0
worker2   Ready     <none>    1d        v1.14.0

Если все ваши узлы имеют значение + Ready + для + STATUS +, это означает, что они являются частью кластера и готовы к выполнению рабочих нагрузок.

Если, однако, некоторые из узлов имеют + NotReady + в качестве + STATUS +, это может означать, что рабочие узлы еще не завершили свою настройку. Подождите около пяти-десяти минут, прежде чем повторно + kubectl получить узлы + и проверить новый вывод. Если несколько узлов все еще имеют + NotReady + в качестве статуса, вам, возможно, придется проверить и повторно запустить команды на предыдущих шагах.

Теперь, когда ваш кластер успешно проверен, давайте запланируем пример приложения Nginx в кластере.

Шаг 7 - Запуск приложения в кластере

Теперь вы можете развернуть любое контейнерное приложение в своем кластере. Для ознакомления давайте развернем Nginx, используя Deployments и Services, чтобы увидеть, как это приложение можно развернуть в кластере. Вы можете использовать приведенные ниже команды и для других контейнерных приложений, если вы измените имя образа Docker и любые соответствующие флаги (такие как + ports + и + volume +).

Находясь внутри главного узла, выполните следующую команду, чтобы создать развертывание с именем + nginx +:

kubectl create deployment  --image=

Развертывание - это тип объекта Kubernetes, который гарантирует, что всегда есть определенное количество модулей, работающих на основе определенного шаблона, даже если модуль аварийно завершает работу в течение срока службы кластера. Вышеуказанное развертывание создаст модуль с одним контейнером из Nginx Image Docker реестра реестра.

Затем выполните следующую команду, чтобы создать службу с именем + nginx +, которая будет публично представлять приложение. Это будет сделано через NodePort, схему, которая сделает модуль доступным через произвольный порт, открытый на каждом узле кластера:

kubectl expose deploy  --port  --target-port  --type NodePort

Службы - это другой тип объекта Kubernetes, который предоставляет клиентам кластерные внутренние службы, как внутренние, так и внешние. Они также способны выполнять запросы на распределение нагрузки для нескольких модулей и являются неотъемлемым компонентом в Kubernetes, часто взаимодействуя с другими компонентами.

Запустите следующую команду:

kubectl get services

Это выведет текст, подобный следующему:

OutputNAME         TYPE        CLUSTER-IP       EXTERNAL-IP           PORT(S)             AGE
kubernetes   ClusterIP   10.96.0.1        <none>                443/TCP             1d
       NodePort    10.109.228.209   <none>                80:/TCP   40m

Из третьей строки вышеприведенного вывода вы можете получить порт, на котором работает Nginx. Kubernetes назначит случайный порт, который больше + 30000 + автоматически, при этом гарантируя, что порт еще не связан другой службой.

Чтобы проверить, что все работает, зайдите в + http: //: + или + http: //: + через браузер на вашем локальном компьютере. Вы увидите знакомую страницу приветствия Nginx.

Если вы хотите удалить приложение Nginx, сначала удалите сервис + nginx + из главного узла:

kubectl delete service

Запустите следующее, чтобы убедиться, что служба удалена:

kubectl get services

Вы увидите следующий вывод:

OutputNAME         TYPE        CLUSTER-IP       EXTERNAL-IP           PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1        <none>                443/TCP        1d

Затем удалите развертывание:

kubectl delete deployment

Выполните следующее, чтобы подтвердить, что это сработало:

kubectl get deployments
OutputNo resources found.

Заключение

В этом руководстве вы успешно настроили кластер Kubernetes в Ubuntu 18.04, используя Kubeadm и Ansible для автоматизации.

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

  • Dockerizing application - перечисляет примеры, которые подробно описывают, как контейнировать приложения с помощью Docker.

  • Pod Overview - подробно описывает работу модулей и их связь с другими объектами Kubernetes. Стручки вездесущи в Куберне, поэтому их понимание облегчит вашу работу.

  • Deployments Overview - предоставляет обзор развертываний. Полезно понять, как работают такие контроллеры, как развертывания, поскольку они часто используются в приложениях без сохранения состояния для масштабирования и автоматического восстановления нездоровых приложений.

  • Services Overview - охватывает службы, еще один часто используемый объект в кластерах Kubernetes. Понимание типов сервисов и имеющихся у них опций крайне важно для запуска приложений без сохранения состояния и с сохранением состояния.

Другие важные концепции, на которые вы можете обратить внимание: Volumes, Ingresses и Secrets, которые могут пригодиться при развертывании производственных приложений.

Kubernetes имеет много функциональных возможностей и возможностей, чтобы предложить. The Kubernetes Official Documentation - лучшее место для изучения концепций, поиска руководств по конкретным задачам и поиска ссылок API для различных объектов.

Related