Установка

WARNING

Этот документ по развертыванию применим только к сценариям интеграции платформы контейнеров с системой трассировки.

Компоненты Tracing и Service Mesh являются взаимоисключающими. Если вы уже развернули компонент Service Mesh, пожалуйста, сначала удалите его.

Данное руководство предоставляет администраторам кластера процесс установки системы трассировки на кластер Alauda Container Platform.

Требования:

  • У вас есть доступ к кластеру Alauda Container Platform с учётной записью, обладающей правами platform-admin-system.
  • У вас установлен CLI kubectl.
  • Компонент Elasticsearch настроен для хранения данных трассировки, включая URL доступа и информацию Basic Auth.

Содержание

Установка Jaeger Operator

Установка Jaeger Operator через Веб-консоль

Вы можете установить Jaeger Operator из раздела MarketplaceOperatorHub в Alauda Container Platform, где перечислены доступные операторы.

Шаги

  • В режиме Administrator веб-консоли выберите кластер, в котором хотите развернуть Jaeger Operator, затем перейдите в MarketplaceOperatorHub.

  • Используйте строку поиска, чтобы найти Alauda build of Jaeger в каталоге. Нажмите на заголовок Alauda build of Jaeger.

  • Ознакомьтесь с вводной информацией об операторе на странице Alauda build of Jaeger. Нажмите Install.

  • На странице Install:

    • Выберите Manual для Upgrade Strategy. При стратегии одобрения Manual OLM создаст запросы на обновление. Как администратор кластера, вы должны вручную одобрять запросы OLM для обновления оператора до новой версии.
    • Выберите канал stable (Default).
    • Выберите Recommended для Installation Location. Установите оператор в рекомендуемое пространство имён jaeger-operator, чтобы оператор мог мониторить и быть доступным во всех пространствах имён кластера.
  • Нажмите Install.

  • Убедитесь, что в поле Status отображается Succeeded, чтобы подтвердить корректную установку Jaeger Operator.

  • Проверьте, что все компоненты Jaeger Operator успешно установлены. Войдите в кластер через терминал и выполните команду:

    kubectl -n jaeger-operator get csv

    Пример вывода

    NAME                     DISPLAY           VERSION   REPLACES   PHASE
    jaeger-operator.vx.x.0   Jaeger Operator   x.x.0                Succeeded

    Если в поле PHASE указано Succeeded, значит оператор и его компоненты установлены успешно.

Развёртывание экземпляра Jaeger

Экземпляр Jaeger и связанные с ним ресурсы можно установить с помощью скрипта install-jaeger.sh, который принимает три параметра:

  • --es-url: URL доступа к Elasticsearch.
  • --es-user-base64: имя пользователя Basic Auth для Elasticsearch, закодированное в base64.
  • --es-pass-base64: пароль Basic Auth для Elasticsearch, закодированный в base64.

Скопируйте скрипт установки из DETAILS, войдите в кластер, где хотите установить, сохраните его как install-jaeger.sh и выполните после предоставления прав на выполнение:

DETAILS
#!/bin/bash

set -euo pipefail

CLUSTER_NAME=$(kubectl get configmap global-info -n kube-public -o jsonpath='{.data.clusterName}')
echo "CLUSTER_NAME: ${CLUSTER_NAME}"

# default values
TARGET_NAMESPACE="cpaas-system"
JAEGER_INSTANCE_NAME="jaeger-prod"
JAEGER_BASEPATH_SUFFIX="/acp/jaeger"
JAEGER_ES_INDEX_PREFIX=acp-tracing-$CLUSTER_NAME

