本 Helm Chart 主要用于在集群里部署 Pinpoint。Pinpoint 是一个使用 Java 编写的应用性能管理(Application Performance Management,APM)工具,用于在大规模分布式系统中收集、监控应用运行情况。
一般情况下,一个命名空间一般只需要一个性能监控系统,因此在制作本 Chart 包时,不支持在同一个命名空间里部署多个 Pinpoint 实例。
本部署包遵循以下部署规范:
HPA 时,多个实例会尽量分散部署到不同的节点上,以保证应用的可用性。node.kubernetes.io/namespace=<namespace>)上,保证各环境(生产环境、预发布环境等)节点隔离。startupProbe)与存活探针(livenessProbe),保证应用一直处于可用状态。maintenance)属性值为 true 时,即进入维护状态。当进入维护状态时,HPA 将会失效,所有的 Deployment 和 StatefulSet 的 replicas 将被设置 0。本系统不依赖外部组件。为了保证应用方便部署,本 Chart 包内部已内置了 MySql、HBase、ZooKeeper 等组件,如果不希望使用内置的组件,可以自行改造本 Chart 包。
创建配置文件 pinpoint.yaml,将 values.yaml 中的内容复制到该文件中。删除其余无用的配置,保留需要修改的内容,如下:
####################################################################
# 全局配置
####################################################################
# 维护状态
# 当进入维护状态时,hpa 将会失效,所有的 Deployment 和 StatefulSet 的 replicas 将被设置 0
maintenance: false
# 存储配置
pvc:
storageClassName: permanent
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Gi
以上内容只列出了部分配置,具体配置请参考
values.yaml文件。
使用 helm 执行以下命令,完成部署:
# 使用 pinpoint.yaml 指定的参数部署
$ helm install <release-name> oci://registry-1.docker.io/centralx/helm-mysql -f pinpoint.yaml
Chart 包在完成部署操作后,会创建一个监听域名 pinpoint.<namespace>.cluster.k8s 的 Ingress 资源,该 Ingress 会将相关请求转发到 Pinpoint Web 应用。运维人员需要自行在外部通过 Nginx 等方式将请求转发到集群内部,如:
# 集群 Ingress 流量入口
upstream ingress {
server ingress1.cluster.k8s;
server ingress2.cluster.k8s;
}
# 端口监听
server {
listen 8001;
location / {
proxy_pass http://ingress;
proxy_redirect default;
client_max_body_size 1000m;
# 传递代理信息
proxy_set_header Host pinpoint.<namespace>.cluster.k8s;
proxy_set_header X-Real-IP $remote_addr; # 用户真实 IP
proxy_set_header X-Forwarded-Host $http_host; # 用户访问服务器的真实域名
proxy_set_header X-Forwarded-Port $server_port; # 用户访问服务器的真实端口
proxy_set_header X-Forwarded-Proto $scheme; # 用户访问服务器的真实协议
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 反向代理路径
# WebSocket 支持
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_connect_timeout 60s;
proxy_read_timeout 60s;
proxy_send_timeout 60s;
}
}
在部署 Pod 时,需要使用 Pinpoint 提供的相关 agent 监控应用,如下:
apiVersion: v1
kind: Pod
metadata:
name: spring-application
spec:
initContainers:
- name: install-pinpoint-agent
image: "centralx/install-pinpoint-java-agent:<version>"
imagePullPolicy: Always
volumeMounts:
- mountPath: plugin-volume
name: /opt/java/agents
containers:
- name: application
image: "application:latest"
imagePullPolicy: Always
command:
- "java"
- "-jar"
args:
- "-javaagent:./plugins/pinpoint/pinpoint-bootstrap.jar"
- "-Dpinpoint.agentName=$(POD_NAME)"
- "-Dpinpoint.applicationName=$(APPLICATION_NAME)"
- "-Dpinpoint.profiler.profiles.active=release"
- "-Dprofiler.transport.grpc.collector.ip=pinpoint-collector"
- "-Dprofiler.collector.ip=pinpoint-collector"
env:
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: APPLICATION_NAME
valueFrom:
fieldRef:
fieldPath: metadata.labels['app.kubernetes.io/name']
volumeMounts:
- name: plugin-volume
mountPath: /workspace/plugins
volumes:
- name: plugin-volume
emptyDir: {}
以上用到了
centralx/install-pinpoint-java-agent镜像,请参考该镜像说明[链接]。
Content type
Helm
Digest
sha256:75ed204c1…
Size
14.7 kB
Last updated
over 2 years ago
helm pull oci://registry-1.docker.io/centralx/helm-pinpoint --version 1.0.0