ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

Как настроить мастер Kubernetes с рабочим узлом в Linux

Как настроить мастер Kubernetes с рабочим узлом в Linux

Что такое KubernetesKubernetes является проектом с открытым исходным кодом, предназначенным для управления кластером контейнеров Linux как единой системой.

Мы собираемся настроить главный и рабочий узел в Linux. Мы также можем настроить высокую доступность кластера master-slave Kubernetes, используя kubeadm в Linux.

Мы также можем установить кластер Kubernetes Master-Slave, используя Kubectl на платформах Linux и Windows. Давайте посмотрим, как настроить высокую доступность кластера master-slave Kubernetes с помощью kubeadm в Linux.

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

 

Настройка узла МАСТЕР:

Шаг 1: мы отключим swap и SELinux с помощью приведенных ниже команд, а также раскомментируем swap из файла /etc/fstab.

[root@andreyex ~]# swapoff -a
[root@andreyex ~]# free -m
     total      used     free      shared     buff/cache     available
Mem:  979       145      308        12          525            636
Swap:            0        0         0
[root@andreyex ~]# sudo sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config

 

Шаг 2: Убедитесь, что модуль br_netfilter загружен до этой конфигурации. Вы можете проверить это с помощью lsmod | grep br_netfilter, если он не загружен, мы можем загрузить, используя modprobe br_netfilter.

Нам нужно включить сеть, и мы создадим новый файл в этом каталоге /etc/sysctl.d/kub.conf.

[root@andreyex ~]# cat /etc/sysctl.d/kub.conf
net.bridge.bridge-nf-call-ip6tables =1
net.bridge.bridge-nf-call-iptables =1
[root@andreyex ~]# sysctl --system
[root@andreyex ~]# sysctl -p

 

Шаг 3: Создайте хранилище Kubernetes.

[root@andreyex ~]# vim /etc/yum.repos.d/kub.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-$basearch
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
exclude=kubelet kubeadm kubectl

 

Шаг 4: Установите необходимые пакеты, включая docker и kubeadm.

[root@andreyex ~]# yum install docker kubeadm -y

 

kubeadm – это отдельная команда, которая установит оба необходимых пакета для настройки Kubernetes. Теперь мы запустим сервис Docker и включим его во время загрузки.

[root@andreyex ~]# systemctl start docker 
[root@andreyex ~]# systemctl enable docker 
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
[root@andreyex ~]# systemctl enable kubelet.service
Created symlink from /etc/systemd/system/multi-user.target.wants/kubelet.service to /usr/lib/systemd/system/kubelet.service.

 

Шаг 5.  Инициализируйте кластер, используя приведенные ниже команды, и мы объявим сетевой адрес для кластера. Если у вас нет двух процессоров, вы можете проигнорировать эту проверку оборудования во время выполнения команды, приведенной ниже, с помощью –ignore-preflight-errors=all в конце.

[root@andreyex ~]# kubeadm init --pod-network-cidr "172.10.0.0/16" --service-cidr "172.12.0.0/16"

 

УСТРАНЕНИЕ НЕПОЛАДОК:

Когда вы сталкиваетесь с любой проблемой, связанной с « обязательными отключенными группами». Вы можете проверить тип драйвера Cgroup, используя приведенную ниже команду.

[root@andreyex ~]# docker info | grep -i 'cgroup driver'
WARNING: You're not using the default seccomp profile
Cgroup Driver: systemd

 

Альтернативная команда для проверки драйвера Cgroup.

[root@andreyex ~]# docker info -f {{.CgroupDriver}}
systemd

 

Вы можете проверить журналы, связанные с сервисом kubelet, здесь.

[root@andreyex ~]# journalctl -xeu kubelet | more

 

Мы можем добавить этот параметр в этот файл.

[root@andreyex ~]# vim /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS=--cgroup-driver=cgroupfs

 

Теперь запустите и включите сервис kubelet. Если вы сталкиваетесь снова вопрос обслуживания затем изменить cgroupfs к Systemd как докер.

