Tests unifiés et distribués avec k6 InfluxDB et Grafana
Puisque k6 est et devient un outil leader pour les tests de charge et au-delà, je suis tombé sur la création d’une preuve de concept montrant comment k6 peut être utilisé comme un binaire unique ou déployé dans Kubernetes pour faire rapport à des médias externes et visualiser la sortie sur un tableau de bord.
Objectifs
- Créez un cluster k8s local, utilisez kind et déployez Grafana, InfluxDB et k6-operator.
- Créez un binaire k6 et une image de conteneur avec xk6 pour activer l’extension InfluxDB.
- Exécutez des tests avec l’instruction binaire ainsi que l’instruction k6 et chargez/visualisez les données dans InfluxDB+Grafana.
Déploiements (cluster K8s, InfluxDB, Grafana, K6-Operator)
Vous pouvez utiliser votre cluster Kubernetes, sinon un cluster Kubernetes à 3 nœuds sera créé à l’aide de docker dans le dossier lorsque vous exécutez create_cluster.sh. Si tu n’en as pas type devous pouvez le télécharger et l’installer à partir de https://kind.sigs.k8s.io/docs/user/quick-start#installing-from-release-binaries.
~/kind-k8s$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
test-cluster-control-plane Ready control-plane 4d v1.29.2
test-cluster-worker Ready <none> 4d v1.29.2
test-cluster-worker2 Ready <none> 4d v1.29.2
test-cluster-worker3 Ready <none> 4d v1.29.2
Une fois notre cluster prêt, nous déploierons InfluxDB à l’aide de helm. Le diagramme InfluxDB Helm est extrait, mais vous pouvez déployer le vôtre. Pour démonstration en k6-demo/influxdb/values.yaml nous avons désactivé la rétention et créé un utilisateur administrateur, une organisation et un compartiment pour nos données.
...
persistence:
enabled: false
...
adminUser:
organization: "k6io"
bucket: "k6demo"
user: "admin"
....
U k6-demo/influxdb2 chemin pour publier l’installation d’InfluxDB.
helm upgrade -i influxdb .
#For installing helm repo and pull the chart
helm repo add influxdata https://helm.influxdata.com/
helm repo update
helm pull influxdata/influxdb2
Au tour de Grafana. Un schéma de volant Grafana est également en cours, mais vous pouvez développer le vôtre. Pour démonstration en k6-demo/grafana/values.yaml nous avons ajouté InfluxDB comme source de données. Un jeton pour se connecter à InfluxDB peut être obtenu.
echo $(kubectl get secret influxdb-influxdb2-auth -o “jsonpath={.data[‘admin-password’]}” — namespace default | base64 — decode)
...
datasources:
datasources.yaml:
apiVersion: 1
datasources:
- name: InfluxDB_v2_InfluxQL
type: influxdb
access: proxy
url:
jsonData:
version: Flux
organization: k6io
defaultBucket: k6demo
tlsSkipVerify: true
secureJsonData:
token: XXXXXXXXXXXXXXXXX
...
U k6-démonstration/grafano moyen d’installer gratuitement Grafana.
helm upgrade -i grafana .
#For installing helm repo and pull the chart
helm repo add grafana https://grafana.github.io/helm-charts
helm repo update
helm pull grafana/grafana
Enfin, l’opérateur k6 est sur le point d’être installé. Comme pour les cartes de gouvernail précédentes, cela a déjà été supprimé. L’opérateur sera défini sur son propre espace de noms. U k6-démo/k6-opérateur chemin de lancement pour installer gratuitement l’opérateur k6 dans k6-demo/k6-operato/values.yaml il n’y a aucun changement.
helm upgrade -i k6op .
#For installing helm repo and install the chart
helm repo add grafana https://grafana.github.io/helm-charts
helm repo update
helm install k6-operator grafana/k6-operator
Il devrait actuellement y avoir trois versions du diagramme du volant dans l’espace de noms par défaut :
$ helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
grafana default 2 2024–04–22 11:57:00.020214806 +0300 EEST deployed grafana-7.3.9 10.4.1
influxdb default 1 2024–04–22 11:51:39.055935661 +0300 EEST deployed influxdb2–2.1.2 2.7.4
k6op default 1 2024–04–22 13:28:25.528475219 +0300 EEST deployed k6-operator-3.6.0 0.0.14
$ kubectl get ns
NAME STATUS AGE
default Active 4d1h
k6op-system Active 3h49m
kube-node-lease Active 4d1h
kube-public Active 4d1h
kube-system Active 4d1h
local-path-storage Active 4d1h
Créer une image binaire et conteneur avec extension (xk6, Dockerfiles et binaire k6)
Puisque nous avons déjà notre infrastructure, nous devons construire une version binaire k6 qui aura l’extension InfluxDB. Voici xk6 construisant un client k6 avec des extensions.
Le script qui appelle la commande docker qui construira ledit binaire est en place et le livrera au répertoire courant.
Commande Docker qui installera l’extension influxdb version 0.4.2. Pour vérifier que l’extension est installée, exécutez ./k6 –version
$ docker run --rm -it -u "$(id -u):$(id -g)" -v "${PWD}:/xk6" grafana/xk6 build v0.43.1 \
--with github.com/grafana/[email protected]
$ ls -ltr
total 38668
drwxr-xr-x 4 igiannakopoulos igiannakopoulos 4096 Apr 22 10:39 influxdb2
drwxr-xr-x 5 igiannakopoulos igiannakopoulos 4096 Apr 22 10:46 grafana
-rwxr-xr-x 1 igiannakopoulos igiannakopoulos 39571456 Apr 22 11:21 k6
drwxr-xr-x 4 igiannakopoulos igiannakopoulos 4096 Apr 22 13:25 k6-operator
-rw-r--r-- 1 igiannakopoulos igiannakopoulos 154 Apr 22 14:32 xk6_k6.sh
drwxr-xr-x 2 igiannakopoulos igiannakopoulos 4096 Apr 22 15:29 k6-operator-data
-rw-r--r-- 1 igiannakopoulos igiannakopoulos 601 Apr 22 15:56 test.js
$ ./k6 --version
k6 v0.48.0 (go1.21.6, linux/amd64)
Extensions:
github.com/grafana/xk6-output-influxdb v0.4.2, xk6-influxdb [output]
Pour Kubernetes, nous créerons une image personnalisée et la téléchargerons sur notre cluster Kubernetes. https://github.com/giannakopoulosj/k6-demo/blob/main/k6-operator-data/Dockerfile
À l’aide d’une construction de conteneur en plusieurs étapes, nous construisons le binaire k6 avec l’extension InfluxDB et enfin le copions dans l’image Alpine simple. Dans k6-demo/k6-operator-data créez l’image et téléchargez-la sur le cluster k8s. Puisque nous utilisons kind pour la démo, nous devons le télécharger sur le cluster.
$ docker build . -t customk6:0.0.1
$ kind load docker-image -n test-cluster k6custom:0.0.1
Exécutez des tests localement et avec l’opérateur K8s
Dans le dossier k6-demo/k6-operator-data, nous avons test.js et téléchargeons la sortie sur InfluxDB. La redirection de port sera utilisée pour connecter notre machine hôte à Kubernetes. L’extension nécessite trois variables d’environnement pour InfluxDB, qui attendent les entrées Organisation, Cache et Marqueur. -o redirigera la sortie vers xk6-influxdb= vers localhost, que nous pointons vers InfluxDB dans Kubernetes.
import http from 'k6/http';
import { check } from 'k6';
export const options = {
stages: [
{ target: 200, duration: '30s' },
{ target: 50, duration: '30s' },
{ target: 0, duration: '30s' },
],
};
export default function () {
let tags = { testid: '10' };
const result = http.get(' tags});
check(result, {
'http response status code is 200': result.status === 200,
});
}
kubectl port-forward svc/grafana 3000:80 &
kubectl port-forward svc/influxdb-influxdb2 8080:80 &
export K6_INFLUXDB_ORGANIZATION=k6io
export K6_INFLUXDB_BUCKET=k6demo
export K6_INFLUXDB_TOKEN=XXXXXXXXX
./k6 run -o xk6-influxdb= test.js
Lorsque k6 sera exécuté, il commencera à écrire dans InfluxDB.


Accédez à Grafana à partir d’un navigateur Web pour télécharger un exemple de panneau de configuration pour k6. Le mot de passe administrateur peut être obtenu à partir du code secret Kubernetes.
kubectl get secret — namespace default grafana -o jsonpath=”{.data.admin-password}” | base64 — decode ; echo
Le chargement d’un tableau de bord peut être effectué à partir du tableau de bord/importation et fichier d’importation, de l’identifiant du tableau de bord ou du json. Les panneaux de contrôle peuvent être trouvés sur k6-demo/k6-operator-data au format json.

Dans la partie suivante, nous exécuterons un test distribué en utilisant l’opérateur k6 et l’image que nous avons créée.
Notez que le test peut être exécuté de manière distribuée, mais notre tableau de bord affichera quatre exécutions simultanées.
Créez une carte de configuration à partir de k8test.js qui se trouve dans le chemin k6-demo/k6-operator-data, puis appliquez k6test.yaml qui contient TestRun. configmap et TestRun doivent se trouver dans le même espace de noms. En regardant TestRun, nous avons quatre (4) pods en parallèle, une fois le test terminé, ils seront vidés et la sortie sera envoyée à InfluxDB en définissant -o et les variables d’environnement appropriées.
apiVersion: k6.io/v1alpha1
kind: TestRun
metadata:
name: run-k6-with-vars
spec:
parallelism: 4
cleanup: post
script:
configMap:
name: crocodile-stress-test
file: test.js
arguments: -o xk6-influxdb=
runner:
image: k6custom:0.0.1
env:
- name: K6_INFLUXDB_ORGANIZATION
value: 'k6io'
- name: K6_INFLUXDB_TOKEN
value: XXXXXXXXXXXXXXXXX
- name: K6_INFLUXDB_BUCKET
value: k6demo
$ kubectl create configmap crocodile-stress-test — from-file k6-demo/k6-operator-data/k8test.js
$ kubectl apply -f k6test.yaml
Dès que nous appliquons TestRun, l’opérateur démarrera le test et fera tourner un pod pour chaque parallélisme configuré. Notre tableau de bord dans Grafana ne regroupe pas le parallélisme, mais le rapporte comme une exécution individuelle.


k6 Utilisation d’InfluxDB et Grafana pour des tests uniques ou distribués a été initialement publié sur Stackademic sur Medium, où les gens poursuivent la conversation en soulignant et en répondant à cette histoire.
Berita Terkini
Berita Terbaru
Daftar Terbaru
News
Berita Terbaru
Flash News
RuangJP
Pemilu
Berita Terkini
Prediksi Bola
Technology
Otomotif
Berita Terbaru
Teknologi
Berita terkini
Berita Pemilu
Berita Teknologi
Hiburan
master Slote
Berita Terkini
Pendidikan
Resep
Cek Ongkir Cargo
Togel Deposit Pulsa
Daftar Judi Slot Online Terpercaya
Slot yang lagi gacor

