Привет всем, добро пожаловать в Xiaocai Personalsoloшкола. Здесь знания бесплатны, не стесняйтесь впитывать их! Следуйте бесплатно, не стесняйтесь делать это!Черт~ Не забудьте поставить мне тройку после прочтения!
Эта статья в основном знакомит
kubernetes集群的搭建
При необходимости вы можете обратиться к
Если это поможет, не забудьтекак❥
Официальный аккаунт WeChat открыт,Хорошая еда, студенты, которые не обратили внимания, не забудьте обратить внимание!
Прежде чем читать эту статью, вам необходимоdockerОсновы! Для связанного чтения, пожалуйста, перейдите по ссылке:Приступая к работе с Docker, прочитав его, я чувствую, что смогу сделать это снова!
Я считаю, что маленькие друзья, которые подключились, должны быть правы.k8sЯ слышал о нем и даже использовал его. И если вам интересно название, не спешите, потому что я советую вам узнатьКубернетес (k8s). И титул - это не титульная партия, потому чтоk8sКластеры в целом делятся на две категории:
- Один хозяин, много рабов: Один главный узел и несколько узловых узлов, конструкция относительно проста, но может произойти отказ одного главного узла.
- Несколько мастеров и несколько рабов:Создание нескольких мастер-узлов и узлов с несколькими узлами более проблематично, но безопасность высока.
не важно какОдин хозяин, много рабовисключающее ИЛИНесколько мастеров и несколько ведомых, здесь требуется как минимум три сервера, и характеристики каждого сервера должны быть не ниже2G内存 2颗CPU
Конфигурация начинается, и если мы потратим определенную сумму денег, чтобы инвестировать в сервер для ежедневного практического использования, некоторые люди могут не захотеть, так что вот заголовок~ Следующее небольшое блюдо принесет вам более экономичный план для изучения.Построение кластера k8s!
С начала,советую выучить k8sЭто не пустой разговор. В настоящее время облачный термин не является новым. Он обозначает новый путь развития. **Гибкость, масштабируемость, воспроизводимость, максимальное использование...** является синонимом этого пути! Эта статья не только знакомитKubernetes, если правильноKubernetesЗнакомые учащиеся могут сразу перейти кПостроение кластера Kubernetesчасть, если вы с ней не знакомы, рекомендуется сначала прочитать первую половину,KubernetesВыяснить.
Kubernetes
1. Знание K8s заранее
Некоторые студенты могут чувствовать себя немного странно, почему они говорятkubernetes,Одну минутуk8s, это одно и то же? ответ да
Kubernetes сокращенно называется k8s, в котором вместо 8 символов используется цифра 8."убернеты"аббревиатура
Этот используется для управления контейнерными приложениями на нескольких узлах облачной платформы. Его цель — сделать развертывание контейнерных приложений простым и эффективным. Он предоставляет механизм для развертывания, планирования, обновления и обслуживания приложений.
Давайте сначала посмотрим на итеративный процесс развертывания приложения:
-
Традиционное развертывание:Развертывание приложений непосредственно на физических машинах
-
Виртуализированное развертывание:Вы можете запускать несколько виртуальных машин на физической машине, каждая виртуальная машина является независимой средой.
-
Контейнерное развертывание:Похожа на виртуальную машину, но разделяет операционную систему
Прочитав приведенные выше методы развертывания, подумайте, какой из них сейчас использует ваша компания. Когда дело доходит до развертывания в контейнерах, студенты, изучавшие docker, наверняка впервые задумаются об этом.docker,dockerКонтейнерный метод развертывания действительно приносит нам много удобства, но есть и проблемы, и иногда эти проблемы нами намеренно избегаются, т.к.dockerОн действительно прост в использовании, и людям становится немного невыносимо задавать вопросы, но им приходится сталкиваться с этим:
-
Если контейнер выходит из строя и выключается, как обеспечить высокую доступность и немедленно запустить другой контейнер, чтобы заменить выключенный контейнер
-
Можно ли автоматически увеличить пропускную способность, когда объем параллельного трафика увеличивается, а когда объем параллельного трафика снижается, можно ли автоматически уменьшить пропускную способность?
-
...
О проблеме контейнеров действительно стоит иногда думать, и эти проблемы управления контейнерами в совокупности называютсяОркестрация контейнеровПроблемы, проблемы, которые мы можем придумать, естественно, кто-то их решит, напримерdockerЗапущен домаDocker Swarmинструменты оркестрации контейнеров,ApacheпокидатьMesosЕдиный инструмент управления и контроля ресурсов,GoogleвыпускKubernetes
Инструменты оркестрации контейнеров, и это главный герой, о котором мы собираемся поговорить!
1) Преимущества K8s
- самоисцеление: после сбоя контейнера он может быстро запустить новый контейнер примерно за 1 секунду.
- Эластичное масштабирование: количество контейнеров, запущенных в кластере, может автоматически регулироваться по мере необходимости.
- обнаружение службы: Служба может найти службы, от которых она зависит, с помощью автоматического обнаружения.
- балансировки нагрузки: если служба запускает несколько контейнеров, она может автоматически выполнять балансировку нагрузки запросов.
- откат версии: Если вы обнаружите проблему с только что вышедшей версией программы, вы можете сразу откатиться на исходную версию
- Организация хранения: Тома хранилища могут создаваться автоматически в соответствии с потребностями самого контейнера.
2) Компоненты K8s
полныйKubernetesКластер состоит измастер узла управления,рабочий узелПоэтому этот метод кластеризации также делится наОдин хозяин, много рабовиНесколько мастеров и несколько ведомых, и на каждом узле устанавливаются разные компоненты для предоставления услуг.
1,Master
Плоскость управления кластером, отвечающая за принятие решений (управление) кластером. Он имеет следующие компоненты
- ApiServer: единственная запись для операций с ресурсами, получает команды, вводимые пользователями, и предоставляет такие механизмы, как аутентификация, авторизация, регистрация и обнаружение API.
- Scheduler: отвечает за планирование ресурсов кластера в соответствии с заранее определенной стратегией планирования.podотправка в соответствующийnodeна узле
- ControllerManager: отвечает за поддержание состояния кластера, например за организацию развертывания программ, обнаружение сбоев, автоматическое расширение, последовательные обновления и т. д.
- Etcd: Отвечает за хранение информации о различных объектах ресурсов в кластере.
2. Узел
Плоскость данных кластера отвечает за обеспечение рабочей среды (работы) для контейнера. Он имеет следующие компоненты
- Kubelet: Отвечает за поддержание жизненного цикла контейнеров, то есть за создание, обновление и уничтожение контейнеров путем управления докером.
- KubeProxy: отвечает за обнаружение служб и балансировку нагрузки в кластере.
Прочитав приведенное выше введение, давайте начнемk8sСоздание кластера!
Во-вторых, построение кластера k8s
1) Установка Centos7
Для начала нам понадобится программное обеспечение:
- VMware Workstation Pro
- Образ Centos 7.0
Программное обеспечение виртуальной машины можно найти и загрузить на Baidu.Если вы не обратитесь в Xiaocai, Xiaocai предоставит вам его.
Изображение можно загрузить из Alibaba Cloud, как показано ниже:ссылка для скачивания
После завершения установки виртуальной машины мы можемVMwareустановкаCentos7
- Мы выбираемСоздайте новую виртуальную машину
- Выберите выборочную установку
Типичная установка: VMware применит основную конфигурацию к операционной системе виртуальной машины, что очень удобно для новичков.
Выборочная установка. Выборочная установка может усилить некоторые ресурсы и удалить ненужные ресурсы. Избегайте траты ресурсов.
- Совместимость, как правило, обратная совместимость
- Выберите наш загруженныйcentosзеркало
- Назначьте имя и адрес установки своей собственной виртуальной машине, нам нужно установить три, поэтому я назвал имена здесь (master, node01, node02)
- Выделите ресурсы для собственной виртуальной машины, минимальные требования, как правило, 2 ядра и 2 ГБ памяти.
- использовать здесьNATТип сети
Мост: если выбран режим моста, виртуальная машина и хост находятся в отношениях уровня в сети, что эквивалентно подключению к одному и тому же коммутатору.
NAT: режим NAT означает, что если виртуальная машина должна быть подключена к Интернету, она должна сначала пройти через хост, прежде чем она сможет общаться с внешним миром.
Только хост: виртуальная машина напрямую подключена к хосту.
- Перейдите к следующему шагу, затем нажмите «Готово».
- После установки мы можем увидеть следующие результаты на странице, нажмите, чтобы запустить эту виртуальную машину:
- выберитеinstall CentOS7
- Затем вы можете увидеть процесс установки:
- Через некоторое время вы увидите интерфейс, который позволяет нам выбрать язык, здесь выберите китайский и продолжите.
- Выбор программного обеспечения мы можем выбрать
基础设施服务器
, место установки опционально自动分区
- Затем нам нужно нажатьсеть и имя хоставведите конфигурацию сети
- Мы нажимаем «Редактировать» -> «Редактор виртуальной сети» на панели тарбара, чтобы просмотреть IP-адрес подсети виртуальной машины.
- Здесь мы вручную добавляем адрес IPv4, а DNS-сервер можно заполнить адресом Alibaba Cloud.
Наш назначенный адрес должен быть исключен255
и02
Эти два адреса являются широковещательным адресом и адресом шлюза соответственно.
Я настроил это так:
главный узел:
192.168.108.100
node01 узел:
192.168.108.101
узел node02:
192.168.108.102
- После настройки выберите «Сохранить» и нажмите «Готово», затем задайте имя хоста.
Я настроил это так:
главный узел:
master
node01 узел:
node01
узел node02:
node02
- После завершения приведенной выше конфигурации это примерно выглядит следующим образом.
- После нажатия, чтобы начать установку, мы пришли на следующую страницу, а затем настроили следующие две информации
После завершения приведенной выше конфигурации его можно использовать после перезапуска. Два других узла также настроены одинаково. Вы можете напрямую выбрать клон, конфигурацию сети и имя хоста. Не забудьте изменить~ Затем мы получаем три сервера со следующими конфигурациями:
Имя процессора | IP | настроить |
---|---|---|
master | 192.168.108.100 | 2 ядра 2G памяти 30G жесткий диск |
node01 | 192.168.108.101 | 2 ядра 2G памяти 30G жесткий диск |
node02 | 192.168.108.102 | 2 ядра 2G памяти 30G жесткий диск |
2) Конфигурация среды
После завершения построения вышеуказанного сервера мы можем использоватьинструменты оболочкиПодключитесь и начните создавать среду k8s
- разрешение имени хоста
Для прямых вызовов между узлами кластера нам необходимо настроить разрешение имен хостов и отредактировать их на трех серверах соответственно./etc/hosts
- синхронизированное время
Время в кластере должно быть точным и согласованным, мы можем напрямую использоватьchronyd
Сервис синхронизирует время по сети, и три сервера должны проделать одну и ту же операцию.
- инвалидiptablesиfirewalldСлужить
kubernetes и docker будут генерировать многоiptablesПравила, чтобы не путать с ними системные правила, непосредственно закрывают системные правила. Три виртуальные машины должны выполнить одну и ту же операцию:
# 1 关闭firewalld服务
[root@master ~]# systemctl stop firewalld
[root@master ~]# systemctl disable firewalld
# 2 关闭iptables服务
[root@master ~]# systemctl stop iptables
[root@master ~]# systemctl disable iptables
- инвалидselinux
selinuxдаlinuxСлужба безопасности под системой, если ее не отключить, в установочном кластере будут возникать всякие странные проблемы
# 永久关闭
[root@master ~]# sed -i 's/enforcing/disabled/' /etc/selinux/config
# 临时关闭
[root@master ~]# setenforce 0
- Отключить раздел подкачки
Раздел подкачки относится к разделу виртуальной памяти.Его функция состоит в том, чтобы виртуализировать дисковое пространство в память для использования устройства подкачки после того, как физическая память будет израсходована, что очень негативно скажется на производительности системы.Поэтому kubernetes требуется каждый узел.Отключите устройство подкачки, но если раздел подкачки не может быть отключен по какой-либо причине, его необходимо настроить с явными параметрами в процессе установки кластера.
# 临时关闭
[root@master ~]# swapoff -a
# 永久关闭
[root@master ~]# vim /etc/fstab
Закомментируйте строку для раздела подкачки
- Исправлятьlinuxпараметры ядра
нам нужно изменитьlinuxПараметры ядра, добавить фильтрацию моста и функции переадресации адресов, отредактировать/etc/sysctl.d/kubernetes.conf
файл, добавьте следующую конфигурацию:
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
После добавления сделайте следующее:
# 重新加载配置
[root@master ~]# sysctl -p
# 加载网桥过滤模块
[root@master ~]# modprobe br_netfilter
# 查看网桥过滤模块是否加载成功
[root@master ~]# lsmod | grep br_netfilter
На всех трех серверах выполняется одна и та же операция, и информация об успешном завершении выглядит следующим образом:
- настроитьipvsФункции
существуетkubernetesсерединаserviceЕсть две модели прокси, одна основана наiptables, один основан наipvsиз В сравнении,ipvsПроизводительность значительно выше, но если вы хотите использовать его, вам нужно вручную загрузитьipvsмодуль
# 安装ipset和ipvsadm
[root@master ~]# yum install ipset ipvsadmin -y
# 添加需要加载的模块写入脚本文件
[root@master ~]# cat <<EOF > /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
# 为脚本文件添加执行权限
[root@master ~]# chmod +x /etc/sysconfig/modules/ipvs.modules
# 执行脚本文件
[root@master ~]# /bin/bash /etc/sysconfig/modules/ipvs.modules
# 查看对应的模块是否加载成功
[root@master ~]# lsmod | grep -e ip_vs -e nf_conntrack_ipv4
- Перезапустите сервер после завершения вышеуказанной настройки.
[root@master ~]# reboot
3) установка докера
первый шаг:
# 获取镜像源
[root@master ~]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
Шаг 2:
# 安装特定版本的docker-ce
# 必须指定--setopt=obsoletes=0,否则yum会自动安装更高版本
[root@master ~]# yum install --setopt=obsoletes=0 docker-ce-18.06.3.ce-3.el7 -y
третий шаг:
# 添加一个配置文件
# Docker在默认情况下使用的Cgroup Driver为cgroupfs,而kubernetes推荐使用systemd来代替cgroupfs
[root@master ~]# mkdir /etc/docker
четвертый шаг:
# 添加阿里云 yum 源, 可从阿里云容器镜像管理中复制镜像加速地址
[root@master ~]# cat <<EOF > /etc/docker/daemon.json
{
"registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"]
}
EOF
пятый шаг:
# 启动docker
[root@master ~]# systemctl enable docker && systemctl start docker
После выполнения вышеуказанных 5 шагов установка докера завершена, на один шаг ближе к успеху~
4) Инициализация кластера
1. Потому чтоkubernetesЗеркальный источник находится за границей, и скорость относительно низкая, поэтому нам нужно переключиться на внутренний зеркальный источник.
# 编辑 /etc/yum.repos.d/kubernetes.repo 添加一下配置
[root@master ~]# vim /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
2. Затем установитеkubeadm,kubeletиkubectlтри компонента
yum install --setopt=obsoletes=0 kubeadm-1.17.4-0 kubelet-1.17.4-0
kubectl-1.17.4-0 -y
3. Настройте группу kubelet
# 编辑 /etc/sysconfig/kubelet,添加下面的配置
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"
4. Этот шаг предназначен для инициализации кластера.因此只需在 master 服务器上执行即可
, это то, что необходимо реализовать каждому серверу!
# 创建集群
# 由于默认拉取镜像地址 k8s.gcr.io 国内无法访问,这里指定阿里云镜像仓库地址
[root@master ~]# kubeadm init \
--apiserver-advertise-address=192.168.108.100 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version=v1.17.4 \
--pod-network-cidr=10.244.0.0/16 \
--service-cidr=10.96.0.0/12
#使用 kubectl 工具
[root@master ~]# mkdir -p $HOME/.kube
[root@master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
Тогда нам нужноnodeУзел присоединяется к кластеру, вnode 服务器
Выполните команду в красном поле выше:
[root@master ~]# kubeadm join 192.168.108.100:6443 --token xxx \
--discovery-token-ca-cert-hash sha256:xxx
доступны наглавный узелПолучить информацию об узле:
Но мы проверяем состояние кластера в это время дляNotReady
, это потому, что сетевой плагин не был настроен
5. Установите сетевой плагин
kubernetesПоддерживает различные сетевые плагины, такие какflannel,calico,canalПодождите, выберите здесьflanne
скачатьflanneld-v0.13.0-amd64.docker:ссылка для скачивания
После завершения загрузки загрузите наглавный серверВыполните следующую команду
docker load < flanneld-v0.13.0-amd64.docker
После завершения выполнения вы можете увидеть большеflannelЗеркало:
Тогда нам нужно получитьflannelконфигурационный файл для развертыванияflannelСлужить
[root@master ~]# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 使用配置文件启动fannel
[root@master ~]# kubectl apply -f kube-flannel.yml
# 再次查看集群节点的状态
[root@master ~]# kubectl get nodes
В это время статус всех узловReady
государство, до сих пор, нашеk8sДаже если кластер построен!
5) Проверка функции кластера
Далее наше время проверки, прежде чем мы узналиdockerчасто начинаетnginxконтейнер для проверки на доступность,k8sМы также развертываемnginxДавайте проверим, доступен ли сервис~
(Следующий пример является тестовым примером, не имеет значения, если вы не знаете функцию каждой инструкции, мы опубликуем обучающую статью k8s, чтобы объяснить это позже.k8sЕсли используется! )
- Сначала мы создаем развертывание
[root@master ~]# kubectl create deployment nginx --image=nginx:1.14-alpine
deployment.apps/nginx created
[root@master ~]# kubectl get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
nginx 1/1 1 1 31s
- Затем создайте сервис, чтобы разрешить внешнему миру доступ к нашему сервису nginx.
[root@master ~]# kubectl expose deploy nginx --port=80 --target-port=80 --type=NodePort
service/nginx exposed
[root@master ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx NodePort 10.110.224.214 <none> 80:31771/TCP 5s
Затем мы получаем доступ к нашей службе nginx через IP-адрес узла node плюс nodePort, предоставляемый службой:
Вы также можете получить доступ к нашему сервису непосредственно в кластере через IP-адрес сервиса плюс сопоставленный порт:
Из результатов доступны оба доступа, что указывает на то, что нашnginxРазвертывание службы прошло успешно, вы можете щелкнуть, чтобы добавить веселья ~
Поиск общедоступных номеров: Сяокай Лянцзи
Еще больше сухих товаров, которые стоит прочитать!
Итак, почему у нас есть доступ кnginx? С тем же успехом мы могли бы объединить компоненты k8s, упомянутые выше, чтобы разобраться в отношениях вызова каждого компонента:
-
kubernetesПосле запуска либоmasterузел илиnodeУзлы будут хранить свою информацию вetcdв базе данных
-
Создайтеnginxслужба, которая сначала отправляет запрос на установкуmasterна узлеapiServerкомпонент
-
apiServerкомпонент вызоветschedulerкомпонент, чтобы решить, где служба должна быть установленаnodeна узле. В это время необходимо использоватьetcdбаза данных,schedulerбудет отetcdчитать каждыйnodeинформацию об узле, а затем выбрать по определенному алгоритму и сообщить результатapiServer
-
apiServerперечислитьcontrollerManagerпланироватьnodeузел и установитьnginxСлужить
-
nodeна узлеkubeletПосле того, как компонент получит команду, он уведомитdocker, затем поdockerначатьnginxизpod
podдаkubernetesНаименьшая единица работы вpodсередина
-
После того, как вышеуказанные шаги выполнены,nginxСлужба запущена, если вам нужен доступnginx, надо пройтиkube-proxyиди прямоpodПрокси-сервер, который генерирует доступ, чтобы внешние пользователи могли получить доступ к этомуnginxСлужить
Выше описан весь процесс запуска службы, после прочтения я не знаю, существует ли какая-либо служба.肃然起敬
Я чувствую, что дизайн слишком изобретателен, так что здесь, разве вы не хотите увидеть использование k8s ниже! Если вы готовы смотреть, маленькие ручки обратят внимание!
END
Вышеупомянутоеk8sПроцесс создания кластера сk8sсреды, вы боитесь, что не сможете научитьсяk8sиспользуй это! Покопайтесь на своей собственной виртуальной машине, и если вы ее сломаете, это просто вопрос восстановления снимка ~ Я гарнир, мне предстоит долгий путь, и я буду искать его с вами!
Если вы будете усердно работать сегодня, завтра вы сможете сказать на одну вещь меньше, чтобы попросить о помощи!
Я Сяо Цай, человек, который учится у вас.
💋
Официальный аккаунт WeChat открыт,Хорошая еда, студенты, которые не обратили внимания, не забудьте обратить внимание!