Рубрики
Uncategorized

Нацеливание кластера Кубератесов с тестом Гремлина Хаоса

Gremllin — ведущая программная компания, ориентированная на хаос-тестирование на рынке. У этого также есть инструмент Simila … Теги с DevOps, Docker, Kubernetes.

Гремлин — ведущая программная компания, ориентированная на 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   Ready       59m   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»