[root@andreyex ~]# systemctl daemon-reload
[root@andreyex ~]# systemctl startkubelet
[root@andreyex ~]# systemctl enale kubelet
[root@andreyex ~]# systemctl status kubelet
● kubelet.service - kubelet: The Kubernetes Node Agent
Loaded: loaded (/usr/lib/systemd/system/kubelet.service; enabled; vendor preset: disabled)
Drop-In: /usr/lib/systemd/system/kubelet.service.d
└─10-kubeadm.conf
Active: active (running) since Tue 2020-04-07 11:33:37 EDT; 426ms ago
Docs: https://kubernetes.io/docs/
Main PID: 2841 (kubelet)
CGroup: /system.slice/kubelet.service
└─2841 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --config=/var/lib/kubelet/config.yaml --cgroup-driver=systemd ...

 

Теперь инициализируйте приведенную ниже команду для установки необходимых пакетов.

[root@andreyex ~]# kubeadm init --pod-network-cidr "172.10.0.0/16" --service-cidr "172.12.0.0/16" --ignore-preflight-errors=all

 

Вы должны выполнить приведенную ниже команду.

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

 

Проверьте, можете ли вы установить соединение с сервером Cluster/API.

[root@andreyex ~]# kubectl get componentstatuses
NAME                 STATUS                 MESSAGE       ERROR
scheduler            Healthy                  ok 
controller-manager   Healthy                  ok 
etcd-0               Healthy          {"health":"true"}

 

Шаг 6: Теперь мы проверим статус главного узла.

[root@andreyex ~]# kubectl get node
NAME           STATUS        ROLES        AGE       VERSION
andreyex    NotReady      master       57m       v1.18.0

 

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

[root@andreyex ~]# kubectl get pods --all-namespaces=true -o wide

 

Шаг 7:  У нас есть сеть pod, мы будем использовать сеть weave.

[root@andreyex ~]# export kubever=$(kubectl version | base64 | tr -d '\n')
[root@andreyex ~]# kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$kubever"
serviceaccount/weave-net created
clusterrole.rbac.authorization.k8s.io/weave-net created
clusterrolebinding.rbac.authorization.k8s.io/weave-net created
role.rbac.authorization.k8s.io/weave-net created
rolebinding.rbac.authorization.k8s.io/weave-net created
daemonset.apps/weave-net created

 

Как только сеть готова. Проверьте статус главного узла.

[root@andreyex log]# kubectl get node
NAME                     STATUS              ROLES            AGE           VERSION
andreyex              Ready                 master           84m             v1.18.0

 

НАСТРОЙТЕ РАБОЧИЙ УЗЕЛ:

Шаг 8: мы должны повторить те же шаги 1, 2, 3 и 4 на рабочем узле. Когда вы закончите с этим, выполните команду ниже, чтобы присоединить рабочий узел к главному узлу.

 

[root@worker-node ~]# kubeadm join 192.168.185.143:6443 --token srio4m.8o3t3bk3d0lhj3qt --discovery-token-ca-cert-hash sha256:7e3f6c35f997295f9f5b6f625f381c444266041cdc4a658e852855adf0ab053a
W0430 11:14:45.879568    8907 join.go:346] [preflight] WARNING: JoinControlPane.controlPlane settings will be ignored when control-plane flag is not set.
[preflight] Running pre-flight checks
[preflight] Reading configuration from the cluster...
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml'
[kubelet-start] Downloading configuration for the kubelet from the "kubelet-config-1.18" ConfigMap in the kube-system namespace
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Starting the kubelet
[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...

This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.

Run 'kubectl get nodes' on the control-plane to see this node join the cluster.

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

 

[root@andreyex ~]# kubeadm token create --print-join-command

 

Проверьте состояние здоровья Kubernetes, используя приведенную ниже команду.

[root@worker-node ~]# curl -sSL http://localhost:10248/healthz
ok

 

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

[root@andreyex ~]# kubectl get node
NAME               STATUS        ROLES       AGE       VERSION
andreyex        Ready         master      22h       v1.18.0
worker-node        Ready         <none>      18m       v1.18.0

 

Вот и все.

Exit mobile version