ѕодпишитесь на наш Telegram-канал Ѕудьте в курсе последних новостей 👇 😉 ѕодписатьс€
ѕоддержим в трудное врем€ —пециальное предложение на техническую поддержку вашей »“ - инфраструктуры силами наших экспертов ѕодобрать тариф
ѕоставка оборудовани€ √аранти€ и помощь с настройкой. —кидка дл€ наших читателей по промокоду WIKIMERIONET  упить
»нтерфейс статистики Merion Mertics показывает ключевые диаграммы и графики по звонкам, а также историю звонков в формате, который легко поймет менеджер ѕопробовать бесплатно
¬недрение
офисной телефонии
Ўаг на пути к созданию доступных унифицированных коммуникаций в вашей компании ¬недрить
»нтеграци€ с CRM ѕомогаем навести пор€док с данными
и хранить их в единой экосистеме
ѕодключить
»“ Ѕезопасность ”мна€ информационна€ безопасность дл€ вашего бизнеса «аказать
ћерион Ќетворкс

7 минут чтени€

ѕодаренный компанией Google сообществу Opensource, Kubernetes теперь стал инструментом контейнерного хранени€ по выбору. ќн может управл€ть и координировать не только среду выполнени€ докеров, но и среду контейнерного хранени€ объектов и Rkt.

 ак установить кластер Kubernetes на CentOS 7

“ипичный кластер Kubernetes обычно имеет главный узел и несколько рабочих узлов или Minions. ”правление рабочими узлами осуществл€етс€ из главного узла, что обеспечивает управление кластером из центральной точки.

¬ажно также отметить, что можно развернуть кластер с одним узлом Kubernetes, который обычно рекомендуетс€ использовать дл€ легких непроизводственных рабочих нагрузок. ƒл€ этого можно вз€ть Minikube - инструмент, который управл€ет кластером K ubernetes с одним узлом в виртуальной машине.

¬ этом руководстве мы рассмотрим многоузловую установку кластера Kubernetes в системе Linux CentOS 7. Ёто учебное пособие основано на командной строке и требует доступа к окну терминала.


“ребовани€

  1. »меть несколько серверов под управлением Centos 7 (1 главный узел, 2 рабочих узла). –екомендуетс€, чтобы главный узел содержал по крайней мере 2 ÷ѕ, хот€ это не €вл€етс€ строгим требованием.
  2. ѕодключение к »нтернету на всех узлах. ћы будем извлекать пакеты Kubernetes и докеров из хранилища.  роме того, необходимо убедитьс€, что диспетчер пакетов yum установлен по умолчанию и может получать пакеты удаленно.
  3. ¬ам также потребуетс€ доступ к учетной записи с правами sudo или root. ¬ этом учебном пособии € буду использовать свою учетную запись root.

Ќаш 3-узловой кластер будет выгл€деть примерно так:

3-узловой кластер

”становка кластера Kubernetes на главном узле

ƒл€ работы Kubernetes потребуетс€ механизм контейнеризации. ƒл€ этой установки мы будем использовать docker, так как он самый попул€рный.

Ќа главном узле выполн€ютс€ следующие шаги.

Ўаг 1: ѕодготовить им€ узла, брандмауэр и SELinux

Ќа главном узле задайте им€ хоста и, если у вас нет DNS-сервера, обновите файл /etc/hosts.

# hostnamectl set-hostname master-node
# cat <<EOF>> /etc/hosts
10.128.0.27 master-node
10.128.0.29 node-1 worker-node-1
10.128.0.30 node-2 worker-node-2
EOF

ћожно выполнить проверку св€зи с рабочим узлом 1 и рабочим узлом 2, чтобы убедитьс€ в правильности работы обновленного файла хоста с помощью команды ping.

# ping 10.128.0.29
# ping 10.128.0.30

«атем отключите SElinux и обновите правила брандмауэра.

# setenforce 0
# sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
# reboot

”становите следующие правила брандмауэра дл€ портов. ”бедитесь, что кажда€ команда firewall-cmd возвращает результат.

# firewall-cmd --permanent --add-port=6443/tcp
# firewall-cmd --permanent --add-port=2379-2380/tcp
# firewall-cmd --permanent --add-port=10250/tcp
# firewall-cmd --permanent --add-port=10251/tcp
# firewall-cmd --permanent --add-port=10252/tcp
# firewall-cmd --permanent --add-port=10255/tcp
# firewall-cmd Цreload
# modprobe br_netfilter
# echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables

Ўаг 2: Ќастройка Kubernetes Repo

Ќужно будет вручную добавить хранилище Kubernetes, так как оно не установлено по умолчанию в CentOS 7.

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF

Ўаг 3: ”становить Kubeadm и Docker

ѕосле того, как пакет repo уже готов, вы можете продолжить и установить kubeadm и docker пакеты.

# yum install kubeadm docker -y 

ѕосле успешного завершени€ установки включите и запустите обе службы.

# systemctl enable kubelet
# systemctl start kubelet
# systemctl enable docker
# systemctl start docker

Ўаг 4: ”становка Kubernetes Master и настройка пользовател€ по умолчанию

“еперь мы готовы инициализировать Kubernetes Master, но до этого нужно отключить swap, чтобы запустить команду kubeadm init.

# swapoff Цa

»нициализаци€ Kubernetes master - это полностью автоматизированный процесс, управл€емый командой kubeadm init, которую необходимо выполнить.

# kubeadm init
kubeadm init
»нициализаци€ Kubernetes master

¬озможно, потребуетс€ скопировать последнюю строку и сохранить ее в другом месте, поскольку нужно будет запустить ее на рабочих узлах.

