集群模板 ¶
命令 kops replace
可以用 yaml 文件中的配置替换集群的预期配置(参见 cli/kops_replace.md)。
可以使用命令 kops toolbox template
从模板生成该 yaml 文件(参见 cli/kops_toolbox_template.md)。
本文档详细介绍了使用的模板语言。
作为 --template
传递的文件必须是 go 模板。示例
# File cluster.tmpl.yaml
apiVersion: kops.k8s.io/v1alpha2
kind: InstanceGroup
metadata:
labels:
kops.k8s.io/cluster: {{.clusterName}}.{{.dnsZone}}
name: nodes
spec:
image: {{ ChannelRecommendedImage .cloud .kubernetesVersion .architecture }}
kubernetesVersion: {{ ChannelRecommendedKubernetesUpgradeVersion .kubernetesVersion }}
machineType: m4.large
maxPrice: "0.5"
maxSize: 20
minSize: 15
role: Node
rootVolumeSize: 100
subnets:
- {{.awsRegion}}a
- {{.awsRegion}}b
- {{.awsRegion}}c
您可以通过使用 --values PATH
命令行选项传递环境文件,例如。请注意,--values
是一个切片,因此可以多次定义;每个配置文件都会覆盖配置(因此假设重复值,顺序很重要);这种用法的案例是上游集群可以覆盖的默认配置。
作为 --values
传递的文件必须包含模板中引用的变量。示例
# File values.yaml
clusterName: eu1
kubernetesVersion: 1.7.1
dnsZone: k8s.example.com
awsRegion: eu-west-1
当使用 --values
传递多个环境文件时,kOps 将执行深度合并,例如,给定以下两个文件
# File values-a.yaml
instanceGroups:
foo:
ami: ami-1234567
type: m4.large
# File values-b.yaml
instanceGroups:
foo:
type: t2.large
将导致 instanceGroups.foo
对象具有两个属性:{"ami": "ami-1234567", "type": "t2.large"}
。
除了通过环境文件指定值外,还可以使用 --set
和 --set-string
命令行选项直接在命令行上传递变量。这两个选项之间的区别是,--set-string
将始终产生一个字符串值,而 --set
将导致值被解析为一个 YAML 值,例如,值 true
在使用 --set
时将变成一个布尔值,而在使用 --set-string
时它将是文字字符串 "true"
。指定变量的格式如下
kops toolbox template --template mytemplate.tpl --set 'version=1.0,foo.bar=baz' --set-string 'foo.myArray={1,2,3}' --set 'foo.myArray[1]=false,foo.myArray[3]=4'
这将产生与使用以下文件中的 --values
选项相同的值
version: 1.0
foo:
bar: baz
myArray:
- "1"
- false
- "3"
- 4
运行 kops toolbox template
将用值替换模板中的占位符并生成文件 output.yaml,然后可以使用它用 kops replace -f cluster.yaml
替换预期的集群配置。
注意:创建集群预期配置模板时,您可以
- 使用
kops get k8s-cluster.example.com -o yaml > cluster-desired-config.yaml
创建集群预期配置文件(参见 cli/kops_get.md)。此文件中的值在 cluster_spec.md 中定义。 - 用占位符替换该文件中的值以创建模板。
模板 ¶
--template
命令行选项可以指向特定的文件或包含模板集合的目录。一个示例用法是;
$ kops toolbox template --values dev.yaml --template cluster.yaml --template instance_group_directory
cluster.yaml(例如,您的主集群规范)将首先写入,然后写入 instance_group_directory 目录中找到的任何模板。请注意,工具箱会自动为您在文档之间添加 YAML 分隔符。
代码片段 ¶
工具箱模板还支持将代码块重用或分解成代码片段目录。通过将 --snippets PATH
传递到包含模板的目录;
$ kops toolbox template --values dev.yaml --template cluster.yaml --template instancegroups --snippets snippets
下面的示例假设您已将适当的文件(即节点.json、master.json 等)放到代码片段目录中。请注意,代码片段的命名空间是平面的,并且始终是文件路径的 basename();因此 snippets/components/docker.options
仍然被称为 'docker.options'。
apiVersion: kops.k8s.io/v1alpha2
kind: Cluster
metadata:
name: {{ .environment }}.{{ .dns_zone }}
spec:
docker:
{{ include "docker" . | indent 4 }}
additionalPolicies:
master: |
{{ include "masters.json" . | indent 6 }}
node: |
{{ include "nodes.json" . | indent 6 }}
模板函数 ¶
kOps 特定函数 ¶
ChannelRecommendedKopsKubernetesVersion ¶
此函数返回针对运行的 kops 版本推荐的 kubernetes 版本。
ChannelRecommendedKubernetesUpgradeVersion¶
此函数返回推荐的 kubernetes 版本,前提是您当前运行 <kubernetesVersion>
。通常,这是给定通道支持的最新修补程序版本。
ChannelRecommendedImage ¶
此函数返回给定云提供商和 kubernetes 版本的推荐镜像。
Sprig 函数 ¶
您可以在模板中使用完整的 Sprig 函数 集。请注意,如果您想使用 'defaults' 函数,请在命令行上通过 --fail-on-missing=false
关闭验证检查;
image: {{ default $image $node.image }}
machineType: {{ default $instance $node.machine_type }}
maxSize: {{ default "10" $node.max_size }}
minSize: {{ default "1" $node.min_size }}
Sprig 的 toJson 函数 也支持分配整个数组。
# template
spec:
kubernetesApiAccess: {{.allowedIPs | toJson }}
# values
allowedIPs:
- 1.2.3.4/32
- 4.3.2.1/32
# rendered
spec:
kubernetesApiAccess: ["1.2.3.4/32","4.3.2.1/32"]
格式化 ¶
golang 模板中的格式化很痛苦!在语句的开头或结尾处正确使用它可能会让人恼火,因此添加了一个 --format-yaml=true
(默认为 false)命令行选项。这将首先取消序列化生成的 content(执行语法验证),然后重新序列化 content,删除所有这些讨厌的格式问题,换行符等。