安装
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 信息,你需要排除故障.