Что такое Kubernetes? Kubernetes является проектом с открытым исходным кодом, предназначенным для управления кластером контейнеров 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
Вот и все.