Skip to main content

安装

Kubernetes 功能是Backstage(Backstage)的一个插件,在查看软件目录中的实体时,它会作为一个选项卡显示出来。

如果您还没有设置Backstage,请阅读以下内容入门指导。

添加 Kubernetes 前端插件

第一步是将 Kubernetes 前端插件添加到您的 Backstage 应用程序中。

# From your Backstage root directory
yarn add --cwd packages/app @backstage/plugin-kubernetes

安装软件包后,您需要在相应的目录页面中添加 "Kubernetes "选项卡,从而在应用程序中导入该插件。

packages/app/src/components/catalog/EntityPage.tsx
import { EntityKubernetesContent } from '@backstage/plugin-kubernetes';

// You can add the tab to any number of pages, the service page is shown as an
// example here
const serviceEntityPage = (
<EntityLayout>
{/* other tabs... */}
<EntityLayout.Route path="/kubernetes" title="Kubernetes">
<EntityKubernetesContent refreshIntervalMs={30000} />
</EntityLayout.Route>
</EntityLayout>
);

注:

  • 实体库伯内核内容 "上可选的 "refreshIntervalMs "属性定义了内容自动刷新的时间间隔,如果未设置,则默认为 10 秒。

就是这样!但现在,我们需要 Kubernetes 后端插件才能让前端正常工作。

添加 Kubernetes 后端插件

导航至packages/backend的 Backstage 应用程序,并安装@backstage/plugin-kubernetes-backend包装

# From your Backstage root directory
yarn add --cwd packages/backend @backstage/plugin-kubernetes-backend

创建一个名为kubernetes.ts内侧packages/backend/src/plugins/并添加以下内容:

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;
}

并将插件导入到packages/backend/src/index.ts您需要添加三行代码,它们应添加在现有Backstage后端类似代码的附近。

packages/backend/src/index.ts
// ..
import kubernetes from './plugins/kubernetes';

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

就是这样!Kubernetes 的前端和后端现已添加到您的 Backstage 应用程序中。

自定义群集发现

如果现有的集群定位器不适合您的用例,可以实施自定义的Kubernetes 群集供应商.

更改以下内容packages/backend/src/plugins/kubernetes.ts:

packages/backend/src/plugins/kubernetes.ts
import {
ClusterDetails,
KubernetesBuilder,
KubernetesClustersSupplier,
} from '@backstage/plugin-kubernetes-backend';
import { Router } from 'express';
import { PluginEnvironment } from '../types';
import { Duration } from 'luxon';

export class CustomClustersSupplier implements KubernetesClustersSupplier {
constructor(private clusterDetails: ClusterDetails[] = []) {}

static create(refreshInterval: Duration) {
const clusterSupplier = new CustomClustersSupplier();
// setup refresh, e.g. using a copy of https://github.com/backstage/backstage/blob/master/plugins/kubernetes-backend/src/service/runPeriodically.ts
runPeriodically(
() => clusterSupplier.refreshClusters(),
refreshInterval.toMillis(),
);
return clusterSupplier;
}

async refreshClusters(): Promise<void> {
this.clusterDetails = []; // fetch from somewhere
}

async getClusters(): Promise<ClusterDetails[]> {
return this.clusterDetails;
}
}

export default async function createPlugin(
env: PluginEnvironment,
): Promise<Router> {

const { router } = await KubernetesBuilder.createBuilder({
const builder = await KubernetesBuilder.createBuilder({
logger: env.logger,
config: env.config,
}).build();
});
builder.setClusterSupplier(
CustomClustersSupplier.create(Duration.fromObject({ minutes: 60 })),
);
const { router } = await builder.build();

// ..
return router;
}

配置

在代码中安装插件后,您需要配置它们.

疑难解答

在代码中安装插件后,如果没有显示 Kubernetes 信息,你需要排除故障.