Рубрики
Uncategorized

65 $ Kubernetes Cluster на Diumpanyocean — Часть I

Учебное пособие и прохождение на создание кластера Kubernetes kubernetes на $ 65 на Digitalocean с помощью Coreos. Это в основном ручная настройка, пока Digitalocean не освобождает свои управляемые сервис Kubernetes.

Автор оригинала: Chuka Ofili.

Это мультипартное учебное пособие и прохождение при настройке $ 65 Крупный кластер Kubernetes на капельницы Digitalocean с помощью Coreos. Это в основном ручная установка, пока Digitalocean не освобождает свои управляемые службы Kubernetes здесь Отказ

Там тоже Видеоурок здесь для тех, кто предпочитает смотреть, а не читать.

[Оглавление]

  • Предпосылки
  • Мастер Кубернес
    • Установите Kubernetes и связанные с ними услуги
    • Установите скрипт объяснил
    • Инициализировать мастера
    • Настроить доступ к кластеру
    • Установка POD Network Add-ont-ont-ont-onlen
  • Kubernetes рабочие узлы
    • Установите Kubernetes
    • Присоединиться к кластеру
  • Настройте Nginx Ingress
  • Настроить балансировщик нагрузки на нагрузку на нагрузку
    • Настройки — Правила экспедирования и проверки здоровья
  • Простое развертывание
  • Заключение

Предпосылки

  1. Вам понадобится учетная запись Digital Ocean, если вы не можете получить один бесплатный кредит в 10 долларов здесь Отказ

  2. Вам также нужно будет установить kubectl

Гистовый код

Мастер Кубернес

Создайте капельку, используя Текущий стабильный Версия Кореос Отказ Минимальная рекомендуемая спецификация капле: 2 ГБ ОЗУ, 2 VCPU ($ 15/месяц). Выберите свой предпочтительный регион, выберите Частную сеть, добавьте свой SSH-ключ (вы не сможете создать капельку без нее), введите предпочтительное имя хоста и, наконец, добавьте тег K8S-Master Отказ

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

Установите Kubernetes и связанные с ними услуги

Создайте и сохраните следующий скрипт для ./install-k8s.sh.

Гистовый код

Установите скрипт объяснил

  • Линии 3-6: Установите и включите Докер Systemd Service.
  • Строки 8-12: Установите плагины CNI (требуется для большей сети POD).
  • Строки 14-20: Установить kubeadm. , Кублет , kubectl двоичные файлы.
  • Строки 22-27: Установить и включить Кублет Systemd Service.
  • Линии 29-30: Добавить /opt/Bin Глобальному пути к использованию двоичных файлов, установленных из строк 14-20.
  • Линии 32-37: Настройте службу Kublet для использования частного IP-адреса Digitalocean для маршрутизации.

Теперь замените ниже с публичным IP-адресом Master Cakelet K8S и запустите следующие команды в вашей оболочке:

MASTER_IP=[droplet-public-ip-goes-here]
ssh core@$MASTER_IP "bash -s" < ./install-k8s.sh

Все должно идти хорошо без каких-либо проблем в этот момент, если у вас есть проблемы, пожалуйста, пересмотрите шаги снова.

Инициализировать мастера

Мы будем использовать Фланель Сеть, которая требует нашего POD Network CIDR для использования 10.244.0.0/16 IP-диапазона для правильной работы, поэтому мы передам эти варианты для Kubeadm init команда.

Чтобы инициализировать Master, SSH в мастер:

ssh core@$MASTER_IP

И запустить следующие команды:

sudo su
PUBLIC_IP=$(ip -f inet -o addr show eth0|cut -d\  -f 7 | cut -d/ -f 1 | head -n 1)
kubeadm init --apiserver-advertise-address=$PUBLIC_IP  --pod-network-cidr=10.244.0.0/16
exit
exit

Примечание: Это может занять около минуты или два для завершения. Терпение моего друга, терпение.

Это должно выводить следующее:

