<SOURCE_TEXT>
此操作员旨在在 Kubernetes 集群中启用 K8sGPT。 它将允许您创建一个自定义资源,以定义受管 K8sGPT 工作负载的行为和范围。分析和输出也将可配置,以实现与现有工作流程的集成。
安装
helm repo add k8sgpt https://charts.k8sgpt.ai/
helm repo update
helm install release k8sgpt/k8sgpt-operator -n k8sgpt-operator-system --create-namespace
运行示例
-
从安装部分安装操作员。
-
创建密钥:
kubectl create secret generic k8sgpt-sample-secret --from-literal=openai-api-key=$OPENAI_TOKEN -n k8sgpt-operator-system
- 应用 K8sGPT 配置对象:
kubectl apply -f - << EOF
apiVersion: core.k8sgpt.ai/v1alpha1
kind: K8sGPT
metadata:
name: k8sgpt-sample
namespace: k8sgpt-operator-system
spec:
ai:
enabled: true
model: gpt-3.5-turbo
backend: openai
secret:
name: k8sgpt-sample-secret
key: openai-api-key
# anonymized: false
# language: english
noCache: false
repository: ghcr.io/k8sgpt-ai/k8sgpt
version: v0.3.8
#integrations:
# trivy:
# enabled: true
# namespace: trivy-system
# filters:
# - Ingress
# sink:
# type: slack
# webhook: <webhook-url> # use the sink secret if you want to keep your webhook url private
# secret:
# name: slack-webhook
# key: url
#extraOptions:
# backstage:
# enabled: true
EOF
- 一旦应用了自定义资源,K8sGPT 部署将被安装, 你将能够在几分钟后看到分析结果对象(如果你的集群中有任何问题):
❯ kubectl get results -o json | jq .
{
"apiVersion": "v1",
"items": [
{
"apiVersion": "core.k8sgpt.ai/v1alpha1",
"kind": "Result",
"spec": {
"details": "错误消息表示 Kubernetes 中的服务没有任何关联的端点,而这些端点应标记为“control-plane=controller-manager”。 \n\n要解决此问题,你需要为与服务匹配的端点添加“control-plane=controller-manager”标签。一旦端点正确标记,Kubernetes 可以将其与服务关联,错误将得到解决。",
监控多个集群
k8sgpt.ai操作员允许通过提供kubeconfig值监控多个集群。
如果你希望采用平台工程,例如为多个利益相关者运行一系列Kubernetes集群,这个功能可能会很有意思。 特别是针对基于集群API的基础设施设计,k8sgpt.ai操作员将被安装在同一个集群API管理集群中: 这个管理集群负责根据基础设施提供商为种子集群创建所需的集群。
一旦基于集群API的集群已经配置,根据命名约定${CLUSTERNAME}-kubeconfig
的kubeconfig将可用在同一个命名空间中:
常规的密钥数据键为value,这可以用来指示k8sgpt.ai操作员监控远程集群,而不会将任何资源部署到种子集群。
$: kubectl get clusters
NAME PHASE AGE VERSION
capi-quickstart Provisioned 8s v1.28.0
$: kubectl get secrets
NAME TYPE DATA AGE
capi-quickstart-kubeconfig Opaque 1 8s
安全问题
如果你的设置需要最小特权方法, 必须提供不同的
kubeconfig
,因为集群API生成的一个绑定到具有cluster-admin
权限的admin
用户。
一旦你有一个有效的kubeconfig
,可以按如下方式创建一个k8sgpt
实例。
apiVersion: core.k8sgpt.ai/v1alpha1
kind: K8sGPT
metadata:
name: capi-quickstart
namespace: default
spec:
ai:
anonymized: true
backend: openai
language: english
model: gpt-3.5-turbo
secret:
key: api_key
name: my_openai_secret
kubeconfig:
key: value
name: capi-quickstart-kubeconfig
一旦应用,k8sgpt.ai操作员将使用/spec/kubeconfig字段中定义的种子集群kubeconfig创建k8sgpt.ai部署。
结果对象将在部署k8sgpt.ai实例的同一个命名空间中可用, 并分别用以下键标记:
k8sgpts.k8sgpt.ai/name
: k8sgpt.ai实例名称k8sgpts.k8sgpt.ai/namespace
: k8sgpt.ai实例命名空间k8sgpts.k8sgpt.ai/backend
: AI 后端(如果指定)
感谢这些标签,可以根据指定的监控集群过滤结果, 而不会污染底层集群的k8sgpt.ai CRD,并消耗种子计算资源, 以及保密关于AI 后端驱动凭证。
如果/spec/kubeconfig字段缺失,k8sgpt.ai操作员将跟踪部署到的集群: 这是通过挂载所提供的ServiceAccount实现的。
远程缓存
Azure Blob 存储
-
从安装部分安装操作员。
-
创建密钥:
kubectl create secret generic k8sgpt-sample-cache-secret --from-literal=azure_client_id=<AZURE_CLIENT_ID> --from-literal=azure_tenant_id=<AZURE_TENANT_ID> --from-literal=azure_client_secret=<AZURE_CLIENT_SECRET> -n k8sgpt-
operator-system
- 应用 K8sGPT 配置对象:
kubectl apply -f - << EOF
apiVersion: core.k8sgpt.ai/v1alpha1
kind: K8sGPT
metadata:
name: k8sgpt-sample
namespace: k8sgpt-operator-system
spec:
ai:
model: gpt-3.5-turbo
backend: openai
enabled: true
secret:
name: k8sgpt-sample-secret
key: openai-api-key
noCache: false
repository: ghcr.io/k8sgpt-ai/k8sgpt
version: v0.3.8
remoteCache:
credentials:
name: k8sgpt-sample-cache-secret
azure:
# 存储帐户必须已经存在
storageAccount: "account_name"
containerName: "container_name"
EOF
S3
-
从安装部分安装操作员。
-
创建密钥:
kubectl create secret generic k8sgpt-sample-cache-secret --from-literal=aws_access_key_id=<AWS_ACCESS_KEY_ID> --from-literal=aws_secret_access_key=<AWS_SECRET_ACCESS_KEY> -n k8sgpt-
operator-system
- 应用 K8sGPT 配置对象:
kubectl apply -f - << EOF
apiVersion: core.k8sgpt.ai/v1alpha1
kind: K8sGPT
metadata:
name: k8sgpt-sample
namespace: k8sgpt-operator-system
spec:
ai:
model: gpt-3.5-turbo
backend: openai
enabled: true
secret:
name: k8sgpt-sample-secret
key: openai-api-key
noCache: false
repository: ghcr.io/k8sgpt-ai/k8sgpt
version: v0.3.8
remoteCache:
credentials:
name: k8sgpt-sample-cache-secret
s3:
bucketName: foo
region: us-west-1
EOF
其他 AI 后端示例
AzureOpenAI
1. 从[安装](#installation)部分安装操作员。- 创建密钥:
kubectl create secret generic k8sgpt-sample-secret --from-literal=azure-api-key=$AZURE_TOKEN -n k8sgpt-operator-system
- 应用 K8sGPT 配置对象:
kubectl apply -f - << EOF
apiVersion: core.k8sgpt.ai/v1alpha1
kind: K8sGPT
metadata:
name: k8sgpt-sample
namespace: k8sgpt-operator-system
spec:
ai:
enabled: true
secret:
name: k8sgpt-sample-secret
key: azure-api-key
model: gpt-35-turbo
backend: azureopenai
baseUrl: https://k8sgpt.openai.azure.com/
engine: llm
noCache: false
repository: ghcr.io/k8sgpt-ai/k8sgpt
version: v0.3.8
EOF
亚马逊 Bedrock
-
从安装部分安装操作员。
-
在 AWS 上运行时,您有多种方式授予托管的 K8sGPT 工作负载访问亚马逊 Bedrock 的权限。
- 使用 Kubernetes 服务账户授予 Bedrock 访问权限。这是为 Kubernetes Pod 分配权限的最佳实践方法。有几种方法可以做到这一点:
- 在 Amazon EKS 上,使用EKS Pod 身份
- 在 Amazon EKS 上,使用服务账户的 IAM 角色(IRSA)
- 在自我管理的 Kubernetes 上,使用服务账户的 IAM 角色(IRSA)和Pod 身份 Webhook
- 使用 Kubernetes Secret 中的 AWS 凭证授予 Bedrock 访问权限。注意,这违反了AWS 最佳实践,应谨慎使用。
要使用 Kubernetes 服务账户授予 Bedrock 访问权限,请创建一个具有 Bedrock 权限的 IAM 角色。以下是一个示例策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"bedrock:InvokeModel",
"bedrock:InvokeModelWithResponseStream"
],
"Resource": "*"
}
]
}
要使用 Kubernetes Secret 中的 AWS 凭证授予 Bedrock 访问权限,您可以创建一个密钥:
kubectl create secret generic bedrock-sample-secret --from-literal=AWS_ACCESS_KEY_ID="$(echo $AWS_ACCESS_KEY_ID)" --from-literal=AWS_SECRET_ACCESS_KEY="$(echo $AWS_SECRET_ACCESS_KEY)" -n k8sgpt-operator-system
- 应用 K8sGPT 配置对象:
kubectl apply -f - << EOF
apiVersion: core.k8sgpt.ai/v1alpha1
kind: K8sGPT
metadata:
name: k8sgpt-sample
namespace: k8sgpt-operator-system
spec:
ai:
enabled: true
secret:
name: bedrock-sample-secret
model: anthropic.claude-v2
region: eu-central-1
backend: amazonbedrock
noCache: false
repository: ghcr.io/k8sgpt-ai/k8sgpt
version: v0.3.29
EOF
LocalAI
-
从安装部分安装操作员。
-
按照LocalAI 安装指南安装 LocalAI。(使用 LocalAI 时,不需要 OpenAI 密钥)。
-
应用 K8sGPT 配置对象:
kubectl apply -f - << EOF
apiVersion: core.k8sgpt.ai/v1alpha1
kind: K8sGPT
metadata:
name: k8sgpt-local-ai
namespace: default
spec:
ai:
enabled: true
model: ggml-gpt4all-j
backend: localai
baseUrl: http://local-ai.local-ai.svc.cluster.local:8080/v1
noCache: false
repository: ghcr.io/k8sgpt-ai/k8sgpt
version: v0.3.8
EOF
注意:确保 baseUrl
的值是一个正确构造的 LocalAI 服务的DNS 名称。其形式应为:http://local-ai.<namespace_local_ai_was_installed_in>.svc.cluster.local:8080/v1。
- 同上例中的步骤 4。
K8sGPT 配置选项
ImagePullSecrets
您可以通过修改 `repository`、`version`、`imagePullSecrets` 使用自定义 k8sgpt 镜像。 `version` 实际上作为镜像标签。kubectl apply -f - << EOF
apiVersion: core.k8sgpt.ai/v1alpha1
kind: K8sGPT
metadata:
name: k8sgpt-sample
namespace: k8sgpt-operator-system
spec:
ai:
enabled: true
model: gpt-3.5-turbo
backend: openai
secret:
name: k8sgpt-sample-secret
key: openai-api-key
noCache: false
repository: sample.repository/k8sgpt
version: sample-tag
imagePullSecrets:
- name: sample-secret
EOF
接收器(集成)
接收器可用的可选参数。 (‘type’,‘webhook’ 是必填参数。)
工具 | 频道 | 图标网址 | 用户名 |
---|---|---|---|
Slack | |||
Mattermost | ✔️ | ✔️ | ✔️ |
Helm 值
详细信息请见此处