k8s中Chart模板流程控制if_with_range和变量

Chart模板流程控制if_with_range和变量

1)if

修改values.yaml

cat > values.yaml <<EOF
myname: aming
service:
  type: ClusterIP
  port: 80
  myport: 8080
EOF

修改service.yaml

cat > templates/service.yaml <<EOF
apiVersion: v1
kind: Service
metadata:
  name: testserivce
  labels:
    app: myapp
spec:
  type: {
  { .Values.service.type }}
  ports:
    {
  {- if eq .Values.web "nginx" }}
    - port: {
  { .Values.service.port }}
    {
  {- else }}
    - port: {
  { .Values.service.myport }}
    {
  {- end }}
      targetPort: http
      protocol: TCP
      name: http
EOF

说明:在if else end 左边加-,是为了去掉空行。{ {- 表示删除左边的所有空格,直到非空格字符,而 -}}表示删除右边的所有空格。注意,换行符也是空格,当然还包括空格,TAB字符

渲染

helm template testrelease . --set web=nginx

  ports:
    - port: 80

如果不定义web变量的值,port为8080

helm template testrelease .

  ports:
    - port: 8080

2)with 限定作用域

with 的语法类似简单的 if:

{
  { with PIPELINE }}
  # restricted scope
{
  { end }}

没有用 with 的例子:

values.yaml:

env:
  host: localhost
  user: test
  hello: world

deployment.yaml 的引用:

       {
  {- if .Values.env }}
        env:
        - name: host
          value: {
  { .Values.env.host }}
        - name: user
          value: {
  { .Values.env.user }}
        - name: hello
          value: {
  { .Values.env.hello }}
        {
  {- end }}

上面的变量引用都需要从.Values开始, 有点繁琐。

with 的例子:

deployment.yaml 添加 with 以后:

       {
  {- with .Values.env }}
        env:
        - name: host
          value: {
  { .host }}
        - name: user
          value: {
  { .user }}
        - name: hello
          value: {
  { .hello }}
        {
  {- end }}

with 语句块里, 把当前范围定义在了.Values.env这个变量上了。

渲染后结果:

env:
 - name: host
   value: localhost
 - name: user
   value: test
 - name: hello
   value: world

3)range 实现循环

在values.yaml 文件中添加上一个变量列表:

cat > values.yaml <<EOF
myname: aming
service:
  type: ClusterIP
  port: 80
  myport: 8080
test:
  - 1
  - 2
  - 3
EOF

循环打印该列表:

cat > templates/configmap.yaml <<EOF
apiVersion: v1
kind: ConfigMap
metadata:
  name: {
  { .Release.Name }}-configmap
data:
  myvalue: "Hello World"
  myname: {
  { quote .Values.myname }}
  test: |
  {
  {- range .Values.test }}
    - {
  { . }}   ##遍历循环打印所有元素
  {
  {- end }}
EOF

渲染

helm template testrelease .

  test: |
    - 1
    - 2
    - 3

Chart模板中的变量

变量在模板中,使用变量的场合不多,但个别情况下不得不使用变量。

问题 1:获取数组键值

values.yaml

env:
  NAME: "gateway"
  JAVA_OPTS: "-Xmx1G"

deployment.yaml

...
env:
  {
  {- range $k, $v := .Values.env }}
    - name: {
  { $k }}
      value: {
  { $v | quote }}
   {
  {- end }}

结果如下

env:
  - name: JAVA_OPTS
    value: "-Xmx1G"
  - name: NAME
    value: "gateway"

上面在 range 循环中使用 $k 和 $v 两个变量来接收后面列表循环的键和值。

问题 2:with 中不能使用内置对象

with 语句块内不能带 .Release.Name 对象,否则报错。我们可以将该对象赋值给一个变量可以来解决这个问题:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: {
  { .Release.Name }}-deployment
spec:
  replicas: {
  { .Values.replicas }}
  template:
metadata:
  labels:
    project: {
  { .Values.label.project }}
    app: {
  { quote .Values.label.app }}
   {
  {- with .Values.label }}
     project: {
  { .project }}
     app: {
  { .app }}
     release: {
  { .Release.Name }}
    {
  {- end }}

相关推荐

  1. k8sChart模板流程控制if_with_range变量

    2023-12-22 20:12:01       41 阅读
  2. k8sChart的命名模板

    2023-12-22 20:12:01       38 阅读
  3. K8S的环境变量

    2023-12-22 20:12:01       36 阅读
  4. k8sdeployment模板

    2023-12-22 20:12:01       32 阅读
  5. k8s,configMap与环境变量的关系

    2023-12-22 20:12:01       8 阅读
  6. k8s部署模板

    2023-12-22 20:12:01       40 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-22 20:12:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-22 20:12:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-22 20:12:01       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-22 20:12:01       20 阅读

热门阅读

  1. Watchdogs

    Watchdogs

    2023-12-22 20:12:01      35 阅读
  2. 基于K-means和形态学算法的叶子病虫害检测

    2023-12-22 20:12:01       40 阅读
  3. 基于FSRCNN的图像超分辨重建算法附Matlab代码

    2023-12-22 20:12:01       38 阅读
  4. [蓝桥杯 2013 省 AB] 错误票据

    2023-12-22 20:12:01       34 阅读
  5. P2P应用

    P2P应用

    2023-12-22 20:12:01      46 阅读
  6. elementui下选框获取后端数据并查询

    2023-12-22 20:12:01       39 阅读
  7. React尝鲜

    2023-12-22 20:12:01       41 阅读
  8. k8s pod常用资源清单

    2023-12-22 20:12:01       30 阅读
  9. spark中 write.csv时, 添加第一行的标题title

    2023-12-22 20:12:01       44 阅读
  10. 力扣面试经典题之数组/字符串

    2023-12-22 20:12:01       46 阅读
  11. libp2p服务发现之 Multicast DNS(mDNS)

    2023-12-22 20:12:01       32 阅读