Kubernetes на одном сервере

Kubernetes на одном сервере Хостинг

Далее мы установим кластер Kubernetes с виртуализацией сети flannel. Вы можете выбрать любой другой способ виртуализировать сеть в официальной документации по установке.

Как обычно, если у вас что-то пошло не так, вы можете сбросить установку и начать заново, выполнив команду:

   
$ sudo kubeadm reset
  
  

Прежде всего необходимо инициализировать и установить master сервер:

   
$ sudo kubeadm init --apiserver-advertise-address=192.168.0.4 --pod-network-cidr=10.244.0.0/16
  
  

Здесь ключ —apiserver-advertise-address=192.168.0.4 явно указывает мастеру на IP адрес, который нужно сообщать клиентам для подключения, а ключ —pod-network-cidr=10.244.0.0/16 используется для установки адресного пространства для ваших pod-ов в flannel.

Вывод команды будет примерно следующий:

   
[kubeadm] WARNING: kubeadm is in beta, please do not use it for production clusters.

[init] Using Kubernetes version: v1.7.0

[init] Using Authorization modes: [Node RBAC]

[preflight] Running pre-flight checks

[preflight] Starting the kubelet service

[certificates] Generated CA certificate and key.

[certificates] Generated API server certificate and key.

[certificates] API Server serving cert is signed for DNS names [kubeadm-master kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] and IPs [10.96.0.1 10.138.0.4]

[certificates] Generated API server kubelet client certificate and key.

[certificates] Generated service account token signing key and public key.

[certificates] Generated front-proxy CA certificate and key.

[certificates] Generated front-proxy client certificate and key.

[certificates] Valid certificates and keys now exist in "/etc/kubernetes/pki"

