我正在练习 GitOps,并希望尽可能地自动化。ArgoCD 与 Crossplane 一起基于清单创建我的集群。当集群启动并运行时,Crossplane 会创建一个Secret
包含常规kubeconfig
文件的文件,该文件可以像任何其他 kubeconfig 一样下载和使用。
在 ArgoCD 中,我必须在 -manifest 中分配目标集群 IP 地址AppProject
。
这个任务我想自动化。
也许有人知道执行此类任务的工具。我假设这些步骤在 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是一个用例吗?- 或者有没有类似的东西?
- 此类任务的任何特定图像?
感谢您为我指明正确的方向