Skip to main content

Kubernetes Plugins

Este plugin permite que os desenvolvedores verifiquem a integridade dos serviços sem precisar acessar diretamente o cluster.

A idéia é aumentar a visibilidade dos erros identificados e fornecer detalhes sobre os deployments, pods e outros objetos de um serviço.

O plugin é divido em duas partes a parte frontend (instalado no app) que mostra as informações e a parte backend que faz comunicação com o cluster para coletar os dados.

Para instalar o plugin do kubernetes temos duas etapas. A primeira feita no frontend (app) e a segunda feita no backend.

App

No diretório raiz do backstage

yarn --cwd packages/app add @backstage/plugin-kubernetes

Agora vamos adicionar a página no código em packages/app/src/components/catalog/EntityPage.tsx.

Geralmente essa parte já vem no código se estiver usando as versões mais recentes.

// Só irá mostrar que isKubernetesAvailable for true, ou seja, se a annotation correta tiver presente.
const serviceEntityPage = (
<EntityLayout>
{/* other tabs... */}
<EntityLayout.Route
path="/kubernetes"
title="Kubernetes"
if={isKubernetesAvailable}
>
<EntityKubernetesContent refreshIntervalMs={10000} />
</EntityLayout.Route>
</EntityLayout>
);

Backend

Instalando as dependências.

yarn --cwd packages/backend add @backstage/plugin-kubernetes-backend

E dentro de packages/backend/src/index.ts antes de backend.start() vamos adicionar a linha abaixo. Nos códigos mais novos do backstage costuma já estar adicionado.

backend.add(import('@backstage/plugin-kubernetes-backend'));

As configurações do plugin estão definidas em app-config.yaml. Existem várias maneiras de adicionar o cluster e fazer a autenticação. É interessante tenhamos uma service account para o backstage como foi feito no lab, mas com as permissões corretas.

kubernetes:
serviceLocatorMethod:
type: 'multiTenant'
clusterLocatorMethods:
- type: 'config'
clusters:
- name: 'kind-study'
url: 'https://localhost:6443' # Verifique se esta é a URL correta do Kind
authProvider: 'serviceAccount'
skipTLSVerify: true
skipMetricsLookup: true
serviceAccountToken: ${KUBERNETES_BACKSTAGE_SA_TOKEN}

Para fazer funcionar precisar adicionar a annotation. O que ela faz é procurar o recurso com as labels corretas para mostrar.

No projeto backestage-argocd-app que esta utilizando o ArgoCD, todos os recursos da mesma application node-frontend recebe a tag app.kubernetes.io/instance=node-backend podemos filtrar por esta tag por exemplo.

alt text

alt text

alt text

Podemos ver os logs, o yaml, e mudar o comportamento dos botões para deletar um pod por exemplo.

É necessário se aprofundar neste assunto pois possui muitas configurações aproveitando custom resourses do kubernetes.

Cluster Resource

Podemos adicionar o cluster como um recurso para ser relacionado com outros.

No próprio backstage podemos utilizar o location para criar um recurso fixo. Crie uma pasta clusters e defina o recurso abaixo.

tree clusters
clusters
└── kind.yaml

Aqui o kind.yaml que esta criando de fato um recurso que representa o cluster.

apiVersion: backstage.io/v1alpha1
kind: Resource
metadata:
name: kind-study-cluster
description: "Kubernetes Cluster for local study"
tags:
- kubernetes
links:
# link util para acessar o dashboard do cluster
- url: https://dash.localhost
title: Kubernetes Dashboard
icon: dashboard
spec:
type: kubernetes-cluster
owner: team-sre

No api-config.yaml podemos adicionar esse resource.

catalog:
,...
locations:
- type: file
target: ../../clusters/kind.yaml