Kubernetes
我们与 Kubernetes 的集成可根据您的定义直接查询您的 Kubernetes 集群。 通过使用我们的 Kubernetes 集成,您可以以透明、高效和精确的方式直接从您的 k8s 集群向 Port 中引用实时数据,从而确保只有您需要的信息才会出现在软件目录中,并保持更新。
我们与 Provider 的集成提供了实时事件处理功能,可在 Port 内准确实时呈现您的 k8s 集群。
💡 Kubernetes 输出程序常见用例
例如,我们的 Kubernetes 导出器可以轻松地将集群中的实时数据直接填入软件目录:
- 映射集群中的所有资源,包括namespace、pods、replica sets、cluster nodes、deployments和其他集群对象;
- 从集群中获取实时元数据,如_复制数量_、部署健康状况、_节点健康状况_等;
- 使用关系在 Port 内创建完整、易懂的 k8s 集群地图;
- 从 ArgoCD、Istio 等常见 CRD 映射您的 Kubernetes 资源;
- 等等。
工作原理
Port 的 Kubernetes 输出程序允许您将 K8s API 支持的所有数据显示正在运行的服务、环境等。 通过开源的 Kubernetes 输出程序,您可以对来自 K8s 的数据执行提取、转换、加载(ETL),将其转换为所需的软件目录数据模型。
导出器使用安装在集群上的 Helm chart 进行部署,一旦设置完成,它就会持续同步更改,这意味着所有更改、删除或添加都会准确、自动地反映在 Port 中。
helm chart 使用的是存储在门户内集成中的 YAML 配置。 该配置描述了负责将数据加载到开发者门户的 ETL 流程。 该方法反映了一个黄金分割点,即过于主观的 k8s 可视化可能不适合所有人,而过于宽泛的方法可能会给开发者门户引入不必要的复杂性。
下面是集成配置中的一个示例片段,演示了从集群获取 ReplicaSet
数据并将其导入软件目录的 ETL 流程:
导出器利用JQ JSON processor 对 Kubernetes 对象中的现有字段和值进行选择、修改、连接、转换和其他操作。
###出口商 JQ 配置
导出器配置是您指定要从 k8s 集群中查询的确切资源的方式,也是您指定要从集群中填充数据的实体和属性的方式。
下面是一个配置块示例:
resources: # List of K8s resources to list, watch, and export to Port.
- kind: apps/v1/replicasets # group/version/resource (G/V/R) format
selector:
query: .metadata.namespace | startswith("kube") | not # JQ boolean query. If evaluated to false - skip syncing the object.
port:
entity:
mappings: # Mappings between one K8s object to one or many Port Entities. Each value is a JQ query.
- identifier: .metadata.name
title: .metadata.name
blueprint: '"deploymentConfig"'
properties:
creationTimestamp: .metadata.creationTimestamp
annotations: .metadata.annotations
status: .status
输出端配置结构
-
配置 YAML 的根键是
resources
键:resources:
- kind: apps/v1/replicasets
selector:
... -
k8s API 或 CRD 按照组/版本/资源(G/V/R)格式为对象指定了 "类型 "键:
resources:
- kind: apps/v1/replicasets
selector:
...
:::提示 要列出、观察和导出可用的 Kubernetes 资源,请访问here::::
-
通过 "选择器 "和 "查询 "键,你可以准确地筛选出指定 "类型 "中的哪些对象将被录入软件目录
resources:
- kind: apps/v1/replicasets
selector:
query: .metadata.namespace | startswith("kube") | not # JQ boolean query. If evaluated to false - skip syncing the object.
port:
一些被用于的示例:
-
要同步指定 "类型 "的所有对象: 请勿指定 "选择器 "和 "查询 "键;
-
要同步指定
种类
中与 Kubernetes 内部系统无关的所有对象,请使用:query: .metadata.namespace | startswith("kube") | not
-
要同步指定 "类型 "中以 "生产 "开头的所有对象,请使用
query: .metadata.namespace | startswith("production")
-
等。
-
Port"、"实体 "和 "映射 "键打开了用于将 Kubernetes 对象字段映射到Port实体的部分。entity
resources:
- kind: apps/v1/replicasets
selector:
query: .metadata.namespace | startswith("kube") | not
port:
entity:
mappings: # Mappings between one K8s object to one or many Port Entities. Each value is a JQ query.
- identifier: .metadata.name
title: .metadata.name
blueprint: '"myBlueprint"'
properties:
creationTimestamp: .metadata.creationTimestamp
annotations: .metadata.annotations
status: .status
relations:
myRelation: .metadata.namespace
先决条件
- Port 的 Kubernetes 输出程序是使用Helm 安装的,因此必须安装 Helm 才能使用输出程序的图表。有关安装说明,请参阅 Helm 的documentation ;
- 安装 Kubernetes 输出程序需要Port credentials 。
Get your Port credentials
To get your Port API credentials go to your Port application, click on the ...
button in the top right corner, and select Credentials
. Here you can view and copy your CLIENT_ID
and CLIENT_SECRET
:
安装
从以下安装方法中选择一种:
- Helm
- ArgoCD
-
使用以下命令添加 Port 的 Helm 软件源:
helm repo add port-labs https://port-labs.github.io/helm-charts
helm repo update
来获取最新版本的图表。 然后您可以运行 helm search repo port-labs
来查看图表。2.运行以下命令,在 Kubernetes 集群上安装导出器服务:
helm upgrade --install my-port-k8s-exporter port-labs/port-k8s-exporter \
--create-namespace --namespace port-k8s-exporter \
--set secret.secrets.portClientId=YOUR_PORT_CLIENT_ID --set secret.secrets.portClientSecret=YOUR_PORT_CLIENT_SECRET \
--set stateKey="k8s-exporter" \
--set eventListenerType="POLLING" \
--set "extraEnv[0].name"="CLUSTER_NAME" \
--set "extraEnv[0].value"=YOUR_PORT_CLUSTER_NAME
- 通过创建以下
my-port-k8s-exporter.yaml
配置清单,安装my-port-k8s-exporter
ArgoCD 应用程序:
ArgoCD Application
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-port-k8s-exporter
namespace: argocd
spec:
destination:
namespace: my-port-k8s-exporter
server: https://kubernetes.default.svc
project: default
sources:
- repoURL: 'https://port-labs.github.io/helm-charts/'
chart: port-k8s-exporter
targetRevision: LATEST_HELM_RELEASE
helm:
valueFiles:
- $values/argocd/my-port-k8s-exporter/values.yaml
parameters:
- name: secret.secrets.portClientId
value: YOUR_PORT_CLIENT_ID
- name: secret.secrets.portClientSecret
value: YOUR_PORT_CLIENT_SECRET
- name: stateKey
value: YOUR_CLUSTER_NAME
- name: extraEnv[0].name
value: CLUSTER_NAME
- name: extraEnv[0].value
value: YOUR_CLUSTER_NAME
- repoURL: YOUR_GIT_REPO_URL
targetRevision: main
ref: values
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
2.使用 kubectl
配置应用程序清单:
kubectl apply -f my-port-k8s-exporter.yaml
完成!导出器将很快开始以 Port 实体的形式从 Kubernetes 集群创建和更新对象。
更新出口商配置
要更新导出器资源映射,请在 Port 中打开data sources 页面,点击您的 Kubernetes 集成。 然后编辑导出器配置,点击 "保存并重新同步 "按钮。
示例
有关实用配置及其相应的蓝图定义,请参阅examples 页面。
高级
有关高级用例和 Output,请参阅advanced 页面。