Организации все чаще ищут контейнеры и распределенные приложения для обеспечения ловкости и масштабируемости, необходимые для удовлетворения своих клиентов. При этом современные предприятия также нужны способность ориентировать их приложение и знать о некоторых метриках по отношению к их инфраструктуре.
В этом посте я представляю вас к облачному инструменту на скамейке, известный как Кубстон Отказ Этот инструмент предназначен для поддержки ваших команд развития с получением показателей производительности из ваших кластеров Kubernetes.
У этого ядро, Kubestone реализован как Оператор Кубернетика в Иди язык С помощью Kubebuilder Отказ Вы можете найти больше информации о рамок оператора через Этот блог пост Отказ
Kubestone использует ориентиры с открытым исходным кодом для измерения ядра Kubernetes и производительности приложений. Поскольку тесты выполнены в Kubernetes, они должны быть контейнерными для работы над кластером. Сертифицированный набор тестовых контейнеров предоставляется через Космическое пространство Xridge’s Dockerhub Отказ Вот список тестов поддерживаемых в настоящее время:
| Core / CPU | Поддерживается | Sysbench. |
| Core / Disc. | Поддерживается | файва |
| Core / Disc. | Поддерживается | yoping. |
| Core / Memory. | Поддерживается | Sysbench. |
| Core / Network | Поддерживается | iperf3. |
| Core / Network | Поддерживается | Qperf. |
| HTTP Last Tester. | Поддерживается | дрель |
| Приложение / etcd. | Запланировано | etcd. |
| Приложение / K8S. | Запланировано | куберперф |
| Приложение / PostgreSQL | Поддерживается | усадьба |
| Приложение / искра | Запланировано | Sparkbench. |
Давайте попробуем установить KUBESTONE и запустить позоров самих и посмотреть, как это работает.
Требования
- Кубернаны v1.13 (или новее)
- Kustomize v3.1.0
- Привилегии кластера администратора
Развернуть Кубстоун к Kubestone-System пространство имен со следующей командой:
$ kustomize build github.com/xridge/kubestone/config/default | kubectl create -f -
После развертывания Kubestone будет слушать пользовательские ресурсы, созданные с kubestone.xridge.io группа.
Бенчмаркинг
Тесты могут быть выполнены через KUBESTONE, создавая пользовательские ресурсы в вашем кластере.
Пространство имен
Рекомендуется создать выделенное пространство имен для сравнительного анализа.
$ kubectl create namespace kubestone
После создания пространства имен вы можете использовать его, чтобы опубликовать контрольный запрос к кластеру.
Результирующие контрольные исполнения будут проживать в этом пространстве имен.
Пользовательский рендеринг ресурсов
Мы будем использовать Kustomize Чтобы сделать пользовательский ресурс из Репозиторий GitHub Отказ
Kustomize занимает База Ямл и патчи с Накладной файл Чтобы сделать финальный файл yaml, который описывает ориентир.
$ kustomize build github.com/xridge/kubestone/config/samples/fio/overlays/pvc
Пользовательский ресурс (отображаемый YAML) выглядит следующим образом:
apiVersion: perf.kubestone.xridge.io/v1alpha1
kind: Fio
metadata:
name: fio-sample
spec:
cmdLineArgs: --name=randwrite --iodepth=1 --rw=randwrite --bs=4m --size=256M
image:
name: xridge/fio:3.13
volume:
persistentVolumeClaimSpec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
volumeSource:
persistentVolumeClaim:
claimName: GENERATED
Когда мы создаем этот ресурс в Kubernetes, оператор интерпретирует его и создает связанный ориентир. Поля пользовательского ресурса контролирует, как будет выполнена эталон:
metadata.name: Определяет пользовательский ресурс. Позже это можно использовать для запроса или удаления ориентира в кластере.Cmdlineargs: Аргументы прошли к ориентированию. В этом случае мы предоставляем аргументы Файва (ориентир файловой системы). Он указывает на тестовое значение для выполнения случайный тест на запись с 4 МБ размера блока с общим количеством передачи 256 МБ.image.name: Описывает изображение докера теста. В случае Файва мы используем Fio Docker XRIDGE , который построен из Это репозиторий .Volume.PersistentVolumeclaimspec: Учитывая, что Fio — это ориентир диска, мы можем установить PersiStentVolumeclaim для эталона для выполнения. Вышеуказанная установка поручает Kubernetes принимать 1 ГБ пространства от STORAGECLASS по умолчанию и использовать его для теста.
Теперь, как мы понимаем определение теста, мы можем попытаться выполнить его.
Примечание. Убедитесь, что вы установили оператор KUBESTONE и запустите его перед выполнением этого шага Отказ
$ kustomize build github.com/xridge/kubestone/config/samples/fio/overlays/pvc | kubectl create --namespace kubestone -f -
Так как мы трудим вывод Kustomize Build команда в kubectl Создайте , он создаст объект в наших кластере Kubernetes.
Полученный объект можно запросить с помощью типа объекта ( Fio ), и это имя ( Fio-образец ):
$ kubectl describe --namespace kubestone fio fio-sample Name: fio-sample Namespace: kubestone Labels:Annotations: API Version: perf.kubestone.xridge.io/v1alpha1 Kind: Fio Metadata: Creation Timestamp: 2019-09-14T11:31:02Z Generation: 1 Resource Version: 31488293 Self Link: /apis/perf.kubestone.xridge.io/v1alpha1/namespaces/kubestone/fios/fio-sample UID: 21cdbe92-d6e3-11e9-ba70-4439c4920abc Spec: Cmd Line Args: --name=randwrite --iodepth=1 --rw=randwrite --bs=4m --size=256M Image: Name: xridge/fio:3.13 Volume: Persistent Volume Claim Spec: Access Modes: ReadWriteOnce Resources: Requests: Storage: 1Gi Volume Source: Persistent Volume Claim: Claim Name: GENERATED Status: Completed: true Running: false Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Created 11s kubestone Created /api/v1/namespaces/kubestone/configmaps/fio-sample Normal Created 11s kubestone Created /api/v1/namespaces/kubestone/persistentvolumeclaims/fio-sample Normal Created 11s kubestone Created /apis/batch/v1/namespaces/kubestone/jobs/fio-sample
Как События Секция показывает, Kubestone создал Configmap. , a PersiStentVolumeclaim и а Работа для предоставленного пользовательского ресурса. Статус Поле говорит нам, что тест завершен.
Проверка ориентира
Созданные объекты, связанные с ориентиром, могут быть перечислены с использованием kubectl команда:
$ kubectl get pods,jobs,configmaps,pvc --namespace kubestone NAME READY STATUS RESTARTS AGE pod/fio-sample-bqqmm 0/1 Completed 0 54s NAME COMPLETIONS DURATION AGE job.batch/fio-sample 1/1 15s 54s NAME DATA AGE configmap/fio-sample 0 54s NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE persistentvolumeclaim/fio-sample Bound pvc-b3898236-c698-11e9-8071-4439c4920abc 1Gi RWO rook-ceph-block 54s
Как показано выше, Fio Controller создал PersiStentVolumEclaim и конфигурацию, которая используется работой Fio во время исполнения эталона. Работа Fio имеет ассоциированный POD, который содержит наше тестовое исполнение. Результаты пробега могут быть показаны с Kubectl Logs команда:
$ kubectl logs --namespace kubestone fio-sample-bqqmm
randwrite: (g=0): rw=randwrite, bs=(R) 4096KiB-4096KiB, (W) 4096KiB-4096KiB, (T) 4096KiB-4096KiB, ioengine=psync, iodepth=1
fio-3.13
Starting 1 process
randwrite: Laying out IO file (1 file / 256MiB)
randwrite: (groupid=0, jobs=1): err= 0: pid=47: Sat Aug 24 17:58:10 2019
write: IOPS=470, BW=1882MiB/s (1974MB/s)(256MiB/136msec); 0 zone resets
clat (usec): min=1887, max=2595, avg=2042.76, stdev=136.56
lat (usec): min=1953, max=2688, avg=2107.35, stdev=142.94
clat percentiles (usec):
| 1.00th=[ 1893], 5.00th=[ 1926], 10.00th=[ 1926], 20.00th=[ 1958],
| 30.00th=[ 1991], 40.00th=[ 2008], 50.00th=[ 2024], 60.00th=[ 2040],
| 70.00th=[ 2057], 80.00th=[ 2073], 90.00th=[ 2114], 95.00th=[ 2409],
| 99.00th=[ 2606], 99.50th=[ 2606], 99.90th=[ 2606], 99.95th=[ 2606],
| 99.99th=[ 2606]
lat (msec) : 2=34.38%, 4=65.62%
cpu : usr=2.22%, sys=97.78%, ctx=1, majf=0, minf=9
IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
issued rwts: total=0,64,0,0 short=0,0,0,0 dropped=0,0,0,0
latency : target=0, window=0, percentile=100.00%, depth=1
Run status group 0 (all jobs):
WRITE: bw=1882MiB/s (1974MB/s), 1882MiB/s-1882MiB/s (1974MB/s-1974MB/s), io=256MiB (268MB), run=136-136msec
Disk stats (read/write):
rbd7: ios=0/0, merge=0/0, ticks=0/0, in_queue=0, util=0.00%
Листинг тестов
Мы узнали, что Kubestone использует пользовательские ресурсы для определения ориентиров. Мы можем перечислить установленные пользовательские ресурсы, используя Kubectl Получить CRD команда:
$ kubectl get crds | grep kubestone drills.perf.kubestone.xridge.io 2019-09-08T05:51:26Z fios.perf.kubestone.xridge.io 2019-09-08T05:51:26Z iopings.perf.kubestone.xridge.io 2019-09-08T05:51:26Z iperf3s.perf.kubestone.xridge.io 2019-09-08T05:51:26Z pgbenches.perf.kubestone.xridge.io 2019-09-08T05:51:26Z sysbenches.perf.kubestone.xridge.io 2019-09-08T05:51:26Z
Использование названий CRD выше, мы можем перечислить выполненные тесты в системе.
Kubernetes предоставляет удобную функцию в отношении CRD: можно использовать укороченное имя CRD, которое является сингулярной частью полностью квалифицированного названия CRD. В нашем случае fios.perf.kubestone.xridge.io Можно сократить до Fio Отказ Следовательно, мы можем перечислить выполненные Fio Эталон, используя следующую команду:
$ kubectl get --namespace kubestone fios.perf.kubestone.xridge.io NAME RUNNING COMPLETED fio-sample false true
Убираться
После успешного эталона выполняется полученные объекты, хранятся в кластере Kubernetes. Учитывая, что Kubernetes может содержать ограниченное количество стручков в системе, рекомендуется, чтобы пользователь очистил тест на протяжении времени. Это может быть достигнуто путем удаления пользовательского ресурса, который инициировал эталон:
$ kubectl delete --namespace kubestone fio fio-sample
Поскольку пользовательский ресурс имеет право собственности на созданные ресурсы, основные стручки, задания, конфигурации, ПВХ и т. Д., также удаляются этой операцией.
Теперь вы знакомы с ключевыми понятиями Кубстона, пришло время исследовать и ориентировать. Вы можете играть с Fio Benchmark через это Cmdlineargs , Постоянный объем и планирование связанных настроек. Вы можете найти больше информации об этом на странице Benchmark Fio. Надеюсь, вы набрали некоторые ценные знания с этого поста!
Оригинал: «https://dev.to/appfleet/cloud-native-benchmarking-with-kubestone-107m»