使用后台的Kubernetes Plugin来检查目录中Kubernetes资源的状态

后台是什么意思?

“Backstage 最初是由 Spotify 开发的开源软件。官方文档引用的话说,…”

后台是一个用于构建开发者门户的开放平台。Backstage配备了统一的软件目录,可以恢复微服务和基础设施的秩序,并使产品团队能够快速交付高质量的代码,而不会损害其自主性。

我们可以看到,他们提供了专门给开发者使用的门户网站。主要功能如下:

    • ソフトウェアカタログ

 

    • ソフトウェアテンプレート

 

    技術文書

这次我们启动Backstage,通过软件目录的功能来获取Kubernetes资源的状态。

验证环境

这次我在以下环境进行测试。

    • Backstageの動作環境:Ubuntu 20.04.6 LTS

 

    • ソースコード置き場:GitHub

 

    Kubernetes:EKS

事前准备

与GitHub的集成

公式文档在这里。
使用OAuth认证GitHub,并获取源代码。
首先获取GitHub的Client ID和Client Secret。
在账户的设置-开发者设置-授权应用中选择新的OAuth应用程序,
按以下方式创建OAuth应用程序。

1683849123194.png

以下为可直接复制的文本:
IP将成为启动Backstage的主机IP。请根据各自的环境将IP和端口部分替换为相应的数值。如果在本地运行,请将其设为localhost即可,不会有问题。

Homepage URL: http://localhost:3000
Authorization callback URL: http://localhost:7007/api/auth/github/handler/frame

完成后,创建Client Secret,并与Client ID一同设置为环境变量。

export AUTH_GITHUB_CLIENT_ID=xxxxx
export AUTH_GITHUB_CLIENT_SECRET=xxxxx

准备数据库

虽然可以在没有数据库的情况下使用,但每次重新启动时数据都会丢失,所以最好准备一个数据库。
请使用本文档中的docker-compose.yml,并按以下方式启动。

docker compose up -d

当程序安全启动后,请设置以下环境变量。

export POSTGRES_HOST=<ホストのIPアドレス>
export POSTGRES_PORT=5432
export POSTGRES_USER=postgres
export POSTGRES_PASSWORD=postgres

另外,最好将此处的POSTGRES_HOST IP与GitHub应用程序指定的IP保持一致。

后台的安装

请安装先决条件软件包。请注意,Node.js 必须是版本 16 或 18 才能正常运行。

sudo apt-get update -y
sudo apt install npm -y
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - &&\
sudo apt-get install -y nodejs
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt update && sudo apt install yarn

安装。

npx @backstage/create-app@latest

顺带提一下,如果前提软件包不完整,则会以以下错误而失败。

npx: installed 70 in 6.005s

TypeError: this.breakLines(...).flat is not a function

如果前提套件足夠,你會被問到以下的方式來詢問應用程式的名稱。

$ npx @backstage/create-app
? Enter a name for the app [required] 

在这里,根据”入门”选择了输入”my-backstage-app”。
稍等片刻(在我的环境中大约需要5分钟),会弹出以下消息以完成安装。

?  Successfully created my-backstage-app

已创建了一个以指定应用的名称命名的目录,因此需要移动。

cd my-backstage-app/

默认情况下,前端在localhost:3000上进行公开。为了改为通过IP访问,需要修改配置文件。配置文件名为app-config.yaml,并放置在目录中。需要修改以下3个地方:

app:
  baseUrl: http://10.151.195.88:3000
backend:
  baseUrl: http://10.151.195.88:7007
  cors:
    origin: http://10.151.195.88:3000

改变后,启动 backstage。

yarn dev
1682505796166.png

暂停一下

    • GitHubの認証情報の設定

 

    • Postgresの設定

 

    をapp-config.yamlに追加する。

以下是GitHub身份验证信息的设置内容。

auth:
  environment: development
  providers:
    github:
      development:
        clientId: ${AUTH_GITHUB_CLIENT_ID}
        clientSecret: ${AUTH_GITHUB_CLIENT_SECRET}

以下是Postgres的配置内容。

backend:
  database:
-   client: better-sqlite3
-   connection: ':memory:'
+   client: pg
+   connection:
+     host: ${POSTGRES_HOST}
+     port: ${POSTGRES_PORT}
+     user: ${POSTGRES_USER}
+     password: ${POSTGRES_PASSWORD}

完成追加后,再次运行 “yarn dev” 以重新启动。

确认动作

1683870857938.png
1683871525849.png
1683873050484.png

