【2】k8s集群管理系列--包應用管理器之helm(Chart語法深入應用)

一、Chart模板:函數與管道

常用函數:
? quote:將值轉換為字符串,即加雙引號
? default:設置默認值,如果獲取的值為空則為默認值
? indent和nindent:縮進字符串
? toYaml:引用一塊YAML內容
? 其他函數:upper(轉換為大寫)、title(只首字母大寫)等

1.1 quote:將值轉換為字符串,即加雙引號

示例:nodeSelector標簽的值用了true正常使用會報錯,這是因為它是關鍵字,需要加引號才可以。

# values.yaml
nodeSelector:
gpu: true
# templates/deployment.yamlnodeSelector:
disktype: {{ quote .Values.nodeSelector.gpu }}

輸出效果:

# templates/deployment.yamlnodeSelector:
disktype: "true"

1.2 default:設置默認值,如果獲取的值為空則為默認值

示例:以防止忘記定義而導致模板文件缺少字段無法創建資源,這時可以為字段定義一個默認值。

image: {{ .Values.image.repository }}:{{ .Values.image.tag | default "latest" }}

這里用到了管道符“|”,前面的值傳遞后函數驗證是否為空。
假如.Values.image.tag這個變量值為空,輸出效果就如下:

image: nginx:latest

1.3 indent和nindent函數

indent和nindent函數都是縮進字符串,主要區別在于nindent會在縮進前多添加一個換行符。
示例:

apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: {{ .Release.Name | indent 6 }}
app: {{ .Release.Name | nindent 6 }}
...

后面的數字6,標識往后縮進6個字符
示例效果:

apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: web-ng
app: web-ng
...

1.4 toYaml:引用一塊YAML內容

示例:在values.yaml里寫結構化數據,引用內容塊

# values.yaml
resources:limits:cpu: 100mmemory: 128Mi
requests:cpu: 100mmemory: 128Mi

deployment.yaml引用values.yaml的變量值,并換行縮進10個字符

# templates/deployment.yaml
...
resources:
{{ toYaml .Values.resources | nindent 10 }}

deployment.yaml輸出的效果:

# templates/deployment.yaml
...
resources:limits:cpu: 100mmemory: 128Mirequests:cpu: 100mmemory: 128Mi

二、Chart模板:流程控制

Helm模板語言提供以下流程控制語句:
? if/else:條件判斷
? range:循環
? with:指定變量作用域

2.1 流程控制之if/else

# values.yaml
ingress:
enabled: false
# templates/ingress.yaml
{{ if .Values.ingress.enabled }}
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: web
spec:
rules:
- host: www.ctnrs.com
http:paths:- path: /pathType: Prefixbackend:service:name: webport:number: 80
{{ end }}

測試:helm install test --set ingress.enabled=true --dry-run mychart,效果為:不填充if包裹的內容

2.2 流程控制之range

# cat values.yaml
test:
- 1
- 2
- 3
# templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}
data:
test: |
{{- range .Values.test }}
{{ . }} # 引用當前元素
{{- end }}

輸出效果:

# templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: web-ng
data:test: - 1- 2- 3

2.3 流程控制之with

with語句可以允許將當前范圍 . 設置為特定的對象,比如我們前面一直使用
的 .Values.nodeSelecotr,我們可以使用 with來將 . 范圍指向 .Values.nodeSelecotr

# cat values.yaml
...
nodeSelector:team: agpu: yes
# cat templates/deployment.yaml
...
{{- with .Values.nodeSelector }}
nodeSelector:
team: {{ .team }}
gpu: {{ .gpu }}
{{- end }}

填充后的效果:

# templates/deployment.yaml
...
nodeSelector:
team: a
gpu: yes

三、Chart模板:命名模板

命名模板類似于開發語言中的函數。指一段可以直接被另一段程序或代碼引用的程序或代碼。
在編寫chart時,可以將一些重復使用的內容寫在命名模板文件中供公共使用,這樣可減少重
復編寫程序段和簡化代碼結構。
命名模塊使用define定義,template或include引入,在templates目錄中默認下劃線開頭的
文件為公共模板(helpers.tpl)。

定義模板:
示例:資源名稱生成指令放到公共模板文件,作為所有資源名稱

