【发布时间】:2022-01-30 18:59:03
【问题描述】:
我正在练习 GitOps,并希望尽可能地自动化。 ArgoCD 与 Crossplane 一起基于清单创建我的集群。当集群启动并运行时,Crossplane 会创建一个 Secret,其中包含一个常规的 kubeconfig 文件,可以像任何其他 kubeconfig 一样下载和使用该文件。
在 ArgoCD 中,我必须在 AppProject-manifest 中分配目标集群 IP 地址。
我想自动完成这项任务。
也许有人知道执行此类任务的工具。我假设这些步骤在 K8s 世界中很常见,但我不知道它们。如果没有这样的工具,我想走手动的方式。
原始 kubeconfig 密码:
data:
kubeconfig: YXBpVmVyc2lvbj..........1VKbFJFTkRRVkl5WjBGM1NVSkJaMGxDUVblahblh..g==
kind: Secret
metadata:
creationTimestamp: "2022-01-24T17:09:07Z"
name: cluster-MY_CLUSTER-NAME-cp
namespace: default
resourceVersion: "7413"
uid: 25346457-cc78-4e21-9cba-e291b2251c84
type: Opaque
也就是base64解码后对应的kubeconfig
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: LS0tLSBLAHBLAH_BLAH_B0K
server: https://123.456.678.0:6443 # <<---- THIS IP SHOULD BE EXTRACTED
name: MY_CLUSTER-staging-cp
contexts:
- context:
cluster: MY_CLUSTER-staging-cp
user: MY_CLUSTER-staging-cp
name: MY_CLUSTER-staging-cp
current-context: MY_CLUSTER-staging-cp
kind: Config
preferences: {}
users:
- name: MY_CLUSTER-staging-cp
user:
client-certificate-data: LS0tL...........StkZk9IdWpqT2JmQjlHcG5maWpMOXZPODQ9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0
client-key-data: LS0tLS1CRUd...........JTiQo=
这是我的目标清单:
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
name: staging
spec:
destinations:
- namespace: "staging"
server: $STAGING_IP # <<-- THE PLACE TO PUT THE IP ADDRESS
我可以从秘密中提取地址:
export STAGING_IP=$(kubectl get secret cluster-details-vonhier-staging-cp -o jsonpath="{.data.kubeconfig}" | base64 -d| yq e ".clusters[0].cluster.server" -)
并通过以下方式应用它:
yq e --inplace ".spec.destinations[0].server = \"${STAGING_IP}\"" app-projects/staging.yml
结果如我所料:
目的地: - 命名空间:“生产” 服务器:“https://123.456.678.0:6443”
这行得通。
但是如何将它“打包”到集群中呢?它在本地工作,..
- 是
kind: Job-manifest 的用例吗? - 或者有类似的东西吗?
- 此类任务的任何特定图像?
感谢您为我指明正确的方向
【问题讨论】:
标签: kubernetes extract argocd kubernetes-jobs crossplane