Container Linux by CoreOS stable (1688.5.3)
core@k8s-master ~ $ sudo su
k8s-master core # PUBLIC_IP=$(ip -f inet -o addr show eth0|cut -d\  -f 7 | cut -d/ -f 1 | head -n 1)
k8s-master core # kubeadm init --apiserver-advertise-address=$PUBLIC_IP  --pod-network-cidr=10.244.0.0/16
[init] Using Kubernetes version: v1.10.2
[init] Using Authorization modes: [Node RBAC]
[preflight] Running pre-flight checks.
        [WARNING SystemVerification]: docker version is greater than the most recently validated version. Docker version: 17.12.1-ce. Max validated version: 17.03
        [WARNING Hostname]: hostname "k8s-master" could not be reached
        [WARNING Hostname]: hostname "k8s-master" lookup k8s-master on 67.207.67.3:53: no such host
        [WARNING FileExisting-crictl]: crictl not found in system path
Suggestion: go get github.com/kubernetes-incubator/cri-tools/cmd/crictl
[certificates] Generated ca certificate and key.
[certificates] Generated apiserver certificate and key.
[certificates] apiserver serving cert is signed for DNS names [k8s-master kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] and IPs [10.96.0.1 206.189.30.3]
[certificates] Generated apiserver-kubelet-client certificate and key.
[certificates] Generated etcd/ca certificate and key.
[certificates] Generated etcd/server certificate and key.
[certificates] etcd/server serving cert is signed for DNS names [localhost] and IPs [127.0.0.1]
[certificates] Generated etcd/peer certificate and key.
[certificates] etcd/peer serving cert is signed for DNS names [k8s-master] and IPs [206.189.30.3]
[certificates] Generated etcd/healthcheck-client certificate and key.
[certificates] Generated apiserver-etcd-client certificate and key.
[certificates] Generated sa 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"
[controlplane] Wrote Static Pod manifest for component kube-apiserver to "/etc/kubernetes/manifests/kube-apiserver.yaml"
[controlplane] Wrote Static Pod manifest for component kube-controller-manager to "/etc/kubernetes/manifests/kube-controller-manager.yaml"
[controlplane] Wrote Static Pod manifest for component kube-scheduler to "/etc/kubernetes/manifests/kube-scheduler.yaml"
[etcd] Wrote Static Pod manifest for a local etcd instance to "/etc/kubernetes/manifests/etcd.yaml"
[init] Waiting for the kubelet to boot up the control plane as Static Pods from directory "/etc/kubernetes/manifests".
[init] This might take a minute or longer if the control plane images have to be pulled.
[apiclient] All control plane components are healthy after 77.504326 seconds
[uploadconfig] Storing the configuration used in ConfigMap "kubeadm-config" in the "kube-system" Namespace
[markmaster] Will mark node k8s-master as master by adding a label and a taint
[markmaster] Master k8s-master tainted and labelled with key/value: node-role.kubernetes.io/master=""
[bootstraptoken] Using token: 
[bootstraptoken] Configured RBAC rules to allow Node Bootstrap tokens to post CSRs in order for nodes to get long term certificate credentials
[bootstraptoken] Configured RBAC rules to allow the csrapprover controller automatically approve CSRs from a Node Bootstrap Token
[bootstraptoken] Configured RBAC rules to allow certificate rotation for all node client certificates in the cluster
[bootstraptoken] Creating the "cluster-info" ConfigMap in the "kube-public" namespace
[addons] Applied essential addon: kube-dns
[addons] Applied essential addon: kube-proxy

Your Kubernetes master has initialized successfully!

To start using your cluster, you need to run the following 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:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

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

  kubeadm join : --token  --discovery-token-ca-cert-hash sha256:

Примечание: Убедитесь, что вы копируете команду на Линия 65 (Я замаскировал свои собственные детали), вам понадобится его для рабочих узлов, чтобы присоединиться к кластеру K8S.

Настроить доступ к кластеру

Чтобы настроить удаленный доступ к вашему кластеру как удаленные Core Пользователь и пользователь на вашем локальном компьютере, выполните следующие команды:

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

На вашем Местная машина Запустите следующие команды как Регулярный пользователь :

mkdir -p $HOME/.kube
scp core@$MASTER_IP:~/.kube/config $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

