L'objectif de ce document est de:
- déployer une application web multiconteneurs dans Kubernetes sur Azure et instrumenter ce cluster Kubernetes avec le OneAgentOperator
- instrumenter avec Dynatrace une application mobile Android communiquant avec cette application
Partie 1:
1 - Présentation de l'application
2 - Pré-requis: Souscrire à un compte Azure
3 - Préparer une application pour Azure Kubernetes Service (AKS)
4 - Déployer et utiliser Azure Container Registry
5 - Déployer un cluster Azure Kubernetes Service (AKS)
6 - Exécuter des applications dans Azure Kubernetes Service (AKS)
7 - Instrumenter le cluster Kubernetes avec le OneAgentOperator
8 - (Facultatif) Utiliser le Kubernetes Web UI
Partie 2:
1 - Présentation de l'application
2 - Installer l'application mobile
3 - Instrumenter l'application avec Dynatrace
4 - Exécuter l'application
L'application est une simple application test Microsoft où l'on peut voter pour son animal préféré.
Demandez à GTG l’activation de visual-studio-msdn-activation sur votre compte Dynatrace. Une fois activé, vous bénéficierez de 45€ de crédit Azure par mois, bloqués et sans besoin de mettre de carte de crédit: https://gtg.dynatrace.com/solutions/609798-visual-studio-msdn-activation
(Windows)
Téléchargez le code source: https://github.com/Azure-Samples/azure-voting-app-redis/archive/master.zip
Dans le répertoire azure-voting-app-redis se trouvent le code source de l’application, un fichier Docker Compose précréé et un fichier manifeste Kubernetes. Vous pouvez utiliser Docker Compose pour automatiser la création d’images conteneur et le déploiement d’applications multiconteneurs.
Installez Docker Desktop for Windows: https://download.docker.com/win/stable/Docker%20for%20Windows%20Installer.exe
❗ Docker nécessite Hyper-V uniquement sous Windows 10. Il ne fonctionnera pas avec VMware Workstation ou Virtual Box. Sans Hyper-V Docker ne s'exécutera pas après l'installation de Docker. VirtualBox ne sera plus en mesure d'exécuter des machines virtuelles (vos images de VM resteront toujours).
Pour activer Hyper-V: Windows features - Turn Windows features on or off
Créez l’image conteneur, téléchargez l’image Redis, puis démarrez l’application localement.
$ docker-compose up -d
Docker-compose est normalement installé avec Docker Desktop. Sinon installez le: https://docs.docker.com/compose/install/
Affichez les images créée:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
azure-vote-front latest 9cc914e25834 40 seconds ago 694MB
redis latest a1b99da73d05 7 days ago 106MB
tiangolo/uwsgi-nginx-flask flask 788ca94b2313 9 months ago 694MB
Visualisez les conteneurs en cours d’exécution :
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
82411933e8f9 azure-vote-front "/usr/bin/supervisord" 57 seconds ago Up 30 seconds 443/tcp, 0.0.0.0:8080->80/tcp azure-vote-front
b68fed4b66b6 redis "docker-entrypoint..." 57 seconds ago Up 30 seconds
Pour voir l’application en cours d’exécution, entrez http://localhost:8080 dans un navigateur web local.
Maintenant que la fonctionnalité de l’application a été validée, arrêtez et supprimez les instances et ressources de conteneur:
$ docker-compose down
❗ Ne supprimez pas les images de conteneur. Lorsque l’application locale a été supprimée, vous disposez d’une image Docker qui contient l’application Azure Vote, azure-vote-front.
-
Connectez vous avec votre compte Dynatrace au portal Azure: https://portal.azure.com et vérifiez que vous êtes bien souscrit.
-
Téléchargez l'Azure CLI sur votre machine: https://aka.ms/installazurecliwindows
-
Ouvrez un terminal Windows et connectez vous à votre compte Dynatrace. Si la page d'authentification ne s'affiche pas automatiquement, allez sur https://aka.ms/devicelogin:
$ az login
- Créez un groupe de ressources nommé myResourceGroup créé dans la région eastus:
$ az group create --name myResourceGroup --location eastus
- Créez une instance Azure Container Registry nommé myContainerRegistryName:
$ az acr create --resource-group myResourceGroup --name myContainerRegistryName --sku Basic
- Connectez vous à ce registre (la commande devrait retourner le message Login Succeeded):
$ az acr login --name myContainerRegistryName
- Affichez la liste des images locales actuelles:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
azure-vote-front latest 4675398c9172 13 minutes ago 694MB
redis latest a1b99da73d05 7 days ago 106MB
tiangolo/uwsgi-nginx-flask flask 788ca94b2313 9 months ago 694MB
- Obtenez l’adresse du serveur de connexion (acrLoginServer):
$ az acr list --resource-group myResourceGroup --query "[].{acrLoginServer:loginServer}" --output table
- Balisez votre image azure-vote-front locale avec l'acrLoginServer et le tag v1:
$ docker tag azure-vote-front <acrLoginServer>/azure-vote-front:v1
- Vérifiez que le tag a été appliqué:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
azure-vote-front latest eaf2b9c57e5e 8 minutes ago 716 MB
mycontainerregistry.azurecr.io/azure-vote-front v1 eaf2b9c57e5e 8 minutes ago 716 MB
redis latest a1b99da73d05 7 days ago 106MB
tiangolo/uwsgi-nginx-flask flask 788ca94b2313 8 months ago 694 MB
- Envoyez l'image à votre instance ACR:
$ docker push <acrLoginServer>/azure-vote-front:v1
- Liste des images qui ont été envoyées à votre instance ACR:
$ az acr repository list --name myContainerRegistryName --output table
Result
----------------
azure-vote-front
- Les étiquettes d’une image spécifique:
$ az acr repository show-tags --name myContainerRegistryName --repository azure-vote-front --output table
Result
--------
v1
$ az ad sp create-for-rbac --skip-assignment
{
"appId": "e7596ae3-6864-4cb8-94fc-20164b1588a9",
"displayName": "azure-cli-2018-06-29-19-14-37",
"name": "http://azure-cli-2018-06-29-19-14-37",
"password": "52c95f25-bd1e-4314-bd31-d8112b293521",
"tenant": "72f988bf-86f1-41af-91ab-2d7cd011db48"
}
Prenez note des valeurs de appId et de password.
Obtenez l’ID de ressource ACR et mettez à jour le nom de Registre avec celui de votre instance ACR et le groupe de ressources où se trouve cette instance:
$ az acr show --resource-group myResourceGroup --name myContainerRegistryName --query "id" --output tsv
Pour accorder l’accès qui permettra au cluster AKS de tirer (pull) des images stockées dans ACR, attribuez le rôle AcrPull:
$ az role assignment create --assignee <appId> --scope <acrId> --role acrpull
Créez un cluster AKS:
$ az aks create --resource-group myResourceGroup --name myAKSCluster --node-count 1 --service-principal <appId> --client-secret <password> --generate-ssh-keys
$ az aks install-cli
$ az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Vérifier la connexion à votre cluster:
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
aks-nodepool1-28993262-0 Ready agent 3m18s v1.9.11
❗ Vous pouvez également le visualiser dans le Web UI de Kubernetes en suivant les étapes de la partie #8 - Utiliser le Kubernetes Web UI.
$ az acr list --resource-group myResourceGroup --query "[].{acrLoginServer:loginServer}" --output table
Dans le référentiel git cloné, dans le répertoire azure-voting-app-redis, ouvrez le fichier manifeste azure-vote-all-in-one-redis.yaml avec un éditeur de texte et remplacez microsoft par le nom de votre serveur de connexion ACR:
containers:
- name: azure-vote-front
image: microsoft/azure-vote-front:v1
Fichier modifié:
containers:
- name: azure-vote-front
image: myContainerRegistryName.azurecr.io/azure-vote-front:v1
$ kubectl apply -f azure-vote-all-in-one-redis.yaml
deployment "azure-vote-back" created
service "azure-vote-back" created
deployment "azure-vote-front" created
service "azure-vote-front" created
$ kubectl get service azure-vote-front --watch
Dans un premier temps, la valeur EXTERNAL-IP du service azure-vote-front est indiqué comme étant en attente (pending) :
azure-vote-front 10.0.34.242 <pending> 80:30676/TCP 7s
Quand l’adresse EXTERNAL-IP passe de l’état pending à une adresse IP publique réelle, utilisez CTRL-C pour arrêter le processus de surveillance kubectl.
azure-vote-front 10.0.34.242 52.179.23.131 80:30676/TCP 2m
Pour voir l’application en action, ouvrez un navigateur web en utilisant l’adresse IP externe de votre service
$ kubectl create namespace dynatrace
$ kubectl apply -f https://raw.githubusercontent.com/Dynatrace/dynatrace-oneagent-operator/master/deploy/kubernetes.yaml
$ kubectl -n dynatrace logs -f deployment/dynatrace-oneagent-operator
Récupérez votre environmentID et paasToken et appliquez les commandes:
$ kubectl -n dynatrace create secret generic oneagent --from-literal="apiToken=DYNATRACE_API_TOKEN" --from-literal="paasToken=PLATFORM_AS_A_SERVICE_TOKEN"
$ kubectl apply -f cr.yaml
Si vous êtes confronté à des problèmes lors de l'installation, analysez les logs: https://www.dynatrace.com/support/help/technology-support/cloud-platforms/kubernetes/installation-and-operation/full-stack/troubleshoot-oneagent-on-kubernetes/
- Récupérer le nom du déploiement à restart:
$ kubectl -n dynatrace get deployments
- Stop:
$ kubectl -n dynatrace scale deployments <name_of_deployment> --replicas=0
- Restart:
$ kubectl -n dynatrace scale deployments <name_of_deployment> --replicas=1
Le dashboard Kubernetes peut vous aider dans le déploiement. Vous pouvez y visualiser vos nodes, pods, services et secrets de votre cluster.
- Déployez le dashboard:
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta1/aio/deploy/recommended.yaml
- Ouvrez un nouveau terminal et exécutez:
$ kubectl proxy
- Le Web UI se trouvera à l'adresse: http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/#/login
- Pour vous connectez avec un token:
- Visualisez tous les secrets du cluster avec la commande:
$ kubectl -n kube-system get secret
- Recherchez dans les résultats le secret avec le nom " admin-user". Copiez le token associé et utilisez le pour vous identifiez dans le Web UI.
Télécharger Android Studio pour Windows: https://developer.android.com/studio
Téléchargez le code source: https://github.com/ElodieLam/DynatraceWorkshop2/archive/master.zip
- Sélectionnez Deploy Dynatrace dans le menu de navigation.
- Cliquez sur le bouton Set up mobile monitoring. Vous serez redirigé vers une page où vous entrez le nom de votre application mobile.
- Une fois que vous avez fourni un nom à votre application, cliquez sur Create mobile app.
Dans le fichier MyApplication/app/src/main/java/com/example/myapplication/MainActivity.java du projet,
- Ligne 44: Modifiez l'adresse IP du server (remplacez avec l'adresse IP de votre service Azure)
- Ligne 73: Modifiez l'applicationID et le beaconUrl (à récupérer au niveau de l'application que vous venez de créer dans Dynatrace)
- Ligne 89: Méthode où est créer l'action utilisateur dans Dynatrace. Vous pouvez modifier le nom de l'action ici.
- Cliquez sur le bouton "Play" en vert
- Sélectionner la machine que vous venez de créer
- Cliquez sur Ok et l'application se lancera automatiquement
- Effectuez quelques actions et elles apparaîtront dans Dynatrace