Далее мы установим кластер 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 на сервер вы можете воспользоваться командой:
Если вы планируете подключиться к серверу, используя операционную систему 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.
Присвоим имя серверу с помощью команды:
В данном руководстве в качестве имени сервера с ролью Master используется “kubernetes-master-1.heyvaldemar.net”.
Сервер с ролью Worker должен разрешать имя сервера с ролью Master, и также сервер с ролью Master должен разрешать имя сервера с ролью Worker.
Наличие данной записи позволит серверу с установленным агентом разрешать имя сервера Kubernetes даже без записи DNS.
Убедитесь, что имя сервера с ролью Worker имеет правильную запись DNS, а также обновите файл “/etc/hosts” на сервере с помощью команды:
Наличие данной записи позволит серверу с установленным агентом разрешать имя сервера Kubernetes даже без записи DNS.
Перезапустим службу hostamed, чтобы внесенные изменения для имени сервера вступили в силу, с помощью команды:
Проверим корректность имени сервера с помощью команды:
Теперь заменим текущий процесс оболочки на новый с помощью команды:
Далее необходимо отключить файл подкачки с помощью команды:
Команда выше отключает файл подкачки до тех пор, пока система не будет перезагружена. Мы должны убедиться, что он останется выключенным даже после перезагрузки. Для этого нужно отредактировать файл “fstab”, закомментировав строку “/swapfile” символом “#”.
Загрузите модули ядра с помощью команды:
Загружаем модуль “overlay” с помощью команды:
Загружаем модуль “br_netfilter” с помощью команды:
Установите параметры ядра для Kubernetes с помощью команды:
Применим внесенные изменения с помощью команды:
Теперь добавим официальный ключ Docker с помощью команды:
Далее подключаем репозиторий Docker с помощью команды:
Нажимаем на кнопку “Enter”.
Обновим локальный индекс пакетов до последних изменений в репозиториях с помощью команды:
Теперь установим пакеты, необходимые для работы Kubernetes, с помощью команды:
Теперь необходимо настроить containerd.
containerd — стандартная среда выполнения контейнеров с упором на простоту, надежность и переносимость.
Перезапустим containerd, чтобы применить внесенные изменения, с помощью команды:
Включаем автозапуск сервиса containerd при запуске операционной системы с помощью команды:
Теперь добавим официальный ключ Kubernetes с помощью команды:
Далее подключаем репозиторий Kubernetes с помощью команды:
Обратите внимание, на момент написания этого руководства Xenial является актуальным репозиторием Kubernetes, но когда репозиторий будет доступен для Ubuntu 22.04 (Jammy Jellyfish), то вам нужно будет заменить слово в команде выше с “xenial” на “jammy”.
Нажимаем на кнопку “Enter”.
Обновим локальный индекс пакетов до последних изменений в репозиториях с помощью команды:
Теперь установим пакеты kubelet, kubeadm и kubectl с помощью команды:
На следующем шаге нужно запретить автоматическое обновление и удаление установленных пакетов с помощью команды:
Теперь необходимо запустить инициализацию кластера Kubernetes с помощью команды:
В данном руководстве в качестве имени сервера с ролью Master используется “kubernetes-master-1.heyvaldemar.net”.
Обратите внимание, для добавления еще одного сервера в кластер вам потребуется проделать такую же работу по установке и настройке сервера, а затем выполнить команду kubeadm join
с соответствующим токеном для сервера с ролью Master или Worker.
Далее необходимо выполнить несколько команд, чтобы начать взаимодействие с кластером.
Далее можно посмотреть адреса мастера и сервисов с помощью команды:
Теперь можно посмотреть список всех узлов в кластере и статус каждого узла с помощью команды:
Подключаемся к серверу, на который планируется установить роль Kubernetes Master.
Присвоим имя серверу с помощью команды:
В данном руководстве в качестве имени сервера с ролью Worker используется “kubernetes-worker-1.heyvaldemar.net”.
Сервер с ролью Worker должен разрешать имя сервера с ролью Master, и также сервер с ролью Master должен разрешать имя сервера с ролью Worker.
Наличие данной записи позволит серверу с установленным агентом разрешать имя сервера Kubernetes даже без записи DNS.
Убедитесь, что имя сервера с ролью Worker имеет правильную запись DNS, а также обновите файл “/etc/hosts” на сервере с помощью команды:
Наличие данной записи позволит серверу с установленным агентом разрешать имя сервера Kubernetes даже без записи DNS.
Перезапустим службу hostamed, чтобы внесенные изменения для имени сервера вступили в силу, с помощью команды:
Проверим корректность имени сервера с помощью команды:
Теперь заменим текущий процесс оболочки на новый с помощью команды:
Далее необходимо отключить файл подкачки с помощью команды:
Команда выше отключает файл подкачки до тех пор, пока система не будет перезагружена. Мы должны убедиться, что он останется выключенным даже после перезагрузки. Для этого нужно отредактировать файл “fstab”, закомментировав строку “/swapfile” символом “#”.
Загрузите модули ядра с помощью команды:
Загружаем модуль “overlay” с помощью команды:
Загружаем модуль “br_netfilter” с помощью команды:
Установите параметры ядра для Kubernetes с помощью команды:
Применим внесенные изменения с помощью команды:
Теперь добавим официальный ключ Docker с помощью команды:
Далее подключаем репозиторий Docker с помощью команды:
Нажимаем на кнопку “Enter”.
Обновим локальный индекс пакетов до последних изменений в репозиториях с помощью команды:
Теперь установим пакеты, необходимые для работы Kubernetes, с помощью команды:
Теперь необходимо настроить containerd.
containerd — стандартная среда выполнения контейнеров с упором на простоту, надежность и переносимость.
Перезапустим containerd, чтобы применить внесенные изменения, с помощью команды:
Включаем автозапуск сервиса containerd при запуске операционной системы с помощью команды:
Теперь добавим официальный ключ Kubernetes с помощью команды:
Далее подключаем репозиторий Kubernetes с помощью команды:
Обратите внимание, на момент написания этого руководства Xenial является актуальным репозиторием Kubernetes, но когда репозиторий будет доступен для Ubuntu 22.04 (Jammy Jellyfish), то вам нужно будет заменить слово в команде выше с “xenial” на “jammy”.
Нажимаем на кнопку “Enter”.
Обновим локальный индекс пакетов до последних изменений в репозиториях с помощью команды:
Теперь установим пакеты kubelet, kubeadm и kubectl с помощью команды:
На следующем шаге нужно запретить автоматическое обновление и удаление установленных пакетов с помощью команды:
Далее необходимо добавить сервер с ролью Worker в кластер Kubernetes с помощью команды:
Сервер с ролью Worker успешно присоединен к кластеру Kubernetes.
Возвращаемся на сервер с ролью Kubernetes Master.
Теперь можно посмотреть список всех узлов в кластере и статус каждого узла с помощью команды:
Узлы находятся статусе “NotReady”. Чтобы это исправить нужно установить CNI (Container Network Interface) или сетевые надстройки, такие как Calico, Flannel и Weave-net.
Загрузим манифест Calico с помощью команды:
Установим Calico с помощью команды:
Проверим статус подов в пространстве имен kube-system с помощью команды:
Теперь можно посмотреть список всех узлов в кластере и статус каждого узла с помощью команды:
Узлы находятся статусе “Ready” и кластер Kubernetes готов к работе.
- Установка мастера
- Требования
- Install a CNI plugin
- Install a test application
- We’ve just provisioned a cluster using kubeadm on Ubuntu 22. 04!
- Untaint node
- В этой статье мы покажем как развернуть полностью рабочий и безопасный кластер Kubernetes на CentOS 7, состоящий из 1 мастер сервера и трех вычислительных узлов.
- Ensure swap is disabled
- Create the cluster using kubeadm
- Install CNI network plugins
- Настройка виртуальной сети
- Ограничения kubeadm
- Install kubeadm, kubelet & kubectl
- Установка Web-UI
- Установка Weave Scope
- Install runc
- Configure kubectl
- Удаление приложения
- Подготовка серверов
- Install helm
- Запуск приложения
- Forward IPv4 and let iptables see bridged network traffic
- Install a CSI driver
- Получение доступа к Web-UI
- Управление кластером с узлов, не принадлежащих кластеру
- Подключение вычислительных узлов
- Install containerd
- Install general dependencies
Установка мастера
На мастер-сервере выполните команду:
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:
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
. Схема кластера приведена ниже.
Не смотря на то, что в качестве облачной платформы я буду использовать Облако КРОК
, вы легко можете повторить эту установку в любом другом облаке, платформе виртуализации или “железе”.
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
на текущий момент времени:
- не поддерживает кластеризацию матер серверов
- не поддерживает использование балансировщиков трафика ( 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
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.
Также вы можете посмотреть на все сущности, которые были созданы в соответствующем пространстве имен в 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
EOFsudo 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
Управление кластером с узлов, не принадлежащих кластеру
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