fundo
O pacote de instalação do istio vem com o método de implantação jaeger, mas o método de implantação que ele fornece é all-in-one, ou seja, o armazenamento de dados está na memória, o que não é adequado para o ambiente de produção. Portanto, precisamos seguir o Deploy oficial no método de implantação do ambiente de produção.Isso também é explicado na documentação oficial do istio.
No kubernetes, a recomendação oficial é usar o método do operador para implantação. O método de implantação não é difícil. Basta consultar a documentação oficial. No entanto, há algumas coisas que precisam ser observadas ao se conectar ao istio. Vou registrar meu processo de instalação abaixo.
Este artigo registra apenas como implantar o Jaeger em um ambiente de produção. Em relação à aplicação aprofundada do Jaeger, não irei apresentá-lo aqui. Os alunos que precisarem podem consultar a documentação oficial por conta própria.
Documentação de referência: operador jaeger
implantar
Implantar operador jaeger
- De acordo com a documentação oficial, instale o cert-manager primeiro
! [Insira a descrição da imagem aqui](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
-
Implantar operador jaeger
De acordo com o documento oficial, continue a operação.
Como o 1.46.0 ainda não foi lançado no github, a execução do comando de acordo com o documento oficial irá falhar, então podemos nos contentar com a próxima melhor opção e instalar o 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
Observe que uma falha na inicialização do pod pode ocorrer aqui. Ao fazer isso
kubectl describe pod -n observability jaeger-operator-58d97648c5-****
, você descobrirá que gcr.io/kubebuilder/kube-rbac-proxy:v0.13.0 falhou ao fazer o download. Aqueles que jogam K8S com frequência devem saber que a biblioteca do Google está bloqueada ., você precisa encontrar uma maneira de obter essa imagem sozinho. Você pode extraí-la do endereço da imagem doméstica e marcá-la novamente, ou baixá-la em um ambiente ladder e exportar e importar a imagem... Resumindo, existem muitos caminhos.
Implantar jaeger
Como cada pessoa enfrenta ambientes diferentes nesta etapa, é necessário customizar a configuração de acordo com seu ambiente real. É recomendável ler o documento várias vezes.
Aqui estão minhas necessidades: O armazenamento que uso é um ES externo. Ao mesmo tempo, refiro-me à configuração oficial e uso o método de configuração de rollover do Elasticsearch . Em seguida, o ES externo tem uma conta e senha, para que eu possa usar o Secrets Support para configure a conta e a senha. Os detalhes dos segredos são Para métodos de configuração, consulte a quarta descrição do Elasticsearch Externokubectl create secret generic jaeger-secret --from-literal=ES_PASSWORD=changeme --from-literal=ES_USERNAME=elastic
. Minha configuração está postada abaixo.
#创建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 acoplamento
Até agora, a implantação básica foi concluída. Você já pode usar a WEB-UI fornecida por jaeger-query, mas não há informações de rastreamento relacionadas ao istio no momento. Já mencionamos isso antes quando analisamos o documento oficial do istio . O endereço do jaeger-collector precisa ser definido na configuração do istio. O método oficial é definir os parâmetros ao instalar (atualizar) o istio. Na verdade, existe outro 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 tem um cm e seu nome é istio. Só precisamos adicioná-lo ou modificá-lo em istio
. Isso não significa que ele possa ser usado normalmente. Neste momento, você precisa reiniciar o istiod e então descobrirá que o serviço que você implantou anteriormente As informações de rastreamento ainda não podem ser vistas por meio do Jaeger. Neste momento, você precisa reiniciar o serviço injetado pelo istio e então poderá ver as informações de rastreamento.
dockingkiali
Os alunos que usaram o kiali sabem que os rastreamentos podem ser visualizados em vários menus do kiali, e a fonte de dados é jaeger. Se usarmos o jaeger que vem com o istio, podemos visualizá-lo diretamente, sem qualquer configuração. Mas agora nós mesmos implantamos o jaejer
. , que é um pouco diferente do método de instalação que vem com o istio, então precisamos configurá-lo. O método específico também é muito simples, que é modificar o configmap do kiali
$ kubectl get cm -n istio-system kiali
NAME DATA AGE
kiali 1 63d
Em seguida, encontre external_services
e adicione o seguinte conteúdo abaixo
tracing:
url: http://192.168.8.104:32003
in_cluster_url: http://jaeger-query.observability:16685/jaeger
O url é equivalente ao endereço do seu acesso externo à webUI do jaeger. Sua função é permitir que você acesse diretamente o jaeger no kiali. in_cluster_url é exibir rastreamentos no kiali.