kubeadm join 10.128.0.27:6443 --token nu06lu.xrsux0ss0ixtnms5  \ --discovery-token-ca-cert-hash sha256:f996ea3564e6a07fdea2997a1cf8caeddafd6d4360d606dbc82314688425cd41 
—овет: »ногда эта команда может жаловатьс€ на переданные аргументы (args), поэтому отредактируйте ее, чтобы избежать ошибок. “аким образом, вы удалите символ \, сопровождающий --token, и ваша последн€€ команда будет выгл€деть следующим образом.
kubeadm join 10.128.0.27:6443 --token nu06lu.xrsux0ss0ixtnms5  --discovery-token-ca-cert-hash sha256:f996ea3564e6a07fdea2997a1cf8caeddafd6d4360d606dbc82314688425cd41

ѕосле успешной инициализации Kubernetes необходимо разрешить пользователю начать использование кластера. ¬ нашем случае мы хотим запустить эту установку от имени пользовател€ root, поэтому мы продолжим выполнение этих команд с этого же имени. ¬ы можете перейти на пользовател€ с поддержкой sudo, который вы предпочитаете, и запустить ниже с помощью sudo.

„тобы использовать root, выполните следующие действи€:

# mkdir -p $HOME/.kube
# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# chown $(id -u):$(id -g) $HOME/.kube/config

„тобы быть пользователем с поддержкой sudo, выполните следующие действи€:

$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config

“еперь проверьте, активирована ли команда kubectl.

# kubectl get nodes
kubectl get node

Ќа этом этапе также можно заметить, что главный узел имеет статус NotReady. Ёто св€зано с тем, что сеть модулей еще не развернута в кластере.

Pod Network - это сеть наложени€ дл€ кластера, котора€ развернута поверх текущей сети узла. ќна предназначена дл€ обеспечени€ возможности подключени€ через модуль.

Ўаг 5: Ќастройка сети модул€

ѕрименение сетевого кластера €вл€етс€ очень гибким процессом в зависимости от потребностей пользовател€ и наличи€ множества доступных вариантов. “ак как мы хотим сохранить нашу установку как можно проще, мы будем использовать плагин Weavenet, который не требует никакой конфигурации или дополнительного кода, и он предоставл€ет один IP-адрес на модуль, что отлично дл€ нас. ƒл€ просмотра дополнительных параметров проверьте здесь.

Ёти команды будут важны дл€ настройки сети модул€.

# export kubever=$(kubectl version | base64 | tr -d '\n')
# kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$kubever"
export kubever

“еперь, если вы проверите статус главного узла, он должен показать "Ready"

# kubectl get nodes
kubectl get nodes

ƒалее мы добавим рабочие узлы в кластер.


Ќастройка рабочих узлов дл€ присоединени€ к кластеру Kubernetes

—ледующие шаги будут выполнены на рабочих узлах. Ёти шаги должны выполн€тьс€ на каждом рабочем узле при присоединении к кластеру Kubernetes.

Ўаг 1: ѕодготовить им€ узла, брандмауэр и SELinux

Ќа рабочем узле-1 и рабочем узле-2 задайте им€, а если у вас нет DNS-сервера, то обновите основные и рабочие узлы в файле /etc/hosts.

# hostnamectl set-hostname 'node-1'
# cat <<EOF>> /etc/hosts
10.128.0.27 master-node
10.128.0.29 node-1 worker-node-1
10.128.0.30 node-2 worker-node-2
EOF

ћожно выполнить ping master-node дл€ проверки правильности обновленного файла хоста.

«атем отключите SElinux и обновите правила брандмауэра.

# setenforce 0
# sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux

”становите следующие правила брандмауэра дл€ портов. ”бедитесь, что все команды firewall-cmd возвращаютс€ успешно.

# firewall-cmd --permanent --add-port=6783/tcp
# firewall-cmd --permanent --add-port=10250/tcp
# firewall-cmd --permanent --add-port=10255/tcp
# firewall-cmd --permanent --add-port=30000-32767/tcp
# firewall-cmd  --reload
# echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables

Ўаг 2: Ќастройка Kubernetes Repo

¬ам потребуетс€ добавить хранилище Kubernetes вручную, так как оно не будет предварительно установлено на CentOS 7.

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF

Ўаг 3: ”становить Kubeadm и Docker

ѕосле того, как пакет repo уже готов, вы можете продолжить и установить kubeadm и docker пакеты.

# yum install kubeadm docker -y 

«апустите и включите обе службы.

# systemctl enable docker
# systemctl start docker
# systemctl enable kubelet
# systemctl start kubelet

Ўаг 4: ѕрисоединение рабочего узла к кластеру  убернетов

“еперь дл€ присоединени€ к кластеру требуетс€ маркер, созданный kubeadm init. ≈го можно скопировать и вставить в узлы 1 и 2, если он был скопирован в другом месте.

# kubeadm join 10.128.0.27:6443 --token nu06lu.xrsux0ss0ixtnms5  --discovery-token-ca-cert-hash sha256:f996ea3564e6a07fdea2997a1cf8caeddafd6d4360d606dbc82314688425cd41 
kubeadm join

 ак показано в последней строке, вернитесь к главному узлу и проверьте, присоединились ли рабочие узлы 1 и 2 к кластеру с помощью следующей команды.

# kubectl get nodes
DevOps

≈сли все шаги выполнены успешно, на главном узле должны быть показаны узлы 1 и 2 в состо€нии готовности.

Ќа этом этапе мы успешно завершили установку кластера Kubernetes на Centos 7 и успешно вз€ли два рабочих узла. “еперь можно начинать создавать модули и разворачивать службы.