如何参数化 eksctl 的配置文件?

Mar*_*icz 1 amazon-eks eksctl

我有以下配置文件(为简洁而编辑):

apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig

metadata:
  name: FOO-CLUSTER
  region: eu-central-1

nodeGroups:
  - name: FOO-CLUSTER-group-1
    [..]
  - name: FOO-CLUSTER-group-2
    [..]
Run Code Online (Sandbox Code Playgroud)

它将用于创建带有 的集群eksctl create cluster -f config.yml

我想避免对集群名称进行硬编码(即FOO-CLUSTER在本例中)并将其提取到参数(例如环境变量或附加文件或 CLI 参数),以便我稍后可以使用相同的文件来创建BAR-CLUSTERFEE-CLUSTER

是否可以?

mre*_*rre 6

我认为这是不可能的。sed但是,您可以做的是在运行命令之前使用该文件作为模板并使用它。因为kubectl apply我已经使用了这种技术并且效果很好。您甚至可以使用变量。例如:

template=`curl -sS https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/v1.1.4/docs/examples/alb-ingress-controller.yaml | sed -e "s/# - --cluster-name=devCluster/- --cluster-name=$CLUSTER_NAME/g" -e "s/# - --aws-vpc-id=vpc-xxxxxx/- --aws-vpc-id=$VPC_ID/g" -e "s/# - --aws-region=us-west-1/- --aws-region=$AWS_REGION/g"` 
echo "$template" | kubectl apply -f -
Run Code Online (Sandbox Code Playgroud)

我从未使用过它,eksctl但我认为没有理由它不起作用。


以类似的方式,您可以使用envsubst.

apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig

metadata:
  name: ${CLUSTER_NAME}
  region: eu-central-1

nodeGroups:
  - name: ${CLUSTER_NAME}-group-1
    [..]
  - name: ${CLUSTER_NAME}-group-2
    [..]
Run Code Online (Sandbox Code Playgroud)
export CLUSTER_NAME=foo

cat cluster-config.yml | envsubst '${CLUSTER_NAME}' > cluster-config-foo.yml
Run Code Online (Sandbox Code Playgroud)

  • 我最终使用了“envsubst”,但想法是相同的,所以我接受了你的答案。 (2认同)