[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/admin.conf"

[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/kubelet.conf"

[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/controller-manager.conf"

[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/scheduler.conf"

[apiclient] Created API client, waiting for the control plane to become ready

[apiclient] All control plane components are healthy after 16.502136 seconds

[token] Using token:

[apiconfig] Created RBAC rules

[addons] Applied essential addon: kube-proxy

[addons] Applied essential addon: kube-dns

 

Your Kubernetes master has initialized successfully!

 

To start using your cluster, you need to run (as a regular user):

 

mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config

 

You should now deploy a pod network to the cluster.

Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:

http://kubernetes.io/docs/admin/addons/

 

You can now join any number of machines by running the following on each node

as root:

 

kubeadm join --token :
  
  

Выполним настройку параметров подключения к кластеру, как посоветовал нам установщик:

   
mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config
  
  

Далее установим для наших pod-ов сеть:

   
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel-rbac.yml
  
  

Все, теперь можно начать подключать к кластеру вычислительные узлы. Kubeadm уже сказал нам, как это сделать:

   
$ kubeadm join --token :
  
  

После выполнения этих команд, убедитесь, что вычислительные узлы подключились и доступны для размещения pod-ов:

   
kubectl get nodes
  
  

Поздравляю, вы только что выполнили установку кластера Kubernetes самой последней версии. Далее можно переходить к изучению новых доступных в нем фичей или этой технологии в принципе.

Данная статья предназначена для тех, кто искал подробное и понятное руководство о том, как установить Kubernetes на Ubuntu Server 22.04 LTS.

Kubernetes — открытое программное обеспечение для оркестровки контейнеризированных приложений — автоматизации их развёртывания, масштабирования и координации в условиях кластера.

В этом руководстве мы будем рассматривать тот случай, когда у вас уже есть сервер с установленной на нем операционной системой Ubuntu Server 22.04 LTS.

Подробно о том, как установить Ubuntu Server 22.04 LTS, вы можете прочитать в моем руководстве “ Установка Ubuntu Server 22.04 LTS
”.

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

Для установки OpenSSH на сервер вы можете воспользоваться командой:

   apt openssh-server  
  

Если вы планируете подключиться к серверу, используя операционную систему Windows, то можете воспользоваться PuTTY
или MobaXterm
.

В данном руководстве рассматривается подключение к серверу при помощи терминального эмулятора iTerm2
, установленного на операционную систему macOS.

Обратите внимание, вам потребуется открыть следующие порты TCP для доступа к вашему серверу:

Kubernetes Master (Control Plane):

  • TCP порт 6443 — для работы Kubernetes API.
  • TCP порт 2379-2380 — для работы etcd server client API.
  • TCP порт 10250 — для работы Kubelet API.
  • TCP порт 10259 — для работы kube-scheduler.
  • TCP порт 10257 — для работы kube-controller-manager.
  • TCP порт 0250 — для работы Kubelet API.
  • TCP порт 30000-32767 — для работы NodePort Services.

Мы будем рассматривать установку одного сервера с ролью Master и одного сервера с ролью Worker. В дальнейшем вы сможете самостоятельно добавить необходимое количество серверов для обеспечения высокой доступности.

Подключаемся к серверу, на который планируется установить роль Kubernetes Master.

Присвоим имя серверу с помощью команды:

   hostnamectl set-hostname kubernetes-master-1.heyvaldemar.net  
  

В данном руководстве в качестве имени сервера с ролью Master используется “kubernetes-master-1.heyvaldemar.net”.

Установка Kubernetes на Ubuntu Server 22.04 LTS

Сервер с ролью Worker должен разрешать имя сервера с ролью Master, и также сервер с ролью Master должен разрешать имя сервера с ролью Worker.

    "10.0.5.140 kubernetes-master-1.heyvaldemar.net kubernetes-master-1" |   /etc/hosts  
  

Наличие данной записи позволит серверу с установленным агентом разрешать имя сервера Kubernetes даже без записи DNS.

Установка Kubernetes на Ubuntu Server 22.04 LTS

Убедитесь, что имя сервера с ролью Worker имеет правильную запись DNS, а также обновите файл “/etc/hosts” на сервере с помощью команды:

    "10.0.6.19 kubernetes-worker-1.heyvaldemar.net kubernetes-worker-1" |   /etc/hosts  
  

Наличие данной записи позволит серверу с установленным агентом разрешать имя сервера Kubernetes даже без записи DNS.

Установка Kubernetes на Ubuntu Server 22.04 LTS

Перезапустим службу hostamed, чтобы внесенные изменения для имени сервера вступили в силу, с помощью команды:

   systemctl restart systemd-hostnamed  
  

Установка Kubernetes на Ubuntu Server 22.04 LTS

Проверим корректность имени сервера с помощью команды:

     
  

Установка Kubernetes на Ubuntu Server 22.04 LTS

Теперь заменим текущий процесс оболочки на новый с помощью команды:

   bash  
  

Установка Kubernetes на Ubuntu Server 22.04 LTS

Далее необходимо отключить файл подкачки с помощью команды:

   swapoff   
  

Установка Kubernetes на Ubuntu Server 22.04 LTS

Команда выше отключает файл подкачки до тех пор, пока система не будет перезагружена. Мы должны убедиться, что он останется выключенным даже после перезагрузки. Для этого нужно отредактировать файл “fstab”, закомментировав строку “/swapfile” символом “#”.

     '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab  
  

Установка Kubernetes на Ubuntu Server 22.04 LTS

Загрузите модули ядра с помощью команды:

    /etc/modules-load.d/containerd.conf   
  

Установка Kubernetes на Ubuntu Server 22.04 LTS

Загружаем модуль “overlay” с помощью команды:

   modprobe overlay  
  

Установка Kubernetes на Ubuntu Server 22.04 LTS

Загружаем модуль “br_netfilter” с помощью команды:

   modprobe br_netfilter  
  

Установка Kubernetes на Ubuntu Server 22.04 LTS

Установите параметры ядра для Kubernetes с помощью команды:

    /etc/sysctl.d/kubernetes.conf 
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF  
  

Установка Kubernetes на Ubuntu Server 22.04 LTS

Применим внесенные изменения с помощью команды:

Читайте также:  Начало работы с Ifconfig в Debian: установка стала проще
   sysctl   
  

Установка Kubernetes на Ubuntu Server 22.04 LTS

Теперь добавим официальный ключ Docker с помощью команды:

   curl  https://download.docker.com/linux/ubuntu/gpg | gpg   /etc/apt/trusted.gpg.d/docker.gpg  
  

Установка Kubernetes на Ubuntu Server 22.04 LTS

Далее подключаем репозиторий Docker с помощью команды:

   add-apt-repository lsb_release   
  

Установка Kubernetes на Ubuntu Server 22.04 LTS

Нажимаем на кнопку “Enter”.

Установка Kubernetes на Ubuntu Server 22.04 LTS

Обновим локальный индекс пакетов до последних изменений в репозиториях с помощью команды:

   apt update  
  

Установка Kubernetes на Ubuntu Server 22.04 LTS

Теперь установим пакеты, необходимые для работы Kubernetes, с помощью команды:

   apt   curl gnupg2 software-properties-common apt-transport-https ca-certificates containerd.io  
  

Установка Kubernetes на Ubuntu Server 22.04 LTS

Теперь необходимо настроить containerd.

containerd — стандартная среда выполнения контейнеров с упором на простоту, надежность и переносимость.

   containerd config default |  /etc/containerd/config.toml /dev/null 2>&1  
  

Установка Kubernetes на Ubuntu Server 22.04 LTS

     's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml  
  

Установка Kubernetes на Ubuntu Server 22.04 LTS

Перезапустим containerd, чтобы применить внесенные изменения, с помощью команды:

   systemctl restart containerd  
  

Установка Kubernetes на Ubuntu Server 22.04 LTS

Включаем автозапуск сервиса containerd при запуске операционной системы с помощью команды:

   systemctl containerd  
  

Установка Kubernetes на Ubuntu Server 22.04 LTS

Теперь добавим официальный ключ Kubernetes с помощью команды:

   curl  https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -  
  

Установка Kubernetes на Ubuntu Server 22.04 LTS

Далее подключаем репозиторий Kubernetes с помощью команды:

   apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"  
  

Обратите внимание, на момент написания этого руководства Xenial является актуальным репозиторием Kubernetes, но когда репозиторий будет доступен для Ubuntu 22.04 (Jammy Jellyfish), то вам нужно будет заменить слово в команде выше с “xenial” на “jammy”.

Установка Kubernetes на Ubuntu Server 22.04 LTS

Нажимаем на кнопку “Enter”.

Установка Kubernetes на Ubuntu Server 22.04 LTS

Обновим локальный индекс пакетов до последних изменений в репозиториях с помощью команды:

   apt update  
  

Установка Kubernetes на Ubuntu Server 22.04 LTS

Теперь установим пакеты kubelet, kubeadm и kubectl с помощью команды:

   apt   kubelet kubeadm kubectl  
  

Установка Kubernetes на Ubuntu Server 22.04 LTS

На следующем шаге нужно запретить автоматическое обновление и удаление установленных пакетов с помощью команды:

   apt-mark hold kubelet kubeadm kubectl  
  

Установка Kubernetes на Ubuntu Server 22.04 LTS

Теперь необходимо запустить инициализацию кластера Kubernetes с помощью команды:

   kubeadm init kubernetes-master-1.heyvaldemar.net  
  

В данном руководстве в качестве имени сервера с ролью Master используется “kubernetes-master-1.heyvaldemar.net”.

Установка Kubernetes на Ubuntu Server 22.04 LTS

Обратите внимание, для добавления еще одного сервера в кластер вам потребуется проделать такую же работу по установке и настройке сервера, а затем выполнить команду kubeadm join
с соответствующим токеном для сервера с ролью Master или Worker.

Далее необходимо выполнить несколько команд, чтобы начать взаимодействие с кластером.

     /.kube  
  

Установка Kubernetes на Ubuntu Server 22.04 LTS

     /etc/kubernetes/admin.conf /.kube/config  
  

Установка Kubernetes на Ubuntu Server 22.04 LTS

     :  /.kube/config  
  

Установка Kubernetes на Ubuntu Server 22.04 LTS

Далее можно посмотреть адреса мастера и сервисов с помощью команды:

   kubectl cluster-info  
  

Установка Kubernetes на Ubuntu Server 22.04 LTS

Теперь можно посмотреть список всех узлов в кластере и статус каждого узла с помощью команды:

   kubectl get nodes  
  

Установка Kubernetes на Ubuntu Server 22.04 LTS

Подключаемся к серверу, на который планируется установить роль Kubernetes Master.

Присвоим имя серверу с помощью команды:

   hostnamectl set-hostname kubernetes-worker-1.heyvaldemar.net  
  

В данном руководстве в качестве имени сервера с ролью Worker используется “kubernetes-worker-1.heyvaldemar.net”.

Установка Kubernetes на Ubuntu Server 22.04 LTS

Сервер с ролью Worker должен разрешать имя сервера с ролью Master, и также сервер с ролью Master должен разрешать имя сервера с ролью Worker.

    "10.0.6.19 kubernetes-worker-1.heyvaldemar.net kubernetes-worker-1"    
 | /etc/hosts

Наличие данной записи позволит серверу с установленным агентом разрешать имя сервера Kubernetes даже без записи DNS.

Установка Kubernetes на Ubuntu Server 22.04 LTS

Убедитесь, что имя сервера с ролью Worker имеет правильную запись DNS, а также обновите файл “/etc/hosts” на сервере с помощью команды:

    "10.0.5.140 kubernetes-master-1.heyvaldemar.net kubernetes-master-1"    
 | /etc/hosts

Наличие данной записи позволит серверу с установленным агентом разрешать имя сервера Kubernetes даже без записи DNS.

Установка Kubernetes на Ubuntu Server 22.04 LTS

Перезапустим службу hostamed, чтобы внесенные изменения для имени сервера вступили в силу, с помощью команды:

   systemctl restart systemd-hostnamed  
  

Установка Kubernetes на Ubuntu Server 22.04 LTS

Проверим корректность имени сервера с помощью команды:

     
  

Установка Kubernetes на Ubuntu Server 22.04 LTS

Теперь заменим текущий процесс оболочки на новый с помощью команды:

   bash  
  

Установка Kubernetes на Ubuntu Server 22.04 LTS

Далее необходимо отключить файл подкачки с помощью команды:

   swapoff   
  

Установка Kubernetes на Ubuntu Server 22.04 LTS

Команда выше отключает файл подкачки до тех пор, пока система не будет перезагружена. Мы должны убедиться, что он останется выключенным даже после перезагрузки. Для этого нужно отредактировать файл “fstab”, закомментировав строку “/swapfile” символом “#”.

    '/ swap / s/^\(.*\)$/#\1/g'    
 /etc/fstab

Установка Kubernetes на Ubuntu Server 22.04 LTS

Загрузите модули ядра с помощью команды:

    /etc/modules-load.d/containerd.conf   
  

Установка Kubernetes на Ubuntu Server 22.04 LTS

Загружаем модуль “overlay” с помощью команды:

   modprobe overlay  
  

Установка Kubernetes на Ubuntu Server 22.04 LTS

Загружаем модуль “br_netfilter” с помощью команды:

   modprobe br_netfilter  
  

Установка Kubernetes на Ubuntu Server 22.04 LTS

Установите параметры ядра для Kubernetes с помощью команды:

 /etc/sysctl.d/kubernetes.conf    
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF    

Установка Kubernetes на Ubuntu Server 22.04 LTS

Применим внесенные изменения с помощью команды:

   sysctl   
  

Установка Kubernetes на Ubuntu Server 22.04 LTS

Теперь добавим официальный ключ Docker с помощью команды:

   curl  https://download.docker.com/linux/ubuntu/gpg | gpg   /etc/apt/trusted.gpg.d/docker.gpg  
  

Установка Kubernetes на Ubuntu Server 22.04 LTS

Далее подключаем репозиторий Docker с помощью команды:

   add-apt-repository lsb_release   
  

Установка Kubernetes на Ubuntu Server 22.04 LTS

Нажимаем на кнопку “Enter”.

Установка Kubernetes на Ubuntu Server 22.04 LTS

Обновим локальный индекс пакетов до последних изменений в репозиториях с помощью команды:

   apt update  
  

Установка Kubernetes на Ubuntu Server 22.04 LTS

Теперь установим пакеты, необходимые для работы Kubernetes, с помощью команды:

   apt   curl gnupg2 software-properties-common apt-transport-https ca-certificates containerd.io  
  

Установка Kubernetes на Ubuntu Server 22.04 LTS

Теперь необходимо настроить containerd.

containerd — стандартная среда выполнения контейнеров с упором на простоту, надежность и переносимость.

   containerd config default |  /etc/containerd/config.toml /dev/null 2>&1  
  

Установка Kubernetes на Ubuntu Server 22.04 LTS

    's/SystemdCgroup \= false/SystemdCgroup \= true/g'    
 /etc/containerd/config.toml

Установка Kubernetes на Ubuntu Server 22.04 LTS

Перезапустим containerd, чтобы применить внесенные изменения, с помощью команды:

   systemctl restart containerd  
  

Установка Kubernetes на Ubuntu Server 22.04 LTS

Включаем автозапуск сервиса containerd при запуске операционной системы с помощью команды:

   systemctl containerd  
  

Установка Kubernetes на Ubuntu Server 22.04 LTS

Теперь добавим официальный ключ Kubernetes с помощью команды:

   curl  https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -  
  

Установка Kubernetes на Ubuntu Server 22.04 LTS

Далее подключаем репозиторий Kubernetes с помощью команды:

apt-add-repository    "deb http://apt.kubernetes.io/ kubernetes-xenial main"    

Обратите внимание, на момент написания этого руководства Xenial является актуальным репозиторием Kubernetes, но когда репозиторий будет доступен для Ubuntu 22.04 (Jammy Jellyfish), то вам нужно будет заменить слово в команде выше с “xenial” на “jammy”.

Установка Kubernetes на Ubuntu Server 22.04 LTS

Нажимаем на кнопку “Enter”.

Установка Kubernetes на Ubuntu Server 22.04 LTS

Обновим локальный индекс пакетов до последних изменений в репозиториях с помощью команды:

   apt update  
  

Установка Kubernetes на Ubuntu Server 22.04 LTS

Теперь установим пакеты kubelet, kubeadm и kubectl с помощью команды:

   apt   kubelet kubeadm kubectl  
  

Установка Kubernetes на Ubuntu Server 22.04 LTS

На следующем шаге нужно запретить автоматическое обновление и удаление установленных пакетов с помощью команды:

   apt-mark hold kubelet kubeadm kubectl  
  

Установка Kubernetes на Ubuntu Server 22.04 LTS

Далее необходимо добавить сервер с ролью Worker в кластер Kubernetes с помощью команды:

   kubeadm kubernetes-master-1.heyvaldemar.net:6443  5xuqag.tefxcfleieexwbos 
	 sha256:8c3e8eb9d95cd16496db9f65956e2ce1c2164fa64d17a487374bd906dbc0dcb3  
  

Установка Kubernetes на Ubuntu Server 22.04 LTS

Сервер с ролью Worker успешно присоединен к кластеру Kubernetes.

Установка Kubernetes на Ubuntu Server 22.04 LTS

Возвращаемся на сервер с ролью Kubernetes Master.

Теперь можно посмотреть список всех узлов в кластере и статус каждого узла с помощью команды:

   kubectl get nodes  
  

Установка Kubernetes на Ubuntu Server 22.04 LTS

Узлы находятся статусе “NotReady”. Чтобы это исправить нужно установить CNI (Container Network Interface) или сетевые надстройки, такие как Calico, Flannel и Weave-net.

Загрузим манифест Calico с помощью команды:

   curl https://projectcalico.docs.tigera.io/manifests/calico.yaml   
  

Установка Kubernetes на Ubuntu Server 22.04 LTS

Установим Calico с помощью команды:

   kubectl apply  calico.yaml  
  

Установка Kubernetes на Ubuntu Server 22.04 LTS

Проверим статус подов в пространстве имен kube-system с помощью команды:

Читайте также:  Как перенести сайт на другой хостинг без простоя и потери данных - Записки IT специалиста
   kubectl get pods  kube-system  
  

Установка Kubernetes на Ubuntu Server 22.04 LTS

Теперь можно посмотреть список всех узлов в кластере и статус каждого узла с помощью команды:

   kubectl get nodes  
  

Установка Kubernetes на Ubuntu Server 22.04 LTS

Узлы находятся статусе “Ready” и кластер Kubernetes готов к работе.

Установка Kubernetes на Ubuntu Server 22.04 LTS

Установка мастера

На мастер-сервере выполните команду:

   
kubeadm init --api-advertise-addresses=192.168.0.4
--api-external-dns-names=master-1.comp.avmaksimov.ru
--pod-network-cidr 10.244.0.0/16
  
  

Вывод команды будет примерно следующим:

   
[kubeadm] WARNING: kubeadm is in alpha, please do not use
it for production clusters.
[preflight] Running pre-flight checks
[init] Using Kubernetes version: v1.5.3
[tokens] Generated token: "aecc37.5d0fc1b9a673ecaa"
[certificates] Generated Certificate Authority key and certificate.
[certificates] Generated API Server key and certificate
[certificates] Generated Service Account signing keys
[certificates] Created keys and certificates
in "/etc/kubernetes/pki"
[kubeconfig] Wrote KubeConfig file to disk:
"/etc/kubernetes/kubelet.conf"
[kubeconfig] Wrote KubeConfig file to disk:
"/etc/kubernetes/admin.conf"
[apiclient] Created API client, waiting for the control
plane to become ready
[apiclient] All control plane components are healthy
after 44.788287 seconds
[apiclient] Waiting for at least one node to
register and become ready
[apiclient] First node is ready after 2.502671 seconds
[apiclient] Creating a test deployment
[apiclient] Test deployment succeeded
[token-discovery] Created the kube-discovery deployment,
waiting for it to become ready
[token-discovery] kube-discovery is ready after 16.002846 seconds
[addons] Created essential addon: kube-proxy
[addons] Created essential addon: kube-dns
 
Your Kubernetes master has initialized successfully!
 
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with
one of the options listed at:
    http://kubernetes.io/docs/admin/addons/
 
You can now join any number of machines
by running the following on each node:
 
kubeadm join --token=aecc37.5d0dfasdf673ecaa 192.168.0.4
  
  

Эта команда подготовит и установит все необходимое для работы вашего Kubernetes кластера, а также протестирует его работоспособность. В качестве параметров для kubeadm переданы:

  • —api-advertise-addresses — устанавливает IP-адрес, на котором будет слушать API-сервис, нужный для взаимодействия с кластером утилиты kubectl. В нашем случае — 192.168.0.4. Если не указывать этот параметр, будет использоваться IP-адрес интерфейса, смотрящего в сеть шлюза по-умолчанию
  • —pod-network-cidr — сообщает кластеру адресное пространство (10.244.0.0/16) виртуальных сетей используемых во flannel. Оно задается в файле конфигурации flannel, ссылка на который приведена по  URL
    из вывода kubeadm
  • —api-external-dns-names — указывает на внешнее DNS имя хоста (в нашем случае master-1.comp.avmaksimov.ru); это позволит вам пройти аутентификацию и авторизацию при использовании kubectl с рабочего места

В конце выполнения kubeadm выдаст вам команду и токен для подключения ваших вычислительных узлов.

Требования

Никаких предварительных специфических требований нет. Вам потребуется 1-4 виртуальные машины (в зависимости от того, какое количество вычислительных узлов вам нужно) с CentOS 7, объединенные общей сетью и с доступом в Интернет.

Install a CNI plugin

For networking to function, you must install a Container Network Interface (CNI) plugin
. With this in mind, we’re installing flannel
.

   kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml  
  

Install a test application

To test the cluster, you can deploy WordPress. Note that we need to specify the storage class provided by our CSI.

  # Add bitnami repo to helm  
helm repo add bitnami https://charts.bitnami.com/bitnami

helm install wordpress bitnami/wordpress \
--set=global.storageClass=openebs-hostpath

We’ve just provisioned a cluster using kubeadm on Ubuntu 22. 04!

You have successfully created a single-node Kubernetes Cluster using kubeadm on Ubuntu 22.04, and the cluster has everything you need to install your application.

If you’d like to watch this in a video, see below:

https://youtube.com/watch?v=uvy_F3-blt4%3Ffeature%3Doembed

Untaint node

We must untaint the node to allow pods to be deployed to our single-node cluster. Otherwise, your pods will be stuck in a pending state.

   kubectl taint nodes --all node-role.kubernetes.io/master-  
  
kubectl taint nodes --all node-role.kubernetes.io/control-plane-

В этой статье мы покажем как развернуть полностью рабочий и безопасный кластер Kubernetes на CentOS 7, состоящий из 1 мастер сервера и трех вычислительных узлов.

Начиная с Kubernetes 1.5 в состав этого фремворка начала входить утилита kubeadm
, которая значительно упростила процесс создания и администрирования кластера Kubernetes. Kubeadm 
до сих пор находится в версии alpha, но тем не менее уже отлично выполняет свои функции и пригодна для использования.

В качестве системы виртуализации сети в кластере мы будем использовать flannel
. Схема кластера приведена ниже.

Kubernetes-Intro-Compressor-Kubernetes-minimal-cluster.png

Не смотря на то, что в качестве облачной платформы я буду использовать Облако КРОК
, вы легко можете повторить эту установку в любом другом облаке, платформе виртуализации или “железе”.

Ensure swap is disabled

You have to disable the swap feature because Kubernetes does not support it. See the GitHub issue regarding swap on Kubernetes
for details.

  # See if swap is enabled  
swapon --show

# Turn off swap
sudo swapoff -a

# Disable swap completely
sudo sed -i -e '/swap/d' /etc/fstab

Create the cluster using kubeadm

It’s only a single command to initialise the cluster, but it won’t be very functional in single-node environments until we make some changes. Note that we’re providing “–pod-network-cidr” parameter as required by our CNI plugin (Flannel).

  sudo kubeadm init --pod-network-cidr=10.244.0.0/16  

Install CNI network plugins

Install Container Network Interface network plugins from their official GitHub repository.

  curl -fLo cni-plugins-linux-amd64-v1.1.1.tgz \
 https://github.com/containernetworking/plugins/releases/download/v1.1.1/cni-plugins-linux-amd64-v1.1.1.tgz
sudo mkdir -p /opt/cni/bin
sudo tar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v1.1.1.tgz  

Настройка виртуальной сети

Для настройки виртуальной сети на мастере Kubernetes необходимо выполнить следующую команду:

   
kubectl apply -f
https://github.com/coreos/flannel/blob/master/Documentation/kube-flannel.yml?raw=true
  
  

Убедиться в правильной настройке виртуальной сети можно по запущенному Pod kube-dns из вывода команды:

   kubectl get pods --all-namespaces  
  

Вывод должен быть похож на следующий:

   NAMESPACE     NAME                                                  
READY     STATUS    RESTARTS   AGE
default       kube-flannel-ds-76mm0                                 
2/2       Running   0          2m
kube-system   dummy-2088944543-6t4fs                                
1/1       Running   0          15m
kube-system   etcd-master-1.comp.avmaksimov.ru                      
1/1       Running   0          14m
kube-system   kube-apiserver-master-1.comp.avmaksimov.ru            
1/1       Running   0          15m
kube-system   kube-controller-manager-master-1.comp.avmaksimov.ru   
1/1       Running   0          14m
kube-system   kube-discovery-1769846148-vmzw9                       
1/1       Running   0          15m
kube-system   kube-dns-2924299975-9slml                             
4/4       Running   0          15m
kube-system   kube-proxy-k8f4m                                      
1/1       Running   0          15m
kube-system   kube-scheduler-master-1.comp.avmaksimov.ru            
1/1       Running   0          14m  
  

Ограничения kubeadm

Самые важные ограничения kubeadm
на текущий момент времени:

Читайте также:  Полезные статьи. Перенос сайта c виртуального хостинга на VPS с помощью LAMP. LTD Beget.

  • не поддерживает кластеризацию матер серверов
  • не поддерживает использование балансировщиков трафика ( LoadBalancer
    )

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

После прочтения этой стати вы самостоятельно сможете развернуть кластер Kubernetes, а также продолжить изучение этого потрясающего фреймворка.

Install kubeadm, kubelet & kubectl

You need to ensure the versions of kubeadm, kubelet and kubectl are compatible.

  # Add Kubernetes GPG key
curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-archive-keyring.gpg

# Add Kubernetes apt repository
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list

# Fetch package list
sudo apt-get update

sudo apt-get install -y kubelet kubeadm kubectl

# Prevent them from being updated automatically
sudo apt-mark hold kubelet kubeadm kubectl  

Установка Web-UI

Для установки Web-UI (Dashboard) для вашего кластера Kubernetes, необходимо выполнить команду:

   kubectl --kubeconfig ./admin.conf create -f
https://rawgit.com/kubernetes/dashboard/master/src/deploy/kubernetes-dashboard.yaml  
  

Контейнер с Web-UI автоматически определит ваш сервер API и подключится к нему.

Проверить запуск контейнера можно командой:

   kubectl --kubeconfig ./admin.conf get pods -n kube-system
  
  

Pod с Web-UI (kubernetes-dashboard) должен быть запущен:

   NAME                                                  
READY     STATUS    RESTARTS   AGE
dummy-2088944543-pttw1                                
1/1       Running   0          4h
etcd-master-1.comp.avmaksimov.ru                      
1/1       Running   0          4h
kube-apiserver-master-1.comp.avmaksimov.ru            
1/1       Running   1          4h
kube-controller-manager-master-1.comp.avmaksimov.ru   
1/1       Running   0          4h
kube-discovery-1769846148-hzl49                       
1/1       Running   0          4h
kube-dns-2924299975-2ljvn                             
4/4       Running   0          4h
kube-proxy-6l5k6                                      
1/1       Running   0          4h
kube-proxy-hwgr7                                      
1/1       Running   0          4h
kube-proxy-q1krp                                      
1/1       Running   0          4h
kube-proxy-x2ll1                                      
1/1       Running   0          4h
kube-scheduler-master-1.comp.avmaksimov.ru            
1/1       Running   0          4h
kubernetes-dashboard-3203831700-tsk1c                 
1/1       Running   0          3h  
  
   wget https://rawgit.com/kubernetes/dashboard/master/src/deploy/kubernetes-dashboard.yaml  
  

Раскомментировать и отредактировать строку подключения к API-серверу —apiserver-host:

   spec:
      containers:
      - name: kubernetes-dashboard
        image:
gcr.io/google_containers/kubernetes-dashboard-amd64:v1.5.1
        imagePullPolicy: Always
        ports:
        - containerPort: 9090
          protocol: TCP
        args:
          # Uncomment the following line to manually specify
Kubernetes API server Host
          # If not specified, Dashboard will attempt to auto
discover the API server and connect
          # to it. Uncomment only if the default does not work.
          - --apiserver-host=http://192.168.0.4:8080
        livenessProbe:
          httpGet:
            path: /
            port: 9090
          initialDelaySeconds: 30
          timeoutSeconds: 30  
  
   kubectl --kubeconfig ./admin.conf create -f kubernetes-dashboard.yaml
  
  

Установка Weave Scope

Weave Scope
 — это отличный инструмент, предназначенный для графического отображения ваших контейнеров, pod, сервисов и других компонент кластера, а также связей между ними.

Weave Scope может быть установлен как с подключением к Облаку Weave Cloud
, так и без него. Для того, чтобы установить Weave Scope с подключением к их облаку, воспользуйтесь документацией. Сейчас мы остановимся на том, что установим Weave Scope в автономном режиме. Для того, чтобы это сделать, выполните команду:

   kubectl --kubeconfig ./admin.conf apply -f 'https://cloud.weave.works/launch/k8s/weavescope.yaml'  
  

Чтобы получить доступ к Web-интерфейсу, отображающему всю вашу инфраструктуру, необходимо выполнить другую команду:

   kubectl --kubeconfig ./admin.conf port-forward $(kubectl --kubeconfig ./admin.conf get pod --selector=weave-scope-component=app -o jsonpath='{.items..metadata.name}') 4040  
  

shoc-sock-microservice-app-demo.png

Install runc

Installing runc
from their official GitHub repository is the recommended way.

  curl -fsSLo runc.amd64 \  
https://github.com/opencontainers/runc/releases/download/v1.1.3/runc.amd64
sudo install -m 755 runc.amd64 /usr/local/sbin/runc

Configure kubectl

To access the cluster, we have to configure kubectl.

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

Удаление приложения

Для того, чтобы удалить тестовое приложение, можно просто удалить пространство имен sock-shop, а Kubernetes самостоятельно удалит все в нужной последовательности и освободит ресурсы. Сделать это можно командой:

   kubectl --kubeconfig ./admin.conf delete namespace sock-shop  
  

Подготовка серверов

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

  • Обновленная ОС:
       
    yum -y update
      
      
  • Правильно установленное и синхронизируемое время:
       
    yum -y install ntp
    systemctl enable ntpd
    systemctl start ntpd
      
      
  • Аккуратно заданное имя хоста:
       
    hostnamectl set-hostname master-1.comp.avmaksimov.ru
      
      

    Если вы повторяете эту установку в Облаке КРОК, я рекомендую вам дополнительно для удобства отключить обновление имени хоста в cloud-init. Для этого вам необходимо отредактировать файл /etc/cloud/cloud.cfg и закомментировать следующие строчки:

       
    cloud_init_modules:
     - migrator
     - bootcmd
     - write-files
     - growpart
     - resizefs
    # - set_hostname
    # - update_hostname
    # - update_etc_hosts
     - rsyslog
     - users-groups
     - ssh
      
      

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

    Добавьте Kubernetes репозиторий:

       
    cat < /etc/yum.repos.d/kubernetes.repo
    [kubernetes]
    name=Kubernetes
    baseurl=http://yum.kubernetes.io/repos/kubernetes-el7-x86_64
    enabled=1
    gpgcheck=0
    repo_gpgcheck=0
    EOF
      
      

    После добавления репозитория обязательно отключите SELinux, т.к. Kubernetes еще не очень хорошо с ним работает. Для этого выполните следующую команду:

       
    setenforce 0
      
      

    А также отредактируйте файл /etc/sysconfig/selinux, изменив значение переменной SELINUX на disabled:

       
    sed -i --follow-symlinks's/^SELINUX=.*/SELINUX=disabled/g'
     /etc sysconfig/selinux
      
      

    Далее нужно установить необходимые для инсталляции кластера пакеты:

       
    yum -y install docker kubelet kubeadm kubectl kubernetes-cni
      
      

    Далее необходимо запустить сервис docker:

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

Процесс установки кластера очень прост и фактически сводится к выполнению всего пары команд.

Если что-то пошло не так, вы всегда можете начать с начала, выполнив на нужном вам узле кластера команду:

   kubeadm reset  
  

Install helm

To install our packages, we’re installing helm v3.

   curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash  
  

Запуск приложения

В качестве примера, как это сделано в официальной документации, предлагаю вам запустить тестовое микросервисное приложение sock-shop (Интернет-магазин носков).

Для этого создайте для него отдельное пространство имен (namespace) sock-shop:

   kubectl --kubeconfig ./admin.conf create namespace sock-shop
  
  

А затем выполните запуск приложения:

   kubectl --kubeconfig ./admin.conf apply -n sock-shop -f "https://github.com/microservices-demo/microservices-demo/blob/master/deploy/kubernetes/complete-demo.yaml?raw=true"
  
  

Здесь ключ -n предназначен для указания пространства пространства имен, в котором необходимо запустить приложение.

Смотреть за процессом запуска контейнеров приложения можно командой:

   kubectl --kubeconfig ./admin.conf get pods -n sock-shop  
  

Как только все контейнеры будут запущены, необходимо выяснить, на каком порту опубликовано это приложение, т.к. мы не используем никакие балансировщики. Сделать это можно выполнив команду:

   kubectl --kubeconfig ./admin.conf describe svc front-end -n sock-shop  
  

Данная команда предназначена для вывода информации о сервисе front-end. Вы получите следующий вывод:

   Name:                front-end
Namespace: sock-shop
Labels: name=front-end
Selector: name=front-end
Type: NodePort
IP: 10.103.253.240
Port: 80/TCP
NodePort: 30001/TCP
Endpoints: 10.244.2.4:8079
Session Affinity: None
No events.

В строке NodePort обозначен порт, на котором слушает подключения сервис front-end.

Kubernetes на одном сервере

Также вы можете посмотреть на все сущности, которые были созданы в соответствующем пространстве имен в Web-UI Kubernetes.

Forward IPv4 and let iptables see bridged network traffic

You need to enable overlay and br_netfilter kernel modules. Additionally, you need to allow iptables see bridged network traffic.

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf  
overlay
br_netfilter
EOF

sudo modprobe -a overlay br_netfilter

# Apply sysctl params without reboot
sudo sysctl --system

Install a CSI driver

We need to install a Container Storage Interface (CSI) driver
for the storage to work. We’ll install OpenEBS
.

# Add openebs repo to helm  
helm repo add openebs https://openebs.github.io/charts

kubectl create namespace openebs

helm --namespace=openebs install openebs openebs/openebs

Получение доступа к Web-UI

Для получение доступа к Web-UI интерфейсу кластера (по-умолчанию не открыт во внешние сети), с рабочего ПК выполните команду:

   kubectl --kubeconfig ./admin.conf proxy  
  

После чего подключиться к Web-UI можно будет по адресу http://localhost:8001/api/v1

kubernetes-web-ui-demo.png

Управление кластером с узлов, не принадлежащих кластеру

   clusters:
- cluster:
    certificate-authority-data: ...
    server: https://master-1.comp.avmaksimov.ru:6443
  name: kubernetes  
  

Важно: убедитесь, что в правилах межсетевого экрана в VPC вашей виртуальной сети разрешен трафик на порт 6443/TCP.

Запуск kubectl в таком случае будет выглядеть, например, следующим образом:

   kubectl --kubeconfig ./admin.conf get nodes
  
  

Подключение вычислительных узлов

Для подключения вычислительных узлов к кластеру необходимо выполнить команду, сообщенную вам kubeadm:

   kubeadm join --token=aecc37.5d0dfasdf673ecaa 192.168.0.4
  
  

Проверить корректность подключения узла можно командой:

   kubectl get nodes  
  

В случае успешного подключения всех узлов вывод будет следующим:

   master-1.comp.avmaksimov.ru        Ready,master   5m
node-1.comp.avmaksimov.ru          Ready          1m
node-2.comp.avmaksimov.ru          Ready          1m
node-3.comp.avmaksimov.ru          Ready          1m  
  

Install containerd

Although we have a few container runtimes to choose from, we’re going with containerd. Before we install containerd, we’ll create its configuration file.

curl -fsSLo containerd-config.toml \  
https://gist.githubusercontent.com/oradwell/31ef858de3ca43addef68ff971f459c2/raw/5099df007eb717a11825c3890a0517892fa12dbf/containerd-config.toml
sudo mkdir /etc/containerd
sudo mv containerd-config.toml /etc/containerd/config.toml
  curl -fLo containerd-1.6.14-linux-amd64.tar.gz \
 https://github.com/containerd/containerd/releases/download/v1.6.14/containerd-1.6.14-linux-amd64.tar.gz
# Extract the binaries
sudo tar Cxzvf /usr/local containerd-1.6.14-linux-amd64.tar.gz

# Install containerd as a service
sudo curl -fsSLo /etc/systemd/system/containerd.service \
 https://raw.githubusercontent.com/containerd/containerd/main/containerd.service

sudo systemctl daemon-reload
sudo systemctl enable --now containerd  

Install general dependencies

You need to install packages on your system for the commands we will use later.

sudo apt-get update 

sudo apt-get install -y apt-transport-https ca-certificates curl</pre

Оцените статью
Хостинги