# cat templates/_helpers.tpl 注意是在_helpers.tpl文件寫模板
{{- define "fullname" -}}
{{- .Chart.Name -}}-{{ .Release.Name }}
{{- end -}}
# cat templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ template "fullname" . }}
...

使用模板:
template指令是將一個模板包含在另一個模板中的方法。但是,template函
數不能用于Go模板管道。為了解決該問題,引入include指令。(平時我們用include就行)

示例:
1 定義:

# cat _helpers.tpl
{{- define "labels" -}}
app: {{ template "fullname" . }}
chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
release: "{{ .Release.Name }}"
{{- end -}}

2 使用:

# cat deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "fullname" . }}
labels:
{{- include "labels" . | nindent 4 }}...

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/75603.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/75603.shtml
英文地址,請注明出處:http://en.pswp.cn/web/75603.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JVM 字節碼是如何存儲信息的?

JVM 字節碼是 Java 虛擬機 (JVM) 執行的指令集,它是一種與平臺無關的二進制格式,在任何支持 JVM 的平臺上都可運行的Java 程序。 字節碼存儲信息的方式,主要通過以下幾個關鍵組成部分和機制來實現: 1. 指令 (Opcodes) 和 操作數 …

基于51單片機語音實時采集系統

基于51單片機語音實時采集 (程序+原理圖+PCB+設計報告) 功能介紹 具體功能: 系統由STC89C52單片機ISD4004錄音芯片LM386功放模塊小喇叭LCD1602按鍵指示燈電源構成 1.可通過按鍵隨時選擇相應的錄音進行播…

關于 Java 預先編譯(AOT)技術的詳細說明,涵蓋 GraalVM 的配置、Spring Boot 3.x 的集成、使用示例及優缺點對比