Примечание: Если вы уже настроили доступ к другим кластерам Kubenetes, пожалуйста, назовите файл $ Home/.kube/Config-цифровой океан Или все, что вы предпочитаете, а затем использовать с опцией -kubeconfig, например: Kubectl --kubeconfig = $ Home/.kube/Config-Digital-Ocean Получить узлы

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

kubectl get nodes

Который должен производить:

NAME         STATUS     ROLES     AGE       VERSION
k8s-master   NotReady   master    15m       v1.10.2

Обратите внимание на состояние Reforey И не будет, пока мы не загрузим рабочие узлы.

Установка POD Network Add-ont-ont-ont-onlen

Чтобы установить плагин Add-on Add-on Flannel, выполните следующие команды:

ssh core@$MASTER_IP sudo sysctl net.bridge.bridge-nf-call-iptables=1
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.10.0/Documentation/kube-flannel.yml

Примечание: Вы Должен Установите дополнение сети POD, чтобы ваши стручки могли общаться друг с другом.

Сеть должна быть развернута перед любыми приложениями. Кроме того, Kube-DNS, внутренний помощник службы помощника, не запустится до установки сети. Kubeadm поддерживает Networks на основе сетей контейнерных сетей (CNI) (и не поддерживает Kubenet).

Источник: Kubernetes.io

Kubernetes рабочие узлы

Создать 3 Одинаковые капельки используя Текущий стабильный Версия Кореос Отказ Минимальная рекомендуемая спецификация капле: 2 ГБ ОЗУ, 1 VCPU ($ 10/месяц). Выберите Та же регион Используется для узла K8S-Master, выберите Private Networking, добавьте свой SSH-ключ (вы не сможете создать капельку без нее), введите предпочтительное имя хоста и, наконец, добавить тег K8S-NODE для всех работник Узлы (это потребуется позже для балансировщика нагрузки).

Примечание: не добавляйте блокировать хранилище.

k8-узлы-компрессор.png

Установите Kubernetes

Для каждого Рабочий узел IP Запустите следующую команду:

ssh core@[droplet-worker-node-public-ip] "bash -s" < ./install-k8s.sh

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

Присоединиться к кластеру

Использование команды, которая была выведена на Линия 65 от Kubeadm init Команда выше, мы будем работать на каждом уземе работника.

Для каждого Рабочий узел IP Запустите следующую команду:

ssh core@[droplet-worker-node-public-ip] sudo kubeadm join : --token  --discovery-token-ca-cert-hash sha256:

Примечание: Если вы получите какие-либо ошибки токена истекшего токена, вы всегда можете выполнить следующее из вашего Местная машина Чтобы получить новый токен из K8S-Master :

ssh core@$MASTER_IP sudo kubeadm token create

Вышеуказанная команда должна выводить следующее для каждого узла:

[preflight] Running pre-flight checks.
        [WARNING SystemVerification]: docker version is greater than the most recently validated version. Docker version: 17.12.1-ce. Max validated version: 17.03
        [WARNING Hostname]: hostname "k8s-node-1" could not be reached
        [WARNING Hostname]: hostname "k8s-node-1" lookup k8s-node-new-1 on 67.207.67.3:53: no such host
[discovery] Trying to connect to API Server ":"
[discovery] Created cluster-info discovery client, requesting info from "https://:"
[discovery] Requesting info from "https://:" again to validate TLS against the pinned public key
        [WARNING FileExisting-crictl]: crictl not found in system path
Suggestion: go get github.com/kubernetes-incubator/cri-tools/cmd/crictl
[discovery] Cluster info signature and contents are valid and TLS certificate validates against pinned roots, will use API Server ":"
[discovery] Successfully established connection with API Server ":"

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

Run 'kubectl get nodes' on the master to see this node join the cluster.

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

kubectl get nodes

Который должен выводить:

NAME         STATUS    ROLES     AGE       VERSION
k8s-master   Ready     master    1h        v1.10.2
k8s-node-1   Ready         3m        v1.10.2
k8s-node-2   Ready         1m        v1.10.2
k8s-node-3   Ready         35s       v1.10.2

Обратите внимание, как все узлы в Готов положение дел. Приземление!

Настройте Nginx Ingress

С контроллером входа NGINX мы можем установить Узел-портовый сервис (Требуется для нашего внешнего балансировщика нагрузки), а также необходимые входные директивы для кластера Baremetal Kubernetes. Запустите следующие команды для установки:

Гистовый код

Чтобы проверить, работает ли наш контроллер входа NGINIX, нам понадобится запуск порта узла включен. Запустите следующую команду:

kubectl get svc -n ingress-nginx

Который должен выводить:

NAME                   TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
default-http-backend   ClusterIP   10.98.107.241           80/TCP                       6m
ingress-nginx          NodePort    10.105.47.130           80:32476/TCP,443:31967/TCP   6m

В Порт (ы) столбец для Ingress-Nginx стручок, порт 80 Карты на 32476 (Будет отличаться для вас) и порту 443 Карты на 31967 (Также будет иначе для вас). Чтобы проверить, перейти на каждый узел Общественный IP На этом порту, и вы должны увидеть «Backend по умолчанию — 404». Если это сообщение, которое вы видите, поздравляю!

Настроить балансировщик нагрузки на нагрузку на нагрузку

Теперь, когда у нас полностью работают кластер Kubernetes, нам нужно убедиться, что наши все развертывания/стручки доступны от всех узлов. Войдите в свою учетную запись Digital Ocean, GoTo Сеть> Балансировщики нагрузки> Создать балансировщик нагрузки ($ 20/месяц), дайте вашему балансировку нагрузки имя, выберите Та же регион Как все рабочие узлы и продолжают создавать его.

Как только балансировщик нагрузки был создан, мы настроим его, используя тег K8S-NODE Чтобы автоматически выбирать все Только для рабочих узлов Отказ

Loadbalancer-compressor.png.png.png

Настройки — Правила экспедирования и проверки здоровья

Чтобы правильно работать балансировщик нагрузки, необходима дополнительная конфигурация.

  • Перейти к настройкам вкладки и редактировать Правила экспедирования , Обновите правила, чтобы указать на капли на узле-портах от POD-службы INGRESS-NGINX (MIE было 80: 32476 /443: 31967 Несомненно
Fressing_Rules-compressor.png.png.png.png

Примечание: Обязательно используйте Passthrough для протокола HTTPS.

  • Далее настроители настроек Goto и отредактируйте проверки здоровья, обновите правило для использования TCP И укажите капельки на узле порта сопоставленного к порту 80 из службы POD Ingress-Nginx (My был 80: 32476 )
Health_checks-compressor.png.png.

Теперь вы можете посетить IP-файл BALANCER BALANCER, и вы должны увидеть «Backend по умолчанию — 404», который представляет собой круглое подключение ROBIN для всех рабочих узлов. Ура!!! Теперь вы можете настроить свой домен, например, «example.com», чтобы указать на IP-балансировщик нагрузки.

Простое развертывание

Чтобы проверить, работает ли наш кластер и развертывание в порядке, давайте разверним простой сервер Echo.

Гистовый код

Теперь посетите echo. [Yourdomain.com], вы должны увидеть следующее:

echoserver-compress.png.png.png

Если вы здесь, хорошо сделано.

Заключение

Вы сделали это так далеко, спасибо, что придерживаются меня до этого момента Отказ Далее на сериале, я пишу, как добавить Постоянная тома поддержки поддерживается, используя Digitalocean’s Блок хранения , установка шлем (Управляющий пакетом Kubernetes), устанавливая Приборная панель Kubernetes & Heappster (для диаграмм отчета) и, наконец, добавьте автоматическую SSL-сертификаты от АТАРСЕРГИПТ Для наших кластеров входных ресурсов, созданных из правил входа.

Я надеюсь, что это поможет кому-то там.

эта статья 65 $ Kubernetes Cluster на Diumpanyocean — Часть I Первоначально появился Блог Chuka .

Оригинал: «https://www.codementor.io/@chukaofili/65-kubernetes-cluster-on-digitalocean-part-i-jlcgyc5pc»