Data: 13/03/2022
Autores:
Atualmente a APM rodando no OKD realiza ações de monitoramento das aplicações da SETIC.
Esse Spike tem o objetivo de analisar a possibilidade na utilização do APM pelo Elasticsearch (ECK) Operator.
Com a aquisição do Openshift para o ambiente da SETIC, faz-se necessário realizar a migração do APM para o Novo Openshift. Tal ação se tornou viável após a expansão do Storage e estabilização do Novo Orquestrador.
O Elastic Cloud on Kubernetes (ECK) é um operador do Kubernetes para orquestrar aplicativos Elastic como (Elasticsearch, Kibana, APM Server, Enterprise Search, Beats, Elastic Agent e Elastic Maps Server) no Kubernetes. Nosso objetivo atual é realizar a instalação e testes do APM Server.
Ele se baseia em um conjunto de Definições de Recursos Personalizados (CRD) para definir declarativamente a maneira como cada aplicativo é implantado. CRDs são recursos globais compartilhados por todos os usuários do cluster Kubernetes, o que requer certas permissões para instalá-los para uso inicial. O próprio operador pode ser instalado como um aplicativo com escopo de cluster gerenciando todos os namespaces ou pode ser restrito a um conjunto predefinido de namespaces. Várias cópias do operador podem ser instaladas em um único cluster Kubernetes, desde que os CRDs globais sejam compatíveis com cada instância e as extensões opcionais com escopo de cluster, como o webhook de validação, estejam desabilitadas.
Para não impactar no cluster a instalação deve ser feita dentro de um projeto criado para receber o operator.
Apenas Elasticsearch e Kibana são compatíveis com a restricted restrição de contexto de segurança . Para executar o APM Server no OpenShift, você deve permitir que o pod seja executado com o anyuidSCC conforme descrito em Implantar uma instância do APM Server com uma rota
oc apply -f https://download.elastic.co/downloads/eck/1.0.0-beta1/all-in-one.yaml
oc adm pod-network make-projects-global elastic-system
oc new-project elastic # creates the elastic project
Por padrão, o operador observa e cria recursos no defaultnamespace. Você precisa corrigir o operador para gerenciar recursos em outro namespace.
kubectl patch statefulset/elastic-operator \
-n elastic-system \
–type=‘json’ \
–patch ‘[{«op»:«add»,«path»:«/spec/template/spec/containers/0/env/-»,«value»: {«name»: «NAMESPACE», «value»: «elastic»}}]’
Substitua elasticnos exemplos acima pelo nome do namespace no qual você deseja implantar seus recursos.
oc adm policy add-role-to-user elastic-operator developer -n elastic
No exemplo acima, o usuário developertem permissão para gerenciar recursos Elastic no namespace elastic.
Implantar uma instância do APM Server com uma rota
No momento, não é possível executar o APM Server com o restrictedSCC. Uma possível solução alternativa é permitir que o pod seja executado com o padrão uid 1000, atribuindo-o ao anyuidSCC:
oc create serviceaccount apm-server -n elastic
oc adm policy add-scc-to-user anyuid -z apm-server -n elastic
scc «anyuid» added to: [«system:serviceaccount:elastic:apm-server»]
cat <<EOF | oc apply -n elastic -f -
apiVersion: apm.k8s.elastic.co/v1
kind: ApmServer
metadata:
name: apm-server-sample
spec:
version: 8.1.0
count: 1
elasticsearchRef:
name: «elasticsearch-sample»
podTemplate:
spec:
serviceAccountName: apm-server
apiVersion: v1
kind: Route
metadata:
name: apm-server-sample
spec:
#host: apm-server.example.com # override if you don’t want to use the host that is automatically generated by OpenShift (< route-name>[-< namespace>].< suffix>)
tls:
termination: passthrough # the APM Server is the TLS endpoint
insecureEdgeTerminationPolicy: Redirect
to:
kind: Service
name: apm-server-sample-apm-http
EOF
Para verificar se o Pod do APM Server está usando o SCC correto, use o seguinte comando:
oc get pod -o go-template=‘{{range .items}}{{scc}}{{" «}}{{»\n"}}{{end}}{{end}}’
apm-server-sample-apm-server-86bfc5c95c-96lbx scc:anyuid
elasticsearch-sample-es-5tsqghmm79 scc:restricted
elasticsearch-sample-es-6qk52mz5jk scc:restricted
elasticsearch-sample-es-dg4vvpm2mr scc:restricted
kibana-sample-kb-97c6b6b8d-lqfd2 scc:restricted
O APM Server é exposto com um serviço. Para obter informações sobre como acessá-lo, consulte Como acessar os serviços do Elastic Stack.
Para recuperar a lista de todos os Serviços do APM, use o seguinte comando:
kubectl get service --selector=‘common.k8s.elastic.co/type=apm-server’
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE apm-server-quickstart-apm-http ClusterIP 10.0.1.252 < none> 8200/TCP 154m
O operador gera um token de autorização que os agentes devem enviar para se autenticarem no APM Server.
Esse token é armazenado em um segredo nomeado {APM-server-name}-apm-tokene pode ser recuperado com o seguinte comando:
kubectl get secret / apm - server - quickstart - apm - token - o go - template = ‘{{index .data «secret-token» | base64decode}}’
Se você deseja configurar chaves de API para autorizar solicitações ao APM Server, em vez de usar a CLI do APM Server, você precisa criar chaves de API usando a API de criação de chave de API do Elasticsearch , consulte a documentação do APM Server .
Tal estudo baseia-se nas informações documentais da aplicação.
Não foi realizado teste para validar se a implementação precisa de alguma configuração além da documental.