프로덕션 환경의 jaeger-operator 배포 예

배경

istio의 설치 패키지에는 jaeger 배포 방식이 포함되어 있지만 제공하는 배포 방식은 올인원 즉, 데이터 저장이 메모리에 있어 프로덕션 환경에 적합하지 않기 때문에 다음 사항을 따라야 합니다. official Deploy 프로덕션 환경 배포 방법 이 내용은 istio 공식 문서에도 설명되어 있습니다.

여기에 이미지 설명을 삽입하세요.
쿠버네티스에서는 배포를 위해 오퍼레이터 방식을 사용하는 것을 공식적으로 권장하고 있다. 배포 방법은 어렵지 않다. 공식 문서를 참고하면 된다. 다만, istio에 접속할 때 주의해야 할 점이 몇 가지 있다. 기록해 두겠다. 내 설치 과정은 아래에 있습니다.

본 글에서는 jaeger를 프로덕션 환경에 배포하는 방법만 기록하고 있으며, jaeger의 심층적인 적용에 대해서는 여기서 소개하지 않고, 필요한 학생들은 공식 문서를 직접 참고하면 된다.

참조 문서: jaeger-operator

배포

예거 오퍼레이터 배포

  1. 공식 문서에 따르면 cert-manager를 먼저 설치하세요
    ! [여기에 이미지 설명 삽입](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

  1. 예거 오퍼레이터 배포

    공식 문서에 따르면 작업을 계속합니다.
    여기에 이미지 설명을 삽입하세요.
    1.46.0은 아직 github에 출시되지 않았기 때문에 공식 문서에 따른 명령 실행이 실패하므로 차선책으로 결정하고 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

여기에서 Pod 시작 실패가 발생할 수 있으니 주의하세요. 이렇게 하면 kubectl describe pod -n observability jaeger-operator-58d97648c5-****gcr.io/kubebuilder/kube-rbac-proxy:v0.13.0 다운로드에 실패한 것을 확인할 수 있습니다. K8S를 자주 플레이하시는 분들은 Google 라이브러리가 차단되어 있다는 점을 아셔야 합니다. ., 이 이미지는 직접 구하실 수 있는 방법을 찾으셔야 하고, 국내 이미지 주소에서 가져와서 재태그를 하셔도 되고, 래더 환경에서 다운받아서 이미지를 내보내고 가져오셔도 되는데... 간단히 말해서 여러가지가 있습니다. 방법.

예거 배포

이 단계에서는 사람마다 직면하는 환경이 다르기 때문에 실제 환경에 맞게 구성을 맞춤화해야 하므로 문서를 여러 번 읽어 보는 것이 좋습니다.

필요한 사항은 다음과 같습니다. 제가 사용하는 스토리지는 외부 ES입니다. 동시에 공식 구성을 참조하여 Elasticsearch 롤오버 구성 방법을 사용합니다. 그러면 외부 ES에는 계정과 비밀번호가 있으므로 Secrets Support 를 사용하여 다음 작업을 수행할 수 있습니다. 계정과 비밀번호를 설정합니다.비밀번호에 대한 자세한 내용은 다음과 같습니다. 설정방법은 외부 Elasticsearch 4번째 설명을 참고하세요 kubectl create secret generic jaeger-secret --from-literal=ES_PASSWORD=changeme --from-literal=ES_USERNAME=elastic
여기에 이미지 설명을 삽입하세요.
. 제가 설정한 내용은 아래와 같습니다.

#创建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

도킹 이스티오

현재까지 기본 배포가 완료되었습니다. jaeger-query에서 제공하는 WEB-UI를 이미 사용하실 수 있으나 현재로서는 istio 관련 추적 정보가 없습니다. 앞서 istio 공식 문서를 볼 때 언급한 바 있습니다. jaeger-collector의 주소는 istio 구성에서 정의해야 합니다. 공식적인 방법은 istio를 설치(업데이트)할 때 매개변수를 정의하는 것입니다. 실제로 또 다른 방법이 있습니다:

$ 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에는 cm이 있고 이름은 istio입니다. istio에 추가하거나 수정하기만 하면 됩니다
여기에 이미지 설명을 삽입하세요.
. 정상적으로 사용할 수 있다는 의미는 아닙니다. 이때 istiod를 다시 시작해야 합니다. 그러면 다음을 확인할 수 있습니다. 이전에 배포한 서비스는 여전히 jaeger를 통해 추적 정보를 볼 수 없으며, 이때 istio를 통해 주입된 서비스를 다시 시작해야 추적 정보를 볼 수 있습니다.
여기에 이미지 설명을 삽입하세요.

도킹키알리

kiali를 사용해 본 학생들은 kiali의 여러 메뉴에서 추적을 볼 수 있고 데이터 소스가 jaeger라는 것을 알고 있습니다. istio와 함께 제공되는 jaeger를 사용하면 별도의 구성 없이 직접 볼 수 있지만 이제는 jaejer를 직접 배포합니다
여기에 이미지 설명을 삽입하세요.. , 이는 istio에서 제공하는 설치 방법과 약간 다르기 때문에 이를 구성해야 하며, 구체적인 방법도 매우 간단하여 kiali의 configmap을 수정하는 것입니다.

$ kubectl get cm -n istio-system kiali 
NAME    DATA   AGE
kiali   1      63d

external_services그런 다음 아래에서 다음 내용을 찾아 추가하세요.

  tracing:
    url: http://192.168.8.104:32003
    in_cluster_url: http://jaeger-query.observability:16685/jaeger

여기에 이미지 설명을 삽입하세요.
url은 jaeger의 webUI에 대한 외부 접근 주소와 동일하며, 그 기능은 kiali에서 jaeger에 직접 접근할 수 있도록 하는 것입니다. in_cluster_url은 kiali에서 추적을 표시하는 것입니다.
여기에 이미지 설명을 삽입하세요.
여기에 이미지 설명을 삽입하세요.

추천

출처blog.csdn.net/Mrheiiow/article/details/131109127