# get arg
while [ "$#" -gt 0 ]; do
    case $1 in
        --es-url=*)
            ES_URL="${1#*=}"
            ;;
        --es-user-base64=*)
            ES_USER_BASE64="${1#*=}"
            ;;
        --es-pass-base64=*)
            ES_PASS_BASE64="${1#*=}"
            ;;
        --target-namespace=*)
            TARGET_NAMESPACE="${1#*=}"
            ;;
        --jaeger-instance-name=*)
            JAEGER_INSTANCE_NAME="${1#*=}"
            ;;
        --jaeger-basepath-suffix=*)
            JAEGER_BASEPATH_SUFFIX="${1#*=}"
            ;;
        --jaeger-es-index-prefix=*)
            JAEGER_ES_INDEX_PREFIX="${1#*=}"
            ;;
        *)
            echo "unknown argument: $1"
            exit 1
            ;;
    esac
    shift
done

# print arg
echo "ES_URL: $ES_URL"
echo "ES_USER_BASE64: $ES_USER_BASE64"
echo "ES_PASS_BASE64: $ES_PASS_BASE64"
echo "TARGET_NAMESPACE: $TARGET_NAMESPACE"
echo "JAEGER_INSTANCE_NAME: $JAEGER_INSTANCE_NAME"
echo "JAEGER_BASEPATH_SUFFIX: $JAEGER_BASEPATH_SUFFIX"
echo "JAEGER_ES_INDEX_PREFIX: $JAEGER_ES_INDEX_PREFIX"

# get global-info from ConfigMap
ISSUER_URL=$(kubectl get configmap global-info -n kube-public -o jsonpath='{.data.oidcIssuer}')
CLIENT_ID=$(kubectl get configmap global-info -n kube-public -o jsonpath='{.data.oidcClientID}')
CLIENT_SECRET=$(kubectl get configmap global-info -n kube-public -o jsonpath='{.data.oidcClientSecret}')
CLIENT_SECRET_BASE64=$(echo -n "${CLIENT_SECRET}" | base64 -w0)
PLATFORM_URL=$(kubectl get configmap global-info -n kube-public -o jsonpath='{.data.platformURL}')
echo "PLATFORM_URL: ${PLATFORM_URL}"

JAEGER_BASEPATH="clusters/$CLUSTER_NAME$JAEGER_BASEPATH_SUFFIX"

_apply_resource() {
  if [ -z "$1" ]; then
    echo "Usage: _apply_resource <yaml_content>"
    return 1
  fi

  local yaml_content="$1"
  echo "$yaml_content" | kubectl apply -f -
}

_install_configmap() {
  local yaml_content=$(cat <<EOF
apiVersion: v1
data:
  OAUTH2_PROXY_CLIENT_ID: $CLIENT_ID
  OAUTH2_PROXY_COOKIE_SECURE: "false"
  OAUTH2_PROXY_EMAIL_DOMAINS: "*"
  OAUTH2_PROXY_HTTP_ADDRESS: 0.0.0.0:4180
  OAUTH2_PROXY_INSECURE_OIDC_ALLOW_UNVERIFIED_EMAIL: "true"
  OAUTH2_PROXY_OIDC_ISSUER_URL: $ISSUER_URL
  OAUTH2_PROXY_PROVIDER: oidc
  OAUTH2_PROXY_PROXY_PREFIX: /$JAEGER_BASEPATH/oauth2
  OAUTH2_PROXY_REDIRECT_URL: $PLATFORM_URL/$JAEGER_BASEPATH/oauth2/callback
  OAUTH2_PROXY_SCOPE: openid profile email groups ext
  OAUTH2_PROXY_SKIP_JWT_BEARER_TOKENS: "true"
  OAUTH2_PROXY_SKIP_PROVIDER_BUTTON: "true"
  OAUTH2_PROXY_SSL_INSECURE_SKIP_VERIFY: "true"
  OAUTH2_PROXY_UPSTREAMS: http://127.0.0.1:16686
kind: ConfigMap
metadata:
  name: $JAEGER_INSTANCE_NAME-oauth2-proxy
  namespace: $TARGET_NAMESPACE
EOF
)
  _apply_resource "$yaml_content"
}

