Как перестать отдавать деньги AWS, запустив KubeCF с Kind на MacOS

Как перестать отдавать деньги AWS, запустив KubeCF с Kind на MacOS

6 июня 2022 г.

Фото Алекса Горцена на Flickr

Больше лайма, больше кокосов

В предыдущих сообщениях блога я рассмотрел, как развернуть KubeCF на EKS, что дает вам хорошее стабильное развертывание KubeCF, недостатком которого является то, что вы платите деньги за каждый час его работы на AWS.

Я привык давать деньги Amazon, но обычно получаю взамен небольшую картонную коробку каждые несколько дней.

Итак, как запустить KubeCF на своем Mac бесплатно? Настройтесь ниже.

Впереди драконы

На вашем устройстве с Apple MacOS должно быть установлено не менее 16 ГБ памяти. При установке будет использоваться около 11 ГБ памяти после полного запуска.

Установка ненадежна и временами разочаровывает, она больше ориентирована на операторов, которые пробуют работать на платформе, такие как тестирование пользовательских сборок, взлом запросов к базе данных и другие потенциально разрушительные действия. Установка НЕ ​​выдерживает перезагрузки и становится очень хрупкой после 24+ часов работы. Это не вина KubeCF, при запуске на EKS он продолжит работать без проблем. Вас предупредили!

Обзор установки

Следующие несколько разделов в значительной степени заимствованы из https://www.thehumblelab.com/kind-and-metallb. -on-mac/, я рекомендую вам просмотреть этот документ, чтобы понять, зачем нужна прокладка tuntap и как проверить конфигурацию для metallb.

Установка Homebrew и Docker Desktop

Я не буду вдаваться в подробности, так как эти инструменты, скорее всего, уже установлены:

* Homebrew (полная информация здесь: https://docs.brew.sh/Installation) или просто запустите:

   /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

* Docker Desktop (подробные сведения об установке приведены по адресу: https://docs.docker.com/desktop/mac/install/ ) или запустите:

   brew install --cask docker
   # Then launch docker from Applications to complete the install and start docker

Установите tuntap и запустите прокладку

Запуск docker в MacOS имеет некоторые «недостатки», которые можно устранить, установив сетевую оболочку для выполнения этой установки:

brew install git
brew install --cask tuntap
git clone https://github.com/AlmirKadric-Published/docker-tuntap-osx.git
cd docker-tuntap-osx

./sbin/docker_tap_install.sh
./sbin/docker_tap_up.sh

Установить вид и развернуть кластер

Сладкий и простой:

brew install kind
kind create cluster

Установите и настройте metallb

Мы будем использовать metallb в качестве ресурса LoadBalancer и откроем локальный маршрут, чтобы MacOS могла локально направлять трафик в кластер.

sudo route -v add -net 172.18.0.1 -netmask 255.255.0.0 10.0.75.2

kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.3/manifests/namespace.yaml
kubectl create secret generic -n metallb-system memberlist --from-literal=secretkey="$(openssl rand -base64 128)"
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.3/manifests/metallb.yaml

cat << EOF > metallb-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: default
      protocol: layer2
      addresses:
      - 172.18.0.150-172.18.0.200
EOF
kubectl create -f metallb-config.yaml

Установите cf-operator и разверните kubecf

brew install wget
brew install helm
brew install watch

wget https://github.com/cloudfoundry-incubator/kubecf/releases/download/v2.7.13/kubecf-bundle-v2.7.13.tgz
tar -xvzf kubecf-bundle-v2.7.13.tgz

kubectl create namespace cf-operator
helm install cf-operator 
  --namespace cf-operator 
  --set "global.singleNamespace.name=kubecf" 
  cf-operator.tgz 
 --wait

helm install kubecf 
  --namespace kubecf 
  --set system_domain=172.18.0.150.nip.io 
  --set features.eirini.enabled=false 
  --set features.ingress.enabled=false 
  --set services.router.externalIPs={172.18.0.150}
  https://github.com/cloudfoundry-incubator/kubecf/releases/download/v2.7.13/kubecf-v2.7.13.tgz

watch kubectl get pods -A

Теперь идите прогуляйтесь, потребуется 30-60 минут, чтобы диаграмма kubecf была полностью принята CRD cf-operator и запланирована для запуска. По завершении вы должны увидеть вывод, подобный следующему:

Every 2.0s: kubectl get pods -A

NAMESPACE            NAME                                         READY   STATUS      RESTARTS   AGE
cf-operator          quarks-cd9d4b96f-rtkbt                       1/1     Running     0          40m
cf-operator          quarks-job-6d8d744bc6-pmfnd                  1/1     Running     0          40m
cf-operator          quarks-secret-7d76f854dc-9wp2f               1/1     Running     0          40m
cf-operator          quarks-statefulset-f6dc85fb8-x6jfb           1/1     Running     0          40m
kube-system          coredns-558bd4d5db-ncmh5                     1/1     Running     0          41m
kube-system          coredns-558bd4d5db-zlpgg                     1/1     Running     0          41m
kube-system          etcd-kind-control-plane                      1/1     Running     0          41m
kube-system          kindnet-w4m9n                                1/1     Running     0          41m
kube-system          kube-apiserver-kind-control-plane            1/1     Running     0          41m
kube-system          kube-controller-manager-kind-control-plane   1/1     Running     0          41m
kube-system          kube-proxy-ln6hb                             1/1     Running     0          41m
kube-system          kube-scheduler-kind-control-plane            1/1     Running     0          41m
kubecf               api-0                                        17/17   Running     1          19m
kubecf               auctioneer-0                                 6/6     Running     2          20m
kubecf               cc-worker-0                                  6/6     Running     0          20m
kubecf               cf-apps-dns-76947f98b5-tbfql                 1/1     Running     0          39m
kubecf               coredns-quarks-7cf8f9f58d-msq9m              1/1     Running     0          38m
kubecf               coredns-quarks-7cf8f9f58d-pbkt9              1/1     Running     0          38m
kubecf               credhub-0                                    8/8     Running     0          20m
kubecf               database-0                                   2/2     Running     0          38m
kubecf               database-seeder-0bc49e7bcb1f9453-vnvjm       0/2     Completed   0          38m
kubecf               diego-api-0                                  9/9     Running     2          20m
kubecf               diego-cell-0                                 12/12   Running     2          20m
kubecf               doppler-0                                    6/6     Running     0          20m
kubecf               log-api-0                                    9/9     Running     0          20m
kubecf               log-cache-0                                  10/10   Running     0          19m
kubecf               nats-0                                       7/7     Running     0          20m
kubecf               router-0                                     7/7     Running     0          20m
kubecf               routing-api-0                                6/6     Running     1          20m
kubecf               scheduler-0                                  12/12   Running     2          19m
kubecf               singleton-blobstore-0                        8/8     Running     0          20m
kubecf               tcp-router-0                                 7/7     Running     0          20m
kubecf               uaa-0                                        9/9     Running     0          20m
local-path-storage   local-path-provisioner-547f784dff-r8trf      1/1     Running     1          41m
metallb-system       controller-fb659dc8-dhpnb                    1/1     Running     0          41m
metallb-system       speaker-h9lh9                                1/1     Running     0          41m

Войти и полюбоваться своим творением

Чтобы войти в систему с учетной записью пользователя admin uaa:

cf api --skip-ssl-validation "https://api.172.18.0.150.nip.io"

acp=$(kubectl get secret 
        --namespace kubecf var-cf-admin-password 
        -o jsonpath='{.data.password}' 
        | base64 --decode)

cf auth admin "${acp}"
cf create-space test -o system
cf target -o system -s test

Или, чтобы использовать учетную запись клиента smoke_tests uaa (потому что вы бунтарь или что-то в этом роде):

cf api --skip-ssl-validation "https://api.172.18.0.150.nip.io"
myclient=$(kubectl get secret 
        --namespace kubecf var-uaa-clients-cf-smoke-tests-secret 
        -o jsonpath='{.data.password}' 
        | base64 --decode)

cf auth cf_smoke_tests "${myclient}" --client-credentials
cf create-space test -o system
cf target -o system -s test

Убрать и убрать игрушки

Если вы завершили развертывание KubeCF, у вас есть два варианта:

  1. Усыпите свое творение. Запустите Docker Desktop > Панель инструментов > Выберите kind-control-place и нажмите «Стоп». Иди развлекайся, когда вернешься, нажми «Старт». Через несколько минут стручки восстановятся и станут здоровыми.
  2. Очистить. Чтобы удалить кластер и пользовательскую маршрутизацию:

   kind delete cluster
   sudo route delete 172.18.0.0
   ./sbin/docker_tap_uninstall.sh

Отладка проблем

Привыкайте видеть:

<цитата>

Ошибка запроса: получите «https://api.172.18.0.150.nip.io»: наберите tcp 172.18.0.150:443: тайм-аут ввода/вывода

Сервер API глючит, повторите попытку, убедившись, что все модули запущены, как показано в разделе Установка cf-operator и развертывание kubecf.

Продолжение

Есть вопросы? Существует отличное сообщество KubeCF, которое можно найти по адресу https://cloudfoundry.slack.com/archives/CQ2U3L6DC. kubecf-dev в Slack. Вы можете связаться со мной через @cweibel.

У меня также есть код Terraform, который будет запускать VPC + EKS + KubeCF для более постоянного решения для запуска KubeCF не на Mac, проверьте https://github.com/cweibel/example-terraform-eks/tree/main/eks_for_kubecf_v2 для более подробной информации.

Наслаждайтесь!

Также опубликовано здесь


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE