Este documento descreve como usar o modo de cache de imagem local para acelerar a integração do ack-onepilot em aplicações Java.
Contexto
Por padrão, para garantir uma integração flexível das aplicações, o init-container injetado pelo componente ack-onepilot baixa dinamicamente a versão necessária do pacote do agente com base em regras específicas. No entanto, baixar o pacote do agente em tempo real pode causar problemas em alguns cenários:
Em cenários de edge computing com conectividade de rede limitada, o download do pacote do agente pode demorar muito mais ou até falhar devido a timeouts.
A integração simultânea de muitas aplicações aumenta o IOPS do host e consome recursos significativos de I/O em um curto período.
Pré-requisitos
ack-onepilot versão 5.1.0 ou posterior.
Aplicação escrita em Java.
Agente versão 4.2.5 ou superior.
Procedimento
O manifesto YAML de exemplo abaixo demonstra como uma aplicação Java simples no Kubernetes pode usar o modo de cache de imagem local para acelerar a integração do ack-onepilot.
YAML da aplicação de exemplo
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"
# Required. Enable local image cache mode.
apsara.apm/enable-cached-agent: 'true'
# Required for local image cache mode. Specify the agent version. You can replace this with the version you need.
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"
# Required. Enable local image cache mode.
apsara.apm/enable-cached-agent: 'true'
# Required for local image cache mode. Specify the agent version. You can replace this with the version you need.
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 in order 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 in order to receive traffic for this service
selector:
app: mysql
---
Instale o ack-onepilot e conceda as permissões de acesso aos recursos necessárias. Para obter instruções detalhadas, consulte Instale o assistente de agente ARMS (ack-onepilot).
Faça login no ACK console. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do cluster. No painel de navegação à esquerda, clique em .
-
Na página Stateless, localize a aplicação e, na coluna Actions, escolha .
Para criar uma nova aplicação, clique em Create From YAML.
-
No editor YAML, adicione os seguintes labels em spec.template.metadata e clique em Update.
labels:
armsPilotAutoEnable: "on"
armsPilotCreateAppName: "arms-k8s-demo-subcomponent"
# Required. Enable local image cache mode.
apsara.apm/enable-cached-agent: 'true'
# Required for local image cache mode. Specify the agent version. You can replace this with the version you need. For a list of released agent versions, see the agent management documentation.
aliyun.com/agent-version: 4.2.5
aliyun.com/app-language: java
De volta à página Stateless, localize a aplicação e clique em na coluna Actions para visualizar os detalhes de monitoramento.