_install_secret() {
  local yaml_content=$(cat <<EOF
apiVersion: v1
data:
  OAUTH2_PROXY_CLIENT_SECRET: $CLIENT_SECRET_BASE64
  OAUTH2_PROXY_COOKIE_SECRET: $CLIENT_SECRET_BASE64
kind: Secret
metadata:
  name: $JAEGER_INSTANCE_NAME-oauth2-proxy
  namespace: $TARGET_NAMESPACE
type: Opaque
---
apiVersion: v1
data:
  ES_PASSWORD: $ES_PASS_BASE64
  ES_USERNAME: $ES_USER_BASE64
kind: Secret
metadata:
  name: $JAEGER_INSTANCE_NAME-es-basic-auth
  namespace: $TARGET_NAMESPACE
type: Opaque
EOF
)
  _apply_resource "$yaml_content"
}

_install_sa() {
  local yaml_content=$(cat <<EOF
apiVersion: v1
kind: ServiceAccount
metadata:
  name: $JAEGER_INSTANCE_NAME-sa
  namespace: $TARGET_NAMESPACE
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: $JAEGER_INSTANCE_NAME-role
  namespace: $TARGET_NAMESPACE
rules:
- apiGroups: [""]
  resources: ["secrets"]
  verbs: ["get"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: $JAEGER_INSTANCE_NAME-rb
  namespace: $TARGET_NAMESPACE
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: $JAEGER_INSTANCE_NAME-role
subjects:
- kind: ServiceAccount
  name: $JAEGER_INSTANCE_NAME-sa
  namespace: $TARGET_NAMESPACE
EOF
)
  _apply_resource "$yaml_content"
}

_install_jaeger() {
  local yaml_content=$(cat <<EOF
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
  name: $JAEGER_INSTANCE_NAME
  namespace: $TARGET_NAMESPACE
spec:
  collector:
    affinity:
      podAntiAffinity:
        requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchLabels:
                app.kubernetes.io/name: $JAEGER_INSTANCE_NAME-collector
            topologyKey: kubernetes.io/hostname
    replicas: 1
    resources:
      limits:
        cpu: "2"
        memory: 512Mi
      requests:
        cpu: 250m
        memory: 256Mi
  imagePullSecrets:
    - name: global-registry-auth
  ingress:
    enabled: false
  labels:
    service_name: jaeger
  query:
    affinity:
      podAntiAffinity:
        requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchLabels:
                app.kubernetes.io/name: $JAEGER_INSTANCE_NAME-query
            topologyKey: kubernetes.io/hostname
    annotations:
      oauth2-proxy.github.io/image: ""
      oauth2-proxy.github.io/inject: "true"
      oauth2-proxy.github.io/oidc-configmap: $JAEGER_INSTANCE_NAME-oauth2-proxy
      oauth2-proxy.github.io/oidc-secret: $JAEGER_INSTANCE_NAME-oauth2-proxy
      oauth2-proxy.github.io/proxyCPULimit: 100m
      oauth2-proxy.github.io/proxyMemoryLimit: 128Mi
    options:
      query:
        base-path: /$JAEGER_BASEPATH
    replicas: 1
    resources:
      limits:
        cpu: "1"
        memory: 512Mi
      requests:
        cpu: 250m
        memory: 256Mi
  resources:
    limits:
      cpu: 100m
      memory: 300Mi
    requests:
      cpu: 100m
      memory: 300Mi
  sampling:
    options: {}
  serviceAccount: $JAEGER_INSTANCE_NAME-sa
  storage:
    dependencies:
      enabled: false
      resources: {}
      schedule: 55 23 * * *
    elasticsearch:
      name: elasticsearch
      nodeCount: 3
      redundancyPolicy: SingleRedundancy
    esIndexCleaner:
      enabled: true
      numberOfDays: 7
      resources: {}
      schedule: 55 23 * * *
    esRollover:
      resources: {}
      schedule: 0 0 * * *
    options:
      es.asm.cname: $JAEGER_INSTANCE_NAME-es-basic-auth
      es.asm.cnamespace: $TARGET_NAMESPACE
      es.index-prefix: $JAEGER_ES_INDEX_PREFIX
      es.max-span-age: 168h0m0s
      es.server-urls: $ES_URL
      es.tls.enabled: true
      es.tls.skip-host-verify: true
    secretName: ""
    type: elasticsearch
  strategy: production
  tolerations:
    - effect: NoSchedule
      key: node-role.kubernetes.io/control-plane
      operator: Exists
    - effect: NoSchedule
      key: node-role.kubernetes.io/master
      operator: Exists
  ui:
    options:
      dependencies:
        menuEnabled: false
EOF
)
  _apply_resource "$yaml_content"
}

_install_pod_monitor() {
  local yaml_content=$(cat <<EOF
apiVersion: monitoring.coreos.com/v1
kind: PodMonitor
metadata:
  labels:
    monitoring: pods
    prometheus: kube-prometheus
  name: $JAEGER_INSTANCE_NAME-monitor
  namespace: $TARGET_NAMESPACE
spec:
  jobLabel: app.kubernetes.io/name
  namespaceSelector:
    matchNames:
      - $TARGET_NAMESPACE
  podMetricsEndpoints:
    - interval: 60s
      path: /metrics
      port: admin-http
  selector:
    matchLabels:
      app.kubernetes.io/instance: $JAEGER_INSTANCE_NAME
EOF
)
  _apply_resource "$yaml_content"
}

_install_ingress() {
  local alb_annotation=""
  if [[ "$CLUSTER_NAME" == "global" ]]; then
  alb_annotation=$(cat <<EOF
    alb.ingress.cpaas.io/rewrite-request: |
      {"headers_var":{"Authorization":"cookie_cpaas_id_token"}}
EOF
  )
  fi
  local ingress_class=""
  if [[ "$CLUSTER_NAME" != "global" ]]; then
    ingress_class="  ingressClassName: cpaas-system"
  fi

  local yaml_content=$(cat <<EOF
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: $JAEGER_INSTANCE_NAME-query
  namespace: $TARGET_NAMESPACE
  annotations:
    nginx.ingress.kubernetes.io/enable-cors: "true"
$alb_annotation
spec:
$ingress_class
  rules:
    - http:
        paths:
          - path: /$JAEGER_BASEPATH
            pathType: ImplementationSpecific
            backend:
              service:
                name: $JAEGER_INSTANCE_NAME-query
                port:
                  number: 4180
EOF
)
  _apply_resource "$yaml_content"
}

# final install
_install_configmap
_install_secret
_install_sa
_install_jaeger
_install_pod_monitor
_install_ingress

echo "Jaeger UI access address: $PLATFORM_URL/$JAEGER_BASEPATH"
echo "Jaeger installation completed"

Пример запуска скрипта:

./install-jaeger.sh --es-url='https://xxx' --es-user-base64='xxx' --es-pass-base64='xxx'

Пример вывода скрипта:

CLUSTER_NAME: <cluster>
ES_URL: https://xxx
ES_USER_BASE64: xxx
ES_PASS_BASE64: xxx
TARGET_NAMESPACE: cpaas-system
JAEGER_INSTANCE_NAME: jaeger-prod
JAEGER_BASEPATH_SUFFIX: /acp/jaeger
JAEGER_ES_INDEX_PREFIX: acp-tracing-<cluster>
PLATFORM_URL: https://xxx
configmap/jaeger-prod-oauth2-proxy created
secret/jaeger-prod-oauth2-proxy created
secret/jaeger-prod-es-basic-auth created
serviceaccount/jaeger-prod-sa created
role.rbac.authorization.k8s.io/jaeger-prod-role created
rolebinding.rbac.authorization.k8s.io/jaeger-prod-rb created
jaeger.jaegertracing.io/jaeger-prod created
podmonitor.monitoring.coreos.com/jaeger-prod-monitor created
ingress.networking.k8s.io/jaeger-prod-query created
Jaeger UI access address: <platform-url>/clusters/<cluster>/acp/jaeger
Jaeger installation completed

Установка OpenTelemetry Operator

Установка OpenTelemetry Operator через Веб-консоль

Вы можете установить OpenTelemetry Operator из раздела MarketplaceOperatorHub в Alauda Container Platform, где перечислены доступные операторы.

Шаги

  • В режиме Administrator веб-консоли выберите кластер, в котором хотите развернуть OpenTelemetry Operator, затем перейдите в MarketplaceOperatorHub.

  • Используйте строку поиска, чтобы найти Alauda build of OpenTelemetry в каталоге. Нажмите на заголовок Alauda build of OpenTelemetry.

  • Ознакомьтесь с вводной информацией об операторе на странице Alauda build of OpenTelemetry. Нажмите Install.

  • На странице Install:

    • Выберите Manual для Upgrade Strategy. При стратегии одобрения Manual OLM создаст запросы на обновление. Как администратор кластера, вы должны вручную одобрять запросы OLM для обновления оператора до новой версии.
    • Выберите канал alpha (Default).
    • Выберите Recommended для Installation Location. Установите оператор в рекомендуемое пространство имён opentelemetry-operator, чтобы оператор мог мониторить и быть доступным во всех пространствах имён кластера.
  • Нажмите Install.

  • Убедитесь, что в поле Status отображается Succeeded, чтобы подтвердить корректную установку OpenTelemetry Operator.

  • Проверьте, что все компоненты OpenTelemetry Operator успешно установлены. Войдите в кластер через терминал и выполните команду:

    kubectl -n opentelemetry-operator get csv

    Пример вывода

    NAME                            DISPLAY                  VERSION   REPLACES   PHASE
    openTelemetry-operator.vx.x.0   OpenTelemetry Operator   x.x.0                Succeeded

    Если в поле PHASE указано Succeeded, значит оператор и его компоненты установлены успешно.

Развёртывание экземпляров OpenTelemetry

Экземпляры OpenTelemetry и связанные с ними ресурсы можно установить с помощью скрипта install-otel.sh.

Скопируйте скрипт установки из DETAILS, войдите в кластер, где хотите установить, сохраните его как install-otel.sh и выполните после предоставления прав на выполнение:

DETAILS
#!/bin/bash

set -euo pipefail

TARGET_NAMESPACE="cpaas-system"

# get global-info from ConfigMap
CLUSTER_NAME=$(kubectl get configmap global-info -n kube-public -o jsonpath='{.data.clusterName}')
echo "CLUSTER_NAME: ${CLUSTER_NAME}"

_apply_resource() {
  if [ -z "$1" ]; then
    echo "Usage: _apply_resource <yaml_content>"
    return 1
  fi

  local yaml_content="$1"
  echo "$yaml_content" | kubectl apply -f -
}

_install_rbac() {
  local yaml_content=$(cat <<EOF
apiVersion: v1
imagePullSecrets:
  - name: global-registry-auth
kind: ServiceAccount
metadata:
  name: otel-collector
  namespace: $TARGET_NAMESPACE
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: otel-collector:cpaas-system:cluster-admin
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
  - kind: ServiceAccount
    name: otel-collector
    namespace: $TARGET_NAMESPACE
EOF
)
  _apply_resource "$yaml_content"
}

_install_otel_collector() {
  local yaml_content=$(cat <<EOF
apiVersion: opentelemetry.io/v1beta1
kind: OpenTelemetryCollector
metadata:
  name: otel
  namespace: $TARGET_NAMESPACE
spec:
  affinity:
    podAntiAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        - labelSelector:
            matchLabels:
              app: otel-collector
          topologyKey: kubernetes.io/hostname
  config:
    exporters:
      debug: {}
      otlp:
        balancer_name: round_robin
        endpoint: dns:///jaeger-prod-collector-headless.$TARGET_NAMESPACE:4317
        tls:
          insecure: true
      prometheus:
        endpoint: 0.0.0.0:8889
    extensions:
      health_check:
        endpoint: 0.0.0.0:13133
    processors:
      batch: {}
      filter/metric_apis:
        metrics:
          datapoint:
            - attributes["http.route"] == "/actuator/health" or attributes["uri"] == "/actuator/health"
            - attributes["http.route"] == "/actuator/prometheus" or attributes["uri"] == "/actuator/prometheus"
      transform:
        metric_statements:
          - context: datapoint
            statements:
              - delete_key(attributes, "inner.client.ms.name")
              - delete_key(attributes, "inner.client.ms.namespace")
              - delete_key(attributes, "inner.client.cluster.name")
              - delete_key(attributes, "inner.client.env.type")
              - set(attributes["namespace"], resource.attributes["k8s.namespace.name"])
              - set(attributes["container"], resource.attributes["k8s.container.name"])
              - set(attributes["service_name"], resource.attributes["service.name"])
              - set(attributes["pod"], resource.attributes["k8s.pod.name"])
      memory_limiter:
        check_interval: 5s
        limit_percentage: 85
        spike_limit_percentage: 25
    receivers:
      otlp:
        protocols:
          grpc:
            endpoint: 0.0.0.0:4317
          http:
            endpoint: 0.0.0.0:4318
    service:
      extensions:
        - health_check
      pipelines:
        metrics:
          exporters:
            - debug
            - prometheus
          processors:
            - memory_limiter
            - filter/metric_apis
            - transform
            - batch
          receivers:
            - otlp
        traces:
          exporters:
            - debug
            - otlp
          processors:
            - memory_limiter
            - batch
          receivers:
            - otlp
      telemetry:
        logs:
          level: info
        metrics:
          address: 0.0.0.0:8888
          level: detailed
  managementState: managed
  mode: deployment
  replicas: 1
  resources:
    limits:
      cpu: "2"
      memory: 1Gi
    requests:
      cpu: 250m
      memory: 512Mi
  securityContext:
    readOnlyRootFilesystem: true
    runAsNonRoot: true
  serviceAccount: otel-collector
  tolerations:
    - effect: NoSchedule
      key: node-role.kubernetes.io/control-plane
      operator: Exists
    - effect: NoSchedule
      key: node-role.kubernetes.io/master
      operator: Exists
  upgradeStrategy: automatic
EOF
)
  _apply_resource "$yaml_content"
}

_install_instrumentation() {
  local yaml_content=$(cat <<EOF
apiVersion: opentelemetry.io/v1alpha1
kind: Instrumentation
metadata:
  name: acp-common-java
  namespace: $TARGET_NAMESPACE
spec:
  env:
    - name: SERVICE_CLUSTER
      value: "$CLUSTER_NAME"
    - name: OTEL_TRACES_EXPORTER
      value: otlp
    - name: OTEL_METRICS_EXPORTER
      value: otlp
    - name: OTEL_EXPORTER_OTLP_ENDPOINT
      value: http://otel-collector.$TARGET_NAMESPACE:4317
    - name: OTEL_SERVICE_NAME
      value: \$(SERVICE_NAME).\$(SERVICE_NAMESPACE)
    - name: OTEL_RESOURCE_ATTRIBUTES
      value: service.namespace=\$(SERVICE_NAMESPACE),cluster.name=\$(SERVICE_CLUSTER)
  sampler:
    type: parentbased_traceidratio
    argument: "1"
EOF
)
  _apply_resource "$yaml_content"
}

_install_service_monitor() {
  local yaml_content=$(cat <<EOF
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  labels:
    monitoring: services
    prometheus: kube-prometheus
  name: otel-collector-monitoring
  namespace: $TARGET_NAMESPACE
spec:
  endpoints:
    - interval: 60s
      path: /metrics
      port: monitoring
  jobLabel: app.kubernetes.io/name
  namespaceSelector:
    matchNames:
      - $TARGET_NAMESPACE
  selector:
    matchLabels:
      app.kubernetes.io/instance: $TARGET_NAMESPACE.otel
      operator.opentelemetry.io/collector-service-type: monitoring
---
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  labels:
    monitoring: services
    prometheus: kube-prometheus
  name: otel-collector
  namespace: $TARGET_NAMESPACE
spec:
  endpoints:
    - honorLabels: true
      interval: 60s
      path: /metrics
      port: prometheus
  jobLabel: app.kubernetes.io/name
  namespaceSelector:
    matchNames:
      - $TARGET_NAMESPACE
  selector:
    matchLabels:
      app.kubernetes.io/instance: $TARGET_NAMESPACE.otel
      operator.opentelemetry.io/collector-service-type: base
EOF
)
  _apply_resource "$yaml_content"
}

_install_rbac
_install_otel_collector
_install_instrumentation
_install_service_monitor

echo "OpenTelemetry installation completed"

Пример запуска скрипта:

./install-otel.sh

Пример вывода скрипта:

CLUSTER_NAME: cluster-xxx
serviceaccount/otel-collector created
clusterrolebinding.rbac.authorization.k8s.io/otel-collector:cpaas-system:cluster-admin created
opentelemetrycollector.opentelemetry.io/otel created
instrumentation.opentelemetry.io/acp-common-java created
servicemonitor.monitoring.coreos.com/otel-collector-monitoring created
servicemonitor.monitoring.coreos.com/otel-collector created
OpenTelemetry installation completed

Включение переключателя функций

Система трассировки находится в фазе Alpha и требует ручного включения переключателя функции acp-tracing-ui в разделе Feature Switch.

Затем перейдите в представление Container Platform, и откройте ObservabilityTracing, чтобы просмотреть функцию трассировки.

Удаление Tracing

Удаление экземпляра OpenTelemetry

Войдите в установленный кластер и выполните следующие команды для удаления экземпляра OpenTelemetry и связанных ресурсов.

kubectl -n cpaas-system delete servicemonitor otel-collector-monitoring
kubectl -n cpaas-system delete servicemonitor otel-collector
kubectl -n cpaas-system delete instrumentation acp-common-java
kubectl -n cpaas-system delete opentelemetrycollector otel
kubectl delete clusterrolebinding otel-collector:cpaas-system:cluster-admin
kubectl -n cpaas-system delete serviceaccount otel-collector

Удаление OpenTelemetry Operator

Вы можете удалить OpenTelemetry Operator через режим Administrator в веб-консоли.

Шаги

  • В разделе MarketplaceOperatorHub используйте строку поиска для поиска Alauda build of OpenTelemetry.
  • Нажмите на заголовок Alauda build of OpenTelemetry, чтобы открыть детали.
  • На странице деталей Alauda build of OpenTelemetry нажмите кнопку Uninstall в правом верхнем углу.
  • В окне Uninstall "opentelemetry-operator"? нажмите Uninstall.

Удаление экземпляра Jaeger

Войдите в установленный кластер и выполните следующие команды для удаления экземпляра Jaeger и связанных ресурсов.

kubectl -n cpaas-system delete ingress jaeger-prod-query
kubectl -n cpaas-system delete podmonitor jaeger-prod-monitor
kubectl -n cpaas-system delete jaeger jaeger-prod
kubectl -n cpaas-system delete rolebinding jaeger-prod-rb
kubectl -n cpaas-system delete role jaeger-prod-role
kubectl -n cpaas-system delete serviceaccount jaeger-prod-sa
kubectl -n cpaas-system delete secret jaeger-prod-oauth2-proxy
kubectl -n cpaas-system delete secret jaeger-prod-es-basic-auth
kubectl -n cpaas-system delete configmap jaeger-prod-oauth2-proxy

Удаление Jaeger Operator

Вы можете удалить Jaeger Operator через режим Administrator в веб-консоли.

Шаги

  • В разделе MarketplaceOperatorHub используйте строку поиска для поиска Alauda build of Jaeger.
  • Нажмите на заголовок Alauda build of Jaeger, чтобы открыть детали.
  • На странице деталей Alauda build of Jaeger нажмите кнопку Uninstall в правом верхнем углу.
  • В окне Uninstall "jaeger-operator"? нажмите Uninstall.