fondo
El paquete de instalación de istio viene con el método de implementación jaeger, pero el método de implementación que proporciona es todo en uno, es decir, el almacenamiento de datos está en la memoria, lo cual no es adecuado para el entorno de producción, por lo que debemos seguir las siguientes instrucciones: oficial Implementar en el método de implementación del entorno de producción, esto también se explica en la documentación oficial de istio.
En Kubernetes, la recomendación oficial es utilizar el método del operador para la implementación. El método de implementación no es difícil. Solo consulte la documentación oficial. Sin embargo, hay algunas cosas a las que se debe prestar atención al conectarse a istio. Mi proceso de instalación a continuación.
Este artículo solo registra cómo implementar Jaeger en un entorno de producción. Con respecto a la aplicación en profundidad de Jaeger, no la presentaré aquí. Los estudiantes que lo necesiten pueden consultar la documentación oficial por sí mismos.
Documentación de referencia: operador jaeger
desplegar
Implementar el operador jaeger
- Según la documentación oficial, ¡instale cert-manager primero
! [Inserte descripción de la imagen aquí](https://img-blog.csdnimg.cn/e96a63cd30924082a35cf0e6571af723.png
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.6.3/cert-manager.yaml
-
Implementar el operador jaeger
Según el documento oficial, continúe con la operación.
Debido a que 1.46.0 aún no se ha lanzado en github, la ejecución del comando según el documento oficial fallará, por lo que podemos conformarnos con la siguiente mejor opción e instalar 1.45.0.
kubectl create ns observability
kubectl create -f https://github.com/jaegertracing/jaeger-operator/releases/download/v1.45.0/jaeger-operator.yaml -n observability
kubectl get deployment jaeger-operator -n observability
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
jaeger-operator 1 1 1 1 48s
Tenga en cuenta que aquí puede ocurrir una falla en el inicio del pod. Cuando haga esto
kubectl describe pod -n observability jaeger-operator-58d97648c5-****
, encontrará que gcr.io/kubebuilder/kube-rbac-proxy:v0.13.0 no se pudo descargar. Aquellos que juegan a K8S con frecuencia deben saber que la biblioteca de Google está bloqueada. ., necesita encontrar una manera de obtener esta imagen usted mismo, puede extraerla de la dirección de la imagen nacional y volver a etiquetarla, o descargarla en un entorno de escalera y exportar e importar la imagen ... En resumen, hay muchas maneras.
Implementar jaeger
Debido a que en este paso todos enfrentan entornos diferentes, debe personalizar la configuración de acuerdo con su entorno real. Se recomienda leer el documento varias veces.
Estas son mis necesidades: El almacenamiento que uso es un ES externo. Al mismo tiempo, me refiero a la configuración oficial y uso el método de configuración de rollover de Elasticsearch . Luego, el ES externo tiene una cuenta y una contraseña, por lo que puedo usar Secrets Support para configure la cuenta y la contraseña. Los detalles de los secretos son Para los métodos de configuración, consulte la cuarta descripción de Elasticsearch externokubectl create secret generic jaeger-secret --from-literal=ES_PASSWORD=changeme --from-literal=ES_USERNAME=elastic
. Mi configuración se publica a continuación.
#创建elasticsearch的用户密码secrets
$ kubectl create secret generic jaeger-secret --from-literal=ES_PASSWORD=changeme --from-literal=ES_USERNAME=elastic
$ kubectl get secrets -n observability
NAME TYPE DATA AGE
default-token-fc756 kubernetes.io/service-account-token 3 23h
jaeger-operator-service-cert kubernetes.io/tls 3 23h
jaeger-operator-token-dmrzc kubernetes.io/service-account-token 3 20h
jaeger-secret Opaque 2 22h
jaeger-token-n5xfx kubernetes.io/service-account-token 3 20h
##jaeger部署文件
$ cat jaeger.yaml
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: jaeger
namespace: observability
spec:
strategy: production
collector:
maxReplicas: 2
resources:
limits:
cpu: 100m
memory: 128Mi
storage:
type: elasticsearch
options:
es:
server-urls: http://192.168.8.105:9200
use-aliases: true
esRollover:
conditions: "{
\"max_age\": \"2d\"}"
readTTL: 168h
schedule: "55 23 * * *"
secretName: jaeger-secret
query:
serviceType: NodePort
$ kubectl apply -f jaeger.yaml
$ kubectl get svc,pod -n observability
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/jaeger-collector ClusterIP 10.233.19.93 <none> 9411/TCP,14250/TCP,14267/TCP,14268/TCP,4317/TCP,4318/TCP 20h
service/jaeger-collector-headless ClusterIP None <none> 9411/TCP,14250/TCP,14267/TCP,14268/TCP,4317/TCP,4318/TCP 20h
service/jaeger-operator-metrics ClusterIP 10.233.29.204 <none> 8443/TCP 20h
service/jaeger-operator-webhook-service ClusterIP 10.233.28.228 <none> 443/TCP 20h
service/jaeger-query NodePort 10.233.23.105 <none> 16686:32003/TCP,16685:32004/TCP 20h
NAME READY STATUS RESTARTS AGE
pod/jaeger-collector-c498bfb45-khtrq 1/1 Running 0 20h
pod/jaeger-es-index-cleaner-28102555-t4v77 0/1 Completed 0 14h
pod/jaeger-es-lookback-28102555-d98x8 0/1 Completed 0 14h
pod/jaeger-es-rollover-28102555-2rxlw 0/1 Completed 0 14h
pod/jaeger-es-rollover-create-mapping-k4x5r 0/1 Completed 0 20h
pod/jaeger-operator-58d97648c5-gr2kx 2/2 Running 0 20h
pod/jaeger-query-79754974c7-7gnk9 2/2 Running 0 20h
pod/jaeger-spark-dependencies-28102555-dbnxt 0/1 Completed 0 14h
istio de acoplamiento
Hasta ahora, se ha completado la implementación básica. Ya puede usar la interfaz de usuario WEB proporcionada por jaeger-query, pero no hay información de seguimiento relacionada con istio en este momento. Lo mencionamos antes cuando miramos el documento oficial de istio. La dirección de jaeger-collector debe definirse en la configuración de istio. El método oficial es definir los parámetros al instalar (actualizar) istio. De hecho, existe otro método:
$ kubectl get cm -n istio-system
NAME DATA AGE
grafana 4 63d
istio 2 63d
istio-ca-root-cert 1 63d
istio-gateway-deployment-leader 0 63d
istio-gateway-status-leader 0 63d
istio-grafana-dashboards 2 63d
istio-leader 0 63d
istio-namespace-controller-election 0 63d
istio-services-grafana-dashboards 4 63d
istio-sidecar-injector 2 63d
kiali 1 63d
kube-root-ca.crt 1 63d
prometheus 5 63d
istiod tiene un cm y su nombre es istio. Solo necesitamos agregarlo o modificarlo en istio
. No significa que se pueda usar normalmente. En este momento, debe reiniciar istiod y luego encontrará que el Servicio que implementó anteriormente La información de seguimiento aún no se puede ver a través de Jaeger. En este momento, debe reiniciar el servicio inyectado por istio y luego podrá ver la información de seguimiento.
atraquekiali
Los estudiantes que han usado kiali saben que los rastros se pueden ver en varios menús de kiali y la fuente de datos es jaeger. Si usamos el jaeger que viene con istio, podemos verlo directamente sin ninguna configuración. Pero ahora implementamos jaejer nosotros mismos
. , que es ligeramente diferente del método de instalación que viene con istio, por lo que necesitamos configurarlo. El método específico también es muy simple, que consiste en modificar el mapa de configuración de kiali
$ kubectl get cm -n istio-system kiali
NAME DATA AGE
kiali 1 63d
Luego busque external_services
y agregue el siguiente contenido a continuación.
tracing:
url: http://192.168.8.104:32003
in_cluster_url: http://jaeger-query.observability:16685/jaeger
La URL es equivalente a la dirección de su acceso externo a la UI web de Jaeger. Su función es permitirle acceder directamente a Jaeger en kiali. in_cluster_url es mostrar rastros en kiali.