以下是關于 Java 預先編譯(AOT)技術的詳細說明,涵蓋 GraalVM 的配置、Spring Boot 3.x 的集成、使用示例及優缺點對比: 1. 預先編譯(AOT)技術詳解 1.1 核心概念 AOT(Ahead-of-Time&#xff09…

【ROS2】行為樹:BehaviorTree

1、簡介 與狀態機不同,行為樹強調執行動作,而不是狀態之間的轉換。 行為樹是可組合的。可以重復使用簡單的行為來構建復雜的行為。 在游戲領域,行為樹已經比較流行了。主要用于維護游戲角色的各種動作和狀態。 ROS2的導航框架Navigation2中引入了行為樹來組織機器人的工作流…

Centos7.9 升級內核,安裝RTX5880驅動

系統鏡像下載 https://vault.centos.org/7.9.2009/isos/x86_64/CentOS-7-x86_64-DVD-2009.iso 系統安裝步驟省略 開始安裝顯卡驅動 遠程登錄查看內核 [root192 ~]# uname -a Linux 192.168.119.166 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x8…

多層感知機與全連接神經網絡關系解析

感知機(Perceptron)、多層感知機(MLP,Multilayer Perceptron)和全連接神經網絡(FCNN,Fully Connected Neural Network)是神經網絡發展過程中密切相關的概念,但它們有明確…

解析醫療器械三大文檔:DHF、DMR與DHR

醫療器械的 DHF、DMR 和 DHR 是質量管理體系(QMS)中的核心文件,貫穿產品全生命周期, 確保醫療器械的安全性、有效性和合規性。 一、三大文件的定義與法規依據 縮寫全稱法規依據(以 FDA 為例)核心目的DHF…

netty啟用websocket的壓縮機制

netty啟用websocket的壓縮機制 package com.aerotop.connector.websocket.base;import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelPipeline; import io.netty.channel.socket.SocketChannel; import io.netty.handler.codec.compression.JZlibDec…

可能存在特殊情況,比如控制臺顯示有延遲、緩沖問題等影響了顯示順序。

從控制臺輸出看,正常邏輯應是先執行 System.out.println(" 未處理異常演示 "); 輸出對應文本,再因 arr 為 null 訪問 length 觸發 NullPointerException 輸出異常信息。可能存在特殊情況,比如控制臺顯示有延遲、緩沖問題等影響…

第一節:React 基礎篇-React虛擬DOM原理及Diff算法優化策略

必考點:虛擬DOM樹對比(同級比較、Key的作用、組件類型判斷) 延伸:React 18中并發更新對Diff算法的影響 React虛擬DOM原理及Diff算法優化策略 虛擬DOM核心原理 概念: ? 虛擬DOM(Virtual DOM)…

Java spring mybatis面試題(200道),八股文

Java面試題 通過網盤分享的文件:面試題等2個文件 鏈接: https://pan.baidu.com/s/1Xw0PzkfAmL8uesYBvrW2-A?pwdpebt 提取碼: pebt mybatis相關 1、 什么是Mybatis? … 2 2、 Mybaits 的優點: … 2 3、 MyBatis 框架的缺點: ……

windows使用Python調用7-Zip【按大小分組】壓縮文件夾中所有文件

使用Python調用7-Zip【按大小分組】壓縮文件夾中所有文件 問題描述:方法前提條件任務完整代碼示例代碼如何工作? 問題描述: 我現在想把文件夾下的所有內容上傳到網盤,但是這個文件夾下的素材內容很多,使用分卷壓縮的話…

《Python星球日記》第26天:Matplotlib 可視化

名人說:路漫漫其修遠兮,吾將上下而求索。—— 屈原《離騷》 創作者:Code_流蘇(CSDN)(一個喜歡古詩詞和編程的Coder😊) 訂閱專欄:《Python星球日記》 目錄 一、Matplotlib 簡介1. 什么是 Matplo…

第1章 對大型語言模型的介紹

人類正處在一個關鍵轉折點。自2012年起,基于深度神經網絡的人工智能系統研發進入快速通道,將這一技術推向了新高度:至2019年底,首個能夠撰寫與人類文章真假難辨的軟件系統問世,這個名為GPT-2(生成型預訓練變…

dcsdsds

我將為您在頁面頂部添加歡迎內容&#xff0c;同時保持整體風格的一致性。以下是修改后的代碼&#xff0c;主要修改了模板部分和對應的樣式&#xff1a; vue 復制 <template><div class"main-wrapper"><!-- 新增歡迎部分 --><div class"…

學習MySQL的第八天

海到無邊天作岸 山登絕頂我為峰 一、數據庫的創建、修改與刪除 1.1 引言 在經過前面七天對于MySQL基本知識的學習之后&#xff0c;現在我們從基本的語句命令開始進入綜合性的語句的編寫來實現特定的需求&#xff0c;從這里開始需要我們有一個宏觀的思想&…

Linux-內核驅動-中斷-key

DEV_NAME&#xff1a;設備名稱。 wg&#xff1a;等待隊列頭&#xff0c;用于同步。 condition&#xff1a;條件變量&#xff0c;用于等待和喚醒。 中斷處理函數 irq_handler&#xff1a;處理中斷請求&#xff0c;設置條件變量并喚醒等待隊列中的進程。 文件操作函數 open…

asm匯編源代碼之按鍵處理相關函數

提供5個子程序: 1. 發送按鍵 sendkey 2. 檢測是否有按鍵 testkey 3. 讀取按鍵 getkey 4. 判斷鍵盤緩沖區是否為空 bufempty 5. 判斷鍵盤緩沖區是否已滿 buffull 具體功能及參數描述如下 sendkey proc  far ; axcharcode testkey proc  far ; out: ;   zf1 buff empt…

Java Collections 類中常用方法使用

一、Collections類 java.util.Collections 類是 Java 集合框架中的一個工具類&#xff0c;提供了一系列靜態方法來操作和處理各種類型的集合。這些方法簡化了對集合進行排序、查找、同步控制、創建只讀集合等常見操作的過程。 二、常用方法 方法類別??方法簽名??功能??需…

Linux網絡編程——數據鏈路層詳解,以太網、MAC地址、MTU、ARP、DNS、NAT、代理服務器......

目錄 一、前言 二、以太網 二、以太網幀格式 三、 MAC地址 四、MTU 1、數據鏈路層的數據分片 2、MTU對UDP協議的影響 3、MTU對TCP協議的影響 五、ARP協議 1、什么是ARP 2、ARP的作用 3、ARP協議的工作流程 4、ARP緩存表 5、ARP請求報文 6、中間人 六、DNS&…