Гремлин — ведущая программная компания, ориентированная на Chaos-test в магазине. У него также есть инструмент, похожий на Хаос обезьяна который принадлежит Netflix, но более настроен для проверки системы случайных нагрузок или запланированных отключений. В статье ниже мы будем тестировать простые кластер Kubernetes, работающих на EKS с тестом Chaos.
Chaos Engineering используется для улучшения системной устойчивости. Гремлин «Ошибка как служба» помогает найти слабые стороны в системе до возникновения проблем.
Обзор
Чтобы успешно испытать хаос Инжиниринг с Гремлином, во-первых, у нас есть два требования: бегущий кластер EKS и два приложения, развернутые для EKS. Этот учебник помогает производить требования и создать сценарий для «моделирования атаки с Гремлем».
- Шаг 1 — Подготовьте облачность IDE
- Шаг 2 — Создать кластер EKS с помощью Eksctl
- Шаг 3 — Развернуть приборную панель Kubernetes
- Шаг 4 — Установите Гремлин с помощью Helm
- Шаг 5 — Разверните приложение Microvice Demo
- Шаг 6 — Запустите атаку контейнера отключения с помощью Gremlin
Предварительные условия
1.AN AWS Account 2.А Гремлинский счет, который может быть зарегистрирован из здесь
Во-первых, давайте начнем создавать среду Cloud9. Войдите в свою учетную запись AWS и навигайтесь на Page Cloud9 на службу. Нажмите на Получить Начал и введите имя с чем угодно, в этом примере мы выбрали Чистый Гремлин . Держите все настройки по умолчанию, поскольку они указаны, поскольку нужно только для достижения ресурсов EKS.
Подождите некоторое время для новой консоли для создания. Затем закройте все терминалы, чтобы открыть новый.
Чтобы начать создание кластера, сначала проверьте, установлен ли AWS CLI или нет с командой ниже:
Administrator:~/environment $ aws --version aws-cli/1.17.5 Python/2.7.16 Linux/4.14.158-101.185.amzn1.x86_64 botocore/1.14.5 Administrator:~/environment $
1. Мы будем использовать Экктл создавать наши кластеры EKS.
curl --silent --location "https://github.com/weaveworks/eksctl/releases/download/latest_release/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp sudo mv -v /tmp/eksctl /usr/local/bin
2. Производитель Экктл исполняемый
Administrator:~/environment $ sudo chmod +x /usr/local/bin/eksctl Administrator:~/environment $
3. Подтвердите ли Экктл Команда работает:
Administrator:~ $ eksctl version
[ℹ] version.Info{BuiltAt:"", GitCommit:"", GitTag:"0.13.0"}
Administrator:~ $
4. Разведка Мы создаем кластер с именем Гремлин-Экктл с тремя узлами EC2. Просто слово предупреждения — EKS может стоить много, поэтому, пожалуйста, не забудьте удалить ваши ресурсы после того, как вы сделали с вашим тестом с отказом.
eksctl create cluster --name=gremlin-eksctll --nodes=3 --managed --alb-ingress-access --region=${AWS_REGION}
Он может занять около 15-30 минут, чтобы подготовиться, что вы можете кластеризовать на странице обслуживания EKS.
Бросить кончик — плата в EKS составляет 0,20 долл./Ч и плата в EC2 с типом экземпляра M5.LARGE, что EKS работает на 0,096 $/ч. Оценка общей стоимости в день составит около 11-12 $.
5. Проверка кластера, работает ли он и получать его статус. Как и ожидалось, создан только один кластер.
Administrator:~/environment $ eksctl get clusters NAME REGION gremlin-eksctl us-east-1 Administrator:~/environment $
6. Управлять KubeConfig Файл, предоставив имя кластера и региона через AWS CLI Tool.
Administrator:~/environment $ sudo aws eks --region us-east-1 update-kubeconfig --name gremlin-eksctl Updated context arn:aws:eks:us-east-1:312867154612:cluster/gremlin-eksctl in /root/.kube/config Administrator:~/environment $
7.Не проверка мы видим 3 узла в кластере. Двое из них — это узлы рабочие, в то время как третий — узел Master-Management Management.
Administrator:~/environment $ kubectl get nodes NAME STATUS ROLES AGE VERSION ip-192-168-14-59.ec2.internal Ready59m v1.14.7-eks-1861c5 ip-192-168-33-12.ec2.internal Ready 58m v1.14.7-eks-1861c5 ip-192-168-49-55.ec2.internal Ready 58m v1.14.7-eks-1861c5 Administrator:~/environment $
Далее мы бы развернули панель инструментов Kubernetes в кластер Kubernetes, используя Heappster и Приключите Отказ Эти два инструмента помогут нашему образцу приложения для отображения на приборной панели. Мы начнем с развертывания нашей панели инструментов Kubernetes в качестве первого шага.
Heappster Система коллекции мониторинга производительности и метрики, совместимая с Kubernetes (версии 1.0.6 и выше). Это позволяет набрать не только метрики производительности о ваших рабочих нагрузках, стручках и контейнерах, но и событиях и других сигналах, созданных вашим кластером. Великая вещь о Heatpster заключается в том, что он полностью открытый источник как часть проекта Kubernetes и поддерживает множество брюк для сохранения данных, в том числе и не ограничивается , Приключите , Elasticsearch и Графит Отказ
SOUTUUXDB — это база данных серии Time, предназначенная для обработки больших объемов записи и нагрузок запросов.
1. Развертывание приборной панели Kubernetes к вашим кластере EKS:
Administrator:~/environment $ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml secret/kubernetes-dashboard-certs created serviceaccount/kubernetes-dashboard created role.rbac.authorization.k8s.io/kubernetes-dashboard-minimal created rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard-minimal created deployment.apps/kubernetes-dashboard created service/kubernetes-dashboard created Administrator:~/environment $
2. Задача доступа к кластеру дается, поскольку он развернут в нашем частном кластере, пока нам нужно получить доступ к нему через прокси. Это можно сделать через Kube-Proxy как предпочтительный прокси-инструмент. В вашем рабочем пространстве запустите следующую команду:
Administrator:~/environment $ kubectl proxy --port=8080 --address='0.0.0.0' --disable-filter=true & [1] 336 Administrator:~/environment $ W0125 10:28:19.746961 336 proxy.go:140] Request filter disabled, your proxy is vulnerable to XSRF attacks, please be cautious Starting to serve on [::]:8080 Administrator:~/environment $
3. Развертывание Heappster :
Administrator:~/environment $ kubectl apply -f https://raw.githubusercontent.com/kubernetes/heapster/master/deploy/kube-config/influxdb/heapster.yaml serviceaccount/heapster created deployment.extensions/heapster created service/heapster created Administrator:~/environment $
4. Развертывание Приключите :
Administrator:~/environment $ kubectl apply -f https://raw.githubusercontent.com/kubernetes/heapster/master/deploy/kube-config/influxdb/influxdb.yaml deployment.extensions/monitoring-influxdb created service/monitoring-influxdb created Administrator:~/environment $
5. Скрещивание Heappster Кластерная роль связывания для приборной панели.
Administrator:~/environment $ kubectl apply -f https://raw.githubusercontent.com/kubernetes/heapster/master/deploy/kube-config/rbac/heapster-rbac.yaml clusterrolebinding.rbac.authorization.k8s.io/heapster created Administrator:~/environment $
6. Следующий шаг — создать EKS-Admin Сервисная учетная запись. Это позволит вам подключиться к приборной панели Kubernetes с админ Разрешения.
Для аутентификации и использования приборной панели Kubernetes:
Administrator:~/environment $ kubectl apply -f https://raw.githubusercontent.com/tammybutow/eks-aws/master/eks-admin-service-account.yaml serviceaccount/eks-admin created clusterrolebinding.rbac.authorization.k8s.io/eks-admin created Administrator:~/environment $
7. Для доступа к приборной панели Kubernetes: а- В вашей среде Cloud9 нажмите Инструменты> Предварительный просмотр> Предварительный просмотр Запуск приложения Чтобы открыть URL приборной панели. b- Добавьте следующее в конец URL:
/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/
8. Открывайте новую вкладку терминала на Cloud9 и введите следующее:
aws eks get-token --cluster-name gremlin-eksctl | jq -r '.status.token'
9.Выберите Токен И затем скопируйте вывод команды выше и вставьте ее в текстовое поле, как показано ниже:
1. Загрузить сертификаты вашего Гремлина: Начните с подписания на ваш счет на Гремлин. Если у вас нет одного, создайте учетную запись здесь Отказ
Перейдите к Настройки команды и нажмите на ваш Команда . Нажмите на Скачать Кнопка для загрузки и сохранения сертификатов на свой локальный диск. Обратите внимание, что загруженные Сертификат .zip Содержит как Сертификат открытого ключа и соответствие Частный ключ Отказ
Расстегнуть Сертификат .zip И сохранить его к вашей папке Гремлин на рабочем столе. Переименуйте свой сертификат как gremlin.cert и ключевые файлы как gremlin.key Отказ
2. Распространение пространства имен Гремлина:
Administrator:~/environment $ kubectl create namespace gremlin namespace/gremlin created Administrator:~/environment $
Создайте секрет Kubernetes для вашего сертификата и закрытого ключа, скопируйте gremlin.cert. и gremlin.key на облачность9. Быстрый совет должен создать их редактором VIM вместо копирования с вашего локального компьютера.
Administrator:~/environment $ kubectl create secret generic gremlin-team-cert \ > \--namespace=gremlin \ > \--from-file=/home/ec2-user/environment/gremlin.cert \ > \--from-file=/home/ec2-user/environment/gremlin.key secret/gremlin-team-cert created Administrator:~/environment $
Проверьте файлы на приборной панели, развернуты ли они.
3. Учреждение с Хелм
Самый простой способ установки клиента Gremllin на кластере Kubernetes — использовать Helm. Как только HELM установлен и настроен, следующие шаги будут добавлять Гремль репо и установить клиент.
A. Учталлирование исходного кода HELM и сделать его исполняемым исполнением:
Administrator:~/environment $ curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get > get_helm.sh
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 7164 100 7164 0 0 45630 0 --:--:-- --:--:-- --:--:-- 45341
Administrator:~/environment $
Administrator:~/environment $ chmod +x get_helm.sh
Administrator:~/environment $
Administrator:~/environment $ ./get_helm.sh
Downloading https://get.helm.sh/helm-v2.16.1-linux-amd64.tar.gz
Preparing to install helm and tiller into /usr/local/bin
helm installed into /usr/local/bin/helm
tiller installed into /usr/local/bin/tiller
Run 'helm init' to configure helm.
Administrator:~/environment $
B.Configurging Helm для доступа к RBAC
Хелм полагается на сервис под названием Олично Что требует специального разрешения на кластере Kubernetes, для которых нам нужно будет построить Сервисная учетная запись Для использования Олично Отказ Следующим шагом является затем применить этот RBAC в кластер.
C.Creating Новая учетная запись услуг:
Administrator:~/environment $ cat <~/environment/rbac.yaml > --- > apiVersion: v1 > kind: ServiceAccount > metadata: > name: tiller > namespace: kube-system > --- > apiVersion: rbac.authorization.k8s.io/v1beta1 > kind: ClusterRoleBinding > metadata: > name: tiller > roleRef: > apiGroup: rbac.authorization.k8s.io > kind: ClusterRole > name: cluster-admin > subjects: > - kind: ServiceAccount > name: tiller > namespace: kube-system > EoF Administrator:~/environment $
D.applying Configurations:
Administrator:~/environment $ kubectl apply -f ~/environment/rbac.yaml serviceaccount/tiller created clusterrolebinding.rbac.authorization.k8s.io/tiller created Administrator:~/environment $
E. Установка Олично для Хелм :
Орех
Компонент сервера компаньона, Олично , что работает на кластере Kubernetes, слушает команды из Хелм и обрабатывает конфигурацию и развертывание выбросов программного обеспечения на кластере.
Administrator:~/environment $ helm init --service-account tiller Creating /home/ec2-user/.helm Creating /home/ec2-user/.helm/repository Creating /home/ec2-user/.helm/repository/cache Creating /home/ec2-user/.helm/repository/local Creating /home/ec2-user/.helm/plugins Creating /home/ec2-user/.helm/starters Creating /home/ec2-user/.helm/cache/archive Creating /home/ec2-user/.helm/repository/repositories.yaml Adding stable repo with URL: https://kubernetes-charts.storage.googleapis.com Adding local repo with URL: http://127.0.0.1:8879/charts $HELM_HOME has been configured at /home/ec2-user/.helm. Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster. Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy. To prevent this, run `helm init` with the --tiller-tls-verify flag. For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation Administrator:~/environment $
Это будет установить Олично в кластер и даст доступ Управляемые ресурсы в вашем кластере. Обратите внимание, что предупреждение политики безопасности, как показано выше, что вы можете не стесняться игнорировать или следовать согласно вашим настройкам политики.
Ф.Активирование Bash-завершения для Helm:
Administrator:~/environment $ helm completion bash >> ~/.bash_completion Administrator:~/environment $ . /etc/profile.d/bash_completion.sh Administrator:~/environment $ . ~/.bash_completion Administrator:~/environment $
G. Чтобы запустить HELM Unlight, вам понадобится идентификатор команды Gremll. Это можно найти в приложении Гремлина на Настройки команды Страница, где вы загрузили свои сертификаты ранее. Нажмите на свой Команда в списке. Идентификатор, который вы ищете, можно найти под Конфигурация как Идентификатор команды Отказ
H.Export Ваша команда ID как окружающая среда Переменная:
Administrator:~/environment $ export GREMLIN_TEAM_ID=13ba2df0-5b0b-572c-a479-8136af79da66 Administrator:~/environment $
I.next, экспортируйте свой кластерный идентификатор, предоставив имя для вашего кластера Kubernetes.
Administrator:~/environment $ export GREMLIN_CLUSTER_ID=boraozkanchaos Administrator:~/environment $
J.now Добавить Gremlin Helm Repo и установите Гремлин:
Administrator:~/environment $ helm repo add gremlin https://helm.gremlin.com "gremlin" has been added to your repositories Administrator:~/environment $
Administrator:~/environment $ helm install gremlin/gremlin \ > \--namespace gremlin \ > \--name gremlin \ > \--set gremlin.teamID=$GREMLIN_TEAM_ID \ > \--set gremlin.clusterID=$GREMLIN_CLUSTER_ID NAME: gremlin LAST DEPLOYED: Sat Jan 25 12:37:45 2020 NAMESPACE: gremlin STATUS: DEPLOYED RESOURCES: ==> v1/ClusterRole NAME AGE gremlin-watcher 0s ==> v1/ClusterRoleBinding NAME AGE chao 0s ==> v1/DaemonSet NAME AGE gremlin 0s ==> v1/Deployment NAME AGE chao 0s ==> v1/Pod(related) NAME AGE chao-698b9fbfb4-5thjp 0s gremlin-425wv 0s gremlin-krdlt 0s gremlin-l252z 0s ==> v1/ServiceAccount NAME AGE chao 0s Administrator:~/environment $
Демо-окружающая среда, которую мы собираемся развернуть на наш кластер EKS, это Хипстерский магазин: облако-нативные микросервисы демонстрационные приложения
1.клона REPO исходного кода приложения:
Administrator:~/environment $ git clone https://github.com/GoogleCloudPlatform/microservices-demo.git Cloning into 'microservices-demo'... remote: Enumerating objects: 30, done. remote: Counting objects: 100% (30/30), done. remote: Compressing objects: 100% (21/21), done. remote: Total 2987 (delta 16), reused 16 (delta 7), pack-reused 2957 Receiving objects: 100% (2987/2987), 5.08 MiB | 38.24 MiB/s, done. Resolving deltas: 100% (2039/2039), done. Administrator:~/environment $
2.Чейте каталог только для того, чтобы только создал:
Administrator:~/environment $ cd microservices-demo/ Administrator:~/environment/microservices-demo (master) $
3. Развертывание приложения:
Administrator:~/environment/microservices-demo (master) $ kubectl apply -f ./release/kubernetes-manifests.yaml deployment.apps/emailservice created service/emailservice created deployment.apps/checkoutservice created service/checkoutservice created deployment.apps/recommendationservice created service/recommendationservice created deployment.apps/frontend created service/frontend created service/frontend-external created deployment.apps/paymentservice created service/paymentservice created deployment.apps/productcatalogservice created service/productcatalogservice created deployment.apps/cartservice created service/cartservice created deployment.apps/loadgenerator created deployment.apps/currencyservice created service/currencyservice created deployment.apps/shippingservice created service/shippingservice created deployment.apps/redis-cart created service/redis-cart created deployment.apps/adservice created service/adservice created Administrator:~/environment/microservices-demo (master) $
4. Вонте, пока стручки не находятся в состоянии готовности.
Administrator:~/environment/microservices-demo (master) $ kubectl get pods NAME READY STATUS RESTARTS AGE adservice-84449b8756-qj4sp 1/1 Running 0 4m57s cartservice-6cbc9b899c-ww5rf 1/1 Running 0 4m58s checkoutservice-56b48b77c8-fszpx 1/1 Running 0 4m58s currencyservice-b9fcb4c98-hx9kq 1/1 Running 0 4m58s emailservice-797cdcc76d-d257v 1/1 Running 0 4m58s frontend-785c44fd98-zvgj4 1/1 Running 0 4m58s loadgenerator-665c4ddb74-xwm8m 1/1 Running 3 4m58s paymentservice-84d7bf956-fdgxr 1/1 Running 0 4m58s productcatalogservice-5664f59f54-b5mk5 1/1 Running 0 4m58s recommendationservice-7f9855d7c6-b2zv6 1/1 Running 0 4m58s redis-cart-6448dcbdcc-97d55 1/1 Running 0 4m58s shippingservice-6b6f49747d-svb5f 1/1 Running 0 4m58s Administrator:~/environment/microservices-demo (master) $ \
5. Получение IP-адреса Frontend:
Administrator:~/environment/microservices-demo (master) $ kubectl get svc frontend-external -o wide NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR frontend-external LoadBalancer 10.100.226.157 a0c9bed9a3f7111eab7c912c03cd100e-265884000.us-east-1.elb.amazonaws.com 80:30461/TCP 6m31s app=frontend Administrator:~/environment/microservices-demo (master) $
6.Висит URL на вашем браузере:
Мы собираемся создать наш первый инженерный эксперимент Chaos, где мы проверим надежность EKS. Наша гипотеза: «После закрытия моей Cart Service Контейнер, мы не будем страдать от простоя, и Екс даст нам новый».
Возвращаясь к интермлему UI, выберите Атаки Из меню слева и выберите Новая атака Отказ Мы собираемся нацелить ресурс Kubernetes, поэтому нажмите на Кубернаны в правом верхнем углу.
Выберите Cartservice :
Выберите Государство и отключение :
Атакующий этот стручок с нашим Gremlin UI:
Мы будем закрывать Cartservice контейнеры. Как тест, мы дважды атаковали, и картсервисные стручки перезапустили себя. Что означает, что он работает, как ожидалось. Обратите внимание, что он повторно генерирует себя, даже когда вы атакуете, чтобы выключить стручки.
Когда мы атаковали наши контейнеры, кластер сопротивлялся неудачу и перезапустить себя, что символизирует, что наша система теперь устойчива к неудаче. Мы видели, что произойдет, когда происходит неудача, в этом примере отказ закрывает стручки. В результате мы понимаем, что наш кластер уже имеет функцию автоматической масштабирования.
Как напоминание; Не забудьте удалить свой кластер и Облако 9 IDE.
eksctl delete cluster --name=gremlin-eksctl
Поздравляю! Вы установили кластер AWS EKS, развернул приборную панель Kubernetes, развернул демонстрационную прикладное приложение Microservice, установил агент Gremllin в качестве набора демона и запустил свою первую инженерную атаку Chaos для проверки надежности Kubernetes!
Оригинал: «https://dev.to/appfleet/targeting-kubernetes-cluster-with-gremlin-chaos-test-5f59»