Ce document explique comment utiliser le mode de cache d'image local pour accélérer l'intégration d'ack-onepilot pour les applications Java.
Contexte
Par défaut, l'init-container injecté par le composant ack-onepilot extrait dynamiquement les packages d'agent en fonction de règles. Cette approche offre une grande flexibilité pour l'intégration des applications. Toutefois, dans certains scénarios, l'extraction dynamique des packages d'agent à la volée peut poser des problèmes :
Dans les scénarios de périphérie (edge) où la qualité du réseau est médiocre, le temps nécessaire pour extraire le package d'agent peut augmenter considérablement. L'opération d'extraction peut même échouer en raison de problèmes tels que des délais d'expiration.
L'intégration simultanée de nombreuses applications peut augmenter les opérations d'entrée/sortie par seconde (IOPS) de la machine. Cela consomme une grande quantité de ressources d'E/S de la machine sur une courte période.
Prérequis
ack-onepilot version 5.1.0 ou ultérieure.
L'application est écrite en Java.
La version de l'agent est 4.2.5 ou ultérieure.
Procédure
Le fichier YAML d'exemple suivant montre comment utiliser le mode de cache d'image local pour accélérer l'intégration d'ack-onepilot pour une application Java simple dans Kubernetes.
Exemple de fichier YAML d'application
apiVersion: v1
kind: Namespace
metadata:
name: arms-demo
---
apiVersion: apps/v1 # for versions before 1.8.0 use apps/v1beta1
kind: Deployment
metadata:
name: arms-springboot-demo
namespace: arms-demo
labels:
app: arms-springboot-demo
spec:
replicas: 2
selector:
matchLabels:
app: arms-springboot-demo
template:
metadata:
labels:
app: arms-springboot-demo
armsPilotAutoEnable: "on"
armsPilotCreateAppName: "arms-k8s-demo"
# Enable the local image cache mode. This is required.
apsara.apm/enable-cached-agent: 'true'
# In local image cache mode, specify the agent version. Replace this with the required agent version.
aliyun.com/agent-version: 4.2.5
spec:
containers:
- resources:
limits:
cpu: 0.5
image: registry.cn-hangzhou.aliyuncs.com/arms-docker-repo/arms-springboot-demo:v0.1
imagePullPolicy: Always
name: arms-springboot-demo
env:
- name: SELF_INVOKE_SWITCH
value: "true"
- name: COMPONENT_HOST
value: "arms-demo-component"
- name: COMPONENT_PORT
value: "6666"
- name: MYSQL_SERVICE_HOST
value: "arms-demo-mysql"
- name: MYSQL_SERVICE_PORT
value: "3306"
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: arms-springboot-demo-subcomponent
namespace: arms-demo
labels:
app: arms-springboot-demo-subcomponent
spec:
replicas: 2
selector:
matchLabels:
app: arms-springboot-demo-subcomponent
template:
metadata:
labels:
app: arms-springboot-demo-subcomponent
armsPilotAutoEnable: "on"
armsPilotCreateAppName: "arms-k8s-demo-subcomponent"
# Enable the local image cache mode. This is required.
apsara.apm/enable-cached-agent: 'true'
# In local image cache mode, specify the agent version. Replace this with the required agent version.
aliyun.com/agent-version: 4.2.5
spec:
containers:
- resources:
limits:
cpu: 0.5
image: registry.cn-hangzhou.aliyuncs.com/arms-docker-repo/arms-springboot-demo:v0.1
imagePullPolicy: Always
name: arms-springboot-demo-subcomponent
env:
- name: SELF_INVOKE_SWITCH
value: "false"
- name: MYSQL_SERVICE_HOST
value: "arms-demo-mysql"
- name: MYSQL_SERVICE_PORT
value: "3306"
---
apiVersion: v1
kind: Service
metadata:
labels:
name: arms-demo-component
name: arms-demo-component
namespace: arms-demo
spec:
ports:
# the port that this service should serve on
- name: arms-demo-component-svc
port: 6666
targetPort: 8888
# label keys and values that must match to receive traffic for this service
selector:
app: arms-springboot-demo-subcomponent
---
apiVersion: apps/v1 # for versions before 1.8.0 use apps/v1beta1
kind: Deployment
metadata:
name: arms-demo-mysql
namespace: arms-demo
labels:
app: mysql
spec:
replicas: 1
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- resources:
limits:
cpu: 0.5
image: registry.cn-hangzhou.aliyuncs.com/arms-docker-repo/arms-demo-mysql:v0.1
name: mysql
ports:
- containerPort: 3306
name: mysql
---
apiVersion: v1
kind: Service
metadata:
labels:
name: mysql
name: arms-demo-mysql
namespace: arms-demo
spec:
ports:
# the port that this service should serve on
- name: arms-mysql-svc
port: 3306
targetPort: 3306
# label keys and values that must match to receive traffic for this service
selector:
app: mysql
---
Installez ack-onepilot et accordez-lui les permissions d'accès aux ressources requises. Pour plus d'informations, consultez Installation de l'assistant d'agent ARMS (ack-onepilot).
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, cliquez sur .
-
Sur la page Deployments, pour l'application cible, choisissez .
Cliquez sur Create From YAML pour créer une nouvelle application.
-
Dans le fichier YAML, ajoutez les labels suivantes au niveau spec.template.metadata, puis cliquez sur Update.
labels:
armsPilotAutoEnable: "on"
armsPilotCreateAppName: "arms-k8s-demo-subcomponent"
# Enable the local image cache mode. This is required.
apsara.apm/enable-cached-agent: 'true'
# In local image cache mode, specify the agent version. You can replace this with the required agent version. For a list of released agent versions, see the agent management documentation.
aliyun.com/agent-version: 4.2.5
-
Sur la page Deployments, cliquez sur dans la colonne Actions pour afficher les détails de surveillance de l'application.