确认 Kubernetes 插件的操作是否正常。

后台的插件种类繁多。
在这里尝试一下Kubernetes的插件。

安装Kubernetes插件

请点击这里访问官方网站。
进行插件安装。

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

请打开编辑器,找到路径为 packages/app/src/components/catalog/EntityPage.tsx 的文件,并进行以下修改。

import { EntityKubernetesContent } from '@backstage/plugin-kubernetes';

In addition, make the following additions to the existing serviceEntityPage.

const serviceEntityPage = (
  <EntityLayout>
    {/* other tabs... */}
+   <EntityLayout.Route path="/kubernetes" title="Kubernetes">
+     <EntityKubernetesContent refreshIntervalMs={30000} />
+   </EntityLayout.Route>
  </EntityLayout>
);

如果相应的目录拥有Kubernetes资源,将会显示如下所示的选项卡。

1683866152466.png

另外,参数refreshIntervalMs的意思是设置内容自动更新的间隔,如果不设置,则默认为10秒。

然后在后端也添加插件。
安装插件。

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

创建调用Kubernetes后端插件的文件。

cat << EOF > ./packages/backend/src/plugins/kubernetes.ts
import { KubernetesBuilder } from '@backstage/plugin-kubernetes-backend';
import { Router } from 'express';
import { PluginEnvironment } from '../types';
import { CatalogClient } from '@backstage/catalog-client';

export default async function createPlugin(
  env: PluginEnvironment,
): Promise<Router> {
  const catalogApi = new CatalogClient({ discoveryApi: env.discovery });
  const { router } = await KubernetesBuilder.createBuilder({
    logger: env.logger,
    config: env.config,
    catalogApi,
    permissions: env.permissions,
  }).build();
  return router;
}
EOF

请将Kubernetes插件用于后端的index.ts进行修改。
在packages/backend/src/index.ts中使用编辑器打开,并添加以下内容。

import kubernetes from './plugins/kubernetes';

在同一个文件的main函数中,接下来添加以下内容。

async function main() {
  // ...
+ const kubernetesEnv = useHotMemoize(module, () => createEnv('kubernetes'));
  // ...
+ apiRouter.use('/kubernetes', await kubernetes(kubernetesEnv));

在中国的土著语言中,将以下句子进行改写(只需要一个选择):

设置集群信息(app-config.yaml)

为了进行后续的Kubernetes插件验证,我们需要进行与EKS的联动配置。
在官方文档中找不到设置方法,所以参考了Stack Overflow上的这篇文章。
将上下文与EKS匹配,使用kubectl cluster-info获取集群的终端URL。

$ kubectl cluster-info
Kubernetes control plane is running at https://xxxxxxxxxx.gr7.us-east-1.eks.amazonaws.com

使用获取的URL来向app-config.yaml文件中追加设置。请将以下的URL和名称修改为您自己的环境。如果没有使用环境变量AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY,请先导出。

kubernetes:
  serviceLocatorMethod:
    type: 'multiTenant'
  clusterLocatorMethods:
    - type: 'config'
      clusters:
        - url: https://xxxxxxxxxx.gr7.us-east-1.eks.amazonaws.com
          name: my-cluster-eks
          authProvider: 'aws'
          skipTLSVerify: true
          skipMetricsLookup: true

auth:
  environment: 'development'
  providers:
    aws:
      development:
        accessKeyId: ${AWS_ACCESS_KEY_ID}
        secretAccessKey: ${AWS_SECRET_ACCESS_KEY}

设定完毕后,重新启动后台。

确认行动

请修正先前在适当的GitHub存储库中创建的catalog-info.yaml文件如下所示。

apiVersion: backstage.io/v1alpha1
kind: Component
metadata:
  name: hello-tanzu-backstage
  annotations:
    github.com/project-slug: imurata/hello-tanzu-backstage
+   'backstage.io/kubernetes-label-selector': 'app=hello-tanzu-backstage'
spec:
- type: other
+ type: service
  lifecycle: unknown
  owner: guests
1683875994525.png

如果使用命令创建部署资源,则会自动标记app=<deployment名称>。我们尝试使用命令创建资源。

kubectl create deploy hello-tanzu-backstage --image nginx --replicas 3 -n demo
1683876517086.png

总结

在后台进行部署到引入Kubernetes插件的过程中,确认可以看到与集群中的目录相关联的资源。
由于引入门槛较高,希望未来能更容易地引入。

广告
将在 10 秒后关闭
bannerAds