Прошел месяц с момента последнего обновления, в основном из-за того, что последние изменения в работе были немного частыми, и она лишь временно стабилизировалась. Первоначальная цель этого блога — помочь вам создать кластер K8S с нуля. Но я подумал об этом позже, если я прочитаю эту статью, что я приобрету? Просто следовать шаг за шагом? Если бы это был я, я бы отказался, поэтому я добавил краткое введение о K8S и добавил пояснения к каждому шагу. Из-за нехватки места и времени я представил только основные модули и службы в K8S.
В первой половине статьи будет кратко представлен K8S, а во второй половине будет рассказано, как медленно построить кластер с нуля. Если вы хотите начать построение кластера напрямую, вы можете прямо изтретья главаНачать просмотр.
1. Что такое К8С
Полное название K8S — kubernetes, исходный код которого был открыт Google в 2014 году.уровень производствасистема оркестрации контейнеров илиМикросервисы и облачные платформы. Хотя K8S стал открытым исходным кодом всего 14 лет назад, на самом деле это версия Borg с открытым исходным кодом, внутренней системы управления контейнерами Google, которая используется в Google более десяти лет. Ниже небольшой эпизод об источнике логотипа K8S.
Впервые Kubernetes был анонсирован Google в 2014 году. На его разработку и дизайн сильно повлияла система Google Borg, и многие из ее главных участников были предыдущими разработчиками системы Borg. Внутри Google исходное кодовое имя Kubernetes — Seven, дружелюбный персонаж Борг из «Звездного пути». Семь спиц на руле в логотипе Kubernetes — это дань кодовому названию проекта.
Однако есть еще поговорка, что логотип Docker — это кит, несущий контейнер, то есть транспортное судно, а логотип K8S — это руль, который призван увести Docker (или контейнерную технику) вдаль.
2. Простое понимание K8S
Прочитал много официальных статей, это правдаофициальный. При чем здесь официальная, то есть возможно, что прочитав ее, равносильно тому, чтобы не смотреть, и вы не знаете того же.
Вот и хочу написать такую статью, чтобы немного помочь тем старым железякам, которые до сих пор не разбираются или не разбираются в K8S после прочтения документации. Итак, вернемся к оригинальному K8S.определение, который представляет собой структуру микросервисов.
Когда дело доходит до микросервисных фреймворков, мы должны упомянуть самые распространенные в отрасли микросервисные фреймворки.Сравнивая эти фреймворки, с которыми вы хорошо знакомы, вы будете иметь четкое представление о том, на что способен K8S. В настоящее время основные среды и платформы микросервисов включают Spring Cloud, Dubbo и K8S.
Spring Cloud — от Netflix, Dubbo — от Ali, а K8S — от Google. Говоря более интуитивно, эти три фреймворка представляют собой решения для микросервисов. Кто-то может сказать, что K8S — это не система оркестрации контейнеров? Как это соотносится с микросервисной структурой программного уровня, такой как Spring Cloud?
Не паникуй, старое железо, подожди, пока мы постепенно углубим эту концепцию.
Все мы знаем, что если нам нужно использовать микросервисы, должна быть какая-то поддержка базовой инфраструктуры, такая как регистрация и обнаружение сервисов, балансировка нагрузки, мониторинг журналов, управление конфигурацией, самовосстановление и отказоустойчивость кластера, эластичное масштабирование и т. д. Я не перечислил их все, на самом деле эти компоненты можно в совокупности назвать микросервисами.общественное беспокойство. Итак, можем ли мы сказать, что пока он может предоставлять эти функции, он является микросервисным фреймворком?
Большинство вышеперечисленных функций встроены в K8S. Таким образом, можно сказать, что K8S — это система оркестрации контейнеров, похожая на Docker Swarm, но поскольку K8S имеет встроенное микросервисное решение, это также полнофункциональная микросервисная среда.
2.1 Концепция модуля
В Docker Swarm наименьшая единица планирования — это контейнер, а в K8S наименьшая единица планирования — контейнер.Pod, что такое под?
Pod — это совершенно новая концепция, разработанная K8S.Первоначальное значение на английском языке — группа китов или стручок гороха. Другими словами, Pod может запускать один или несколько контейнеров.
В кластере K8S назначит каждому поду уникальный IP-адрес внутри кластера. Потому что K8S требует, чтобы базовая сеть поддерживала прямую связь между двумя подами между любыми узлами в кластере. Эти контейнеры совместно используют текущую файловую систему и сеть Pod. Причина, по которой эти контейнеры могут быть общими, заключается в том, что в поде есть корневой контейнер с именем Pause, и остальные пользовательские бизнес-контейнеры используют этот корневой контейнер.IP и объем. Таким образом, эти контейнеры могут общаться через localhost.
Некоторые люди могут спросить, зачем вводить понятие корневого контейнера? Это потому, что если нет корневого контейнера, когда в под вводится несколько контейнеров, какое состояние контейнера мы должны использовать для оценки состояния пода? Поэтому контейнер Pause, который не имеет никакого отношения к делу и который непросто повесить, должен быть введен как корневой контейнер, представленный состоянием корневого контейнера.состояние всего контейнера.
Любой, кто знаком со Spring Cloud или микросервисами, знает, что самое табуированное в микросервисах — это возникновение одной точки.
Поэтому мы обычно развертываем 2 или более экземпляров для одного и того же сервиса. В K8S несколько копий Pod развернуты для формирования кластера Pod для предоставления внешних сервисов.
Как мы упоминали ранее, K8S предоставит уникальный IP-адрес для каждого модуля, и клиенту необходимо получить доступ к конкретному модулю через уникальный IP + порт контейнера каждого модуля.Таким образом, если клиент записывает адрес вызова. мертвый, сервер не сможет сделать балансировку нагрузки.Кроме того, IP-адрес будет меняться после перезапуска пода.Нужно ли уведомлять клиента об изменении IP каждый раз при его перезапуске?
Для решения этой задачи необходимо ввестиServiceконцепция.
2.2 Service
Служба является одним из основных объектов ресурсов в K8S, который используется для решения упомянутых выше проблем. Лично я не думаю, что это сильно отличается от концепции службы в Swarm.
Как только служба будет создана, K8S назначит ей уникальный IP-адрес в кластере, называемыйClusterIP, и в течение всего жизненного цикла службы ClusterIP не изменится.Таким образом, вы можете использовать операцию, аналогичную Docker Swarm, чтобы установить сопоставление доменного имени DNS из ClusterIP в имя службы.
Стоит отметить, что ClusterIP — это виртуальный IP-адрес, который нельзя пропинговать и который используется только внутри кластера K8S.
Служба блокирует процесс адресации базового пода клиенту. И процесс kube-proxy перенаправляет запрос на услугу конкретному поду, который определяется конкретным алгоритмом планирования. Таким образом достигается балансировка нагрузки.
И как Сервис находит Pod? Это требует введения еще одного ключевого понятияLabel.
2.3 Label
Метка — это, по сути, пара ключ-значение, и конкретное значение определяется пользователем. Ярлыки — это ярлыки, которые можно размещать на модулях или на сервисах. Подводя итог, Label имеет отношение «один ко многим» с отмеченным ресурсом.
Например, мы пометили Pod, описанный выше, с помощьюrole=serviceAметка, то толькоLabel SelectorДобавьте метку прямо сейчас, чтобы служба могла найти набор реплик Pod с той же меткой с помощью селектора меток.
Далее я кратко представлю другие основные концепции K8S.
2.4 Replica Set
Как упоминалось выше, развертывание нескольких модулей — это то, что происходит? Первоначально K8S имел концепцию под названием Replication Controller, но постепенно ее заменили Replica Set, RS также называют RC следующего поколения. Проще говоряReplica SetОпределяет ожидаемый сценарий, при котором количество реплик Pod в кластере в любое время соответствует ожидаемому значению.
После создания кластер будет периодически проверять количество подов, которые в настоящее время активны. Если их больше, кластер остановит некоторые поды. И наоборот, если их меньше, будут созданы некоторые поды. Каких проблем можно избежать таким образом? Предположим, что запущено два экземпляра службы, и один из них неожиданно зависает.Если мы установим количество реплик равным 2, кластер автоматически создаст под, чтобы гарантировать, что в кластере всегда работают два пода.
Вещи K8S просто введены так много, давайте перейдем к ссылке на создание кластера.
3. Подготовка к сборке K8S
Я не знаю, с какого блога начать, я не очень хочу писать такой чистый пост в блоге TODO, но, повалившись в яме, я обнаружил, что мой собственный действительно самый простой из всех, что я когда-либо видел.
Некоторые из инсталляций, которые я видел, разделены на множество ситуаций, но когда новичок смотрит на них, это может привести его в замешательство. Так что следующая установка будет немного хардкорной. Вне зависимости от ситуации остается только одна ситуация, и установка челнока выполнена.
Версия системы Ubuntu 18.04
K8S версия v1.16.3
Версия докера v19.03.5
Фланелевая версия v0.11.0
Если ты спросишь меня,Можете ли вы иметь свой собственный кластер без машины, читающей вашу статью?? Тогда посмотрите на картинку ниже...
3.1 Подготовка
Предположим сначала, что выполняются следующие условия.
Машины: Есть 2-3 физические или виртуальные машины
Система: Ubuntu 18.04 и внутренний исходный код изменен.
Если вышеизложенное в принципе не подходит, на этом статья заканчивается, спасибо за просмотр…
3.2 Установите Докер
Мне также не нужно представлять различные ситуации, я просто сажусь в машину и создаю сценарий оболочки, например вызовinstall_docker.sh, код шаттла выглядит следующим образом.
затем выполнитьsh install_k8s.sh, дождитесь завершения команды и убедитесь, что k8s установлен. стучать прямоkubectl+ Войти.
3.4 Закрыть обмен
Сначала дайте шаттл, не затягивайте с установкой старого утюга. Зачем потом закрывать.
Временно закрыть команду напрямуюsudo swapoff -a, но он вступит в силу после перезапуска. Это приведет к тому, что k8s не будет работать должным образом.
Постоянно закрыть предложениеоднажды и на всегда,sudo vim /etc/fstabЗакомментируйте строку с swap.img и сохраните ее.
Итак, что такое своп? Это раздел подкачки системы, вы можете понять его какВиртуальная память. Когда системной памяти недостаточно, часть пространства на жестком диске будет виртуализирована в память для использования. Так зачем же K8S его отключать? Вы можете увидеть разницу в скорости доступа к памяти и доступу к жесткому диску на рисунке ниже.
вообще дляпредставлениеУчитывая это, необходимо избегать включения свопа, K8S надеется, что все службы не должны превышать лимиты ЦП и памяти кластера или узла.
4. Инициализируйте главный узел
На этом подготовительная работа завершена, вы можете начать установку главного узла K8S и подключить машину, которая будет использоваться в качестве главного узла.
4.1 Установить имя хоста
Старое правило, сначала порядок, потом зачем его устанавливать.
sudo hostnamectl set-hostname master-node
Имя узла настраивается и изменяется.При последующем просмотре узлов в кластере имя каждого узла не будет отображать имя, автоматически сгенерированное K8S, которое легко просмотреть и запомнить. Например, на другие узлы Node можно поставитьmaster-nodeизменить наslave-node-1илиworker-node-2, эффект следующий.
Затем возьмите гитару и дождитесь завершения команды.
нужно здесьобращать вниманиенемного. После того, как эта команда будет выполнена, она напечатаетkubeadm joinКоманду нужно сохранить.
Наверное, так долго.
kubeadm присоединиться к вашему IP-адресу: 6443 --token your TOKEN --discovery-token-ca-cert-hash sha256:ваш хэш сертификата CA
Как следует из названия, эта команда используется для присоединения других узлов к кластеру, а токен чувствителен ко времени, а время истечения срока действия обычно86400000 миллисекунд.
Если это не удается, его необходимо регенерировать. Если вы действительно не сохранили его снова, и он снова потерпел неудачу... У меня все еще есть два средства для вас. Если команда сохранена, то пожалуйста прямоперепрыгниоба средства.
Видно, что если Flannel не установлен, мастер-нода, которую мы только что инициализировали, будет вNOT_READYстатус. После установки можно запустить командуkubectl get nodesдля просмотра состояния всех узлов. также черезkubectl get pods --all-namespacesдля просмотра состояния всех модулей в текущем кластере. Здесь следует отметить, что только когда главный узелREADY, состояние всех подовRUNNINGПосле этого можно переходить к следующему шагу.
Зачем устанавливать сетевой плагин?
Это связано с тем, что K8S требует, чтобы сеть POD между всеми узлами в кластере должна быть взаимосвязана. Другими словами, фланель позволяет контейнерам на разных узлах в кластере иметьтекущий кластерУникальный виртуальный IP-адрес внутри. Таким образом, можно добиться того, чтобы поды между узлами напрямую взаимодействовали с подами.
Таким образом, сложная сетевая связь просто превращается в связь между двумя IP-адресами. В основном это достигается за счет виртуальной сети уровня 2. Кажется, что Pod этого узла напрямую взаимодействует с Pod на другом узле и, наконец, выходит через физическую сетевую карту узла.
5. Ведомый узел присоединяется к кластеру
На данный момент построен одноточечный кластер. Теперь нам нужно войти на другой готовый (у меня их всего два, если у вас есть 3 или 4 дня, просто повторите эту главу несколько раз) сервер.
5.1 Установить имя хоста
Выполните следующую команду.
sudo hostnamectl set-hostname slave-node
Поскольку текущий узел не является ведущим, в качестве имени хоста устанавливается подчиненный узел.
5.2 Присоединиться к кластеру
Дело здесь, выполнить сгенерированный код в предыдущей главеkubeadm joinкоманда сделает. Дождавшись завершения выполнения, вы можете передать команду на мастер-нодуkubectl get nodesВидим, что подчиненный узел присоединился к кластеру.
Пропала работа узла Slave.
6. Спасибо за чтение
Здесь кратко представлена информация о K8S.Из-за недостатка места и времени многие понятия, такие как развертывание, том, конфигурационная карта и т. д., не были представлены. Представлены только основной Pod и Service, а также сопутствующие вещи. В конце концов, если вы хотите познакомить с основными концепциями K8S, длины блога явно недостаточно, я подробно расскажу об этом позже.
Это мой первый раз, когда я прошу комплимент в блоге, раньше это было совершенно случайно. Однако позже я узнал, что открыть блог и увидеть все лайки и комментарии — это своего родабольшое поощрение.
Если вы считаете, что эта статья полезна для вас, не волнуйтесь.поставить лайк,обращать внимание,Поделиться,оставить сообщение
Вы также можете выполнить поиск в официальной учетной записи [полные заметки SH] на WeChat, и, конечно же, вы также можете напрямую отсканировать QR-код, чтобы следовать