Автор оригинала: Chuka Ofili.
Это мультипартное учебное пособие и прохождение при настройке $ 65 Крупный кластер Kubernetes на капельницы Digitalocean с помощью Coreos. Это в основном ручная установка, пока Digitalocean не освобождает свои управляемые службы Kubernetes здесь Отказ
Там тоже Видеоурок здесь для тех, кто предпочитает смотреть, а не читать.
[Оглавление]
- Предпосылки
- Мастер Кубернес
- Установите Kubernetes и связанные с ними услуги
- Установите скрипт объяснил
- Инициализировать мастера
- Настроить доступ к кластеру
- Установка POD Network Add-ont-ont-ont-onlen
- Kubernetes рабочие узлы
- Установите Kubernetes
- Присоединиться к кластеру
- Настройте Nginx Ingress
- Настроить балансировщик нагрузки на нагрузку на нагрузку
- Настройки — Правила экспедирования и проверки здоровья
- Простое развертывание
- Заключение
Предпосылки
Вам понадобится учетная запись Digital Ocean, если вы не можете получить один бесплатный кредит в 10 долларов здесь Отказ
Вам также нужно будет установить
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
для всех работник Узлы (это потребуется позже для балансировщика нагрузки).
Примечание: не добавляйте блокировать хранилище.
Установите 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 Ready3m 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.24180/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
Чтобы автоматически выбирать все Только для рабочих узлов Отказ
Настройки — Правила экспедирования и проверки здоровья
Чтобы правильно работать балансировщик нагрузки, необходима дополнительная конфигурация.
- Перейти к настройкам вкладки и редактировать Правила экспедирования , Обновите правила, чтобы указать на капли на узле-портах от POD-службы INGRESS-NGINX (MIE было 80: 32476 /443: 31967 Несомненно
Примечание: Обязательно используйте Passthrough для протокола HTTPS.
- Далее настроители настроек Goto и отредактируйте проверки здоровья, обновите правило для использования TCP И укажите капельки на узле порта сопоставленного к порту 80 из службы POD Ingress-Nginx (My был 80: 32476 )
Теперь вы можете посетить IP-файл BALANCER BALANCER, и вы должны увидеть «Backend по умолчанию — 404», который представляет собой круглое подключение ROBIN для всех рабочих узлов. Ура!!! Теперь вы можете настроить свой домен, например, «example.com», чтобы указать на IP-балансировщик нагрузки.
Простое развертывание
Чтобы проверить, работает ли наш кластер и развертывание в порядке, давайте разверним простой сервер Echo.
Гистовый код
Теперь посетите echo. [Yourdomain.com], вы должны увидеть следующее:
Если вы здесь, хорошо сделано.
Заключение
Вы сделали это так далеко, спасибо, что придерживаются меня до этого момента Отказ Далее на сериале, я пишу, как добавить Постоянная тома поддержки поддерживается, используя 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»