您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關如何為Kubernetes制作一個Helm圖表,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
創建Helm圖表
首先確認我們已安裝了先決條件。
$ which helm ## this can be in any folder as long as it returns in the path/usr/local/bin/helm$ minikube status ## if it shows Stopped, run `minikube start`host: Runningkubelet: Runningapiserver: Runningkubeconfig: Configured
啟動新的Helm圖表需要一個簡單的命令:
$ helm create mychartname
就本教程而言,將圖表命名為buildachart:
$ helm create buildachartCreating buildachart$ ls buildachart/Chart.yaml charts/ templates/ values.yaml
檢查圖表的結構
現在,您已經創建了圖表,請查看其結構以查看內部內容。您看到的前兩個文件Chart.yaml和 values.yaml定義了圖表的內容以及部署時其中的值。查看Chart.yaml,您可以看到Helm圖表結構的輪廓:
apiVersion: v2name: buildachartdescription: A Helm chart for Kubernetes# A chart can be either an 'application' or a 'library' chart.## Application charts are a collection of templates that can be packaged into versioned archives# to be deployed.## Library charts provide useful utilities or functions for the chart developer. They're included as# a dependency of application charts to inject those utilities and functions into the rendering# pipeline. Library charts do not define any templates and therefore cannot be deployed.type: application# This is the chart version. This version number should be incremented each time you make changes# to the chart and its templates, including the app version.version: 0.1.0# This is the version number of the application being deployed. This version number should be# incremented each time you make changes to the application.appVersion: 1.16.0
第一部分包括圖表正在使用的API版本(這是必需的),圖表的名稱以及圖表的描述。下一部分描述了圖表的類型(默認情況下為應用程序),將要部署的圖表的版本以及應用程序的版本(在進行更改時應遞增)。
圖表中最重要的部分是模板目錄。它包含將部署到群集中的應用程序的所有配置。如下所示,該應用程序具有基本的部署,入口,服務帳戶和服務。該目錄還包括一個測試目錄,其中包括一個測試到應用程序的連接的測試。這些應用程序功能中的每一個都在templates /下具有其自己的模板文件:
$ ls templates/NOTES.txt _helpers.tpl deployment.yaml ingress.yaml service.yaml serviceaccount.yaml tests/
還有另一個目錄,稱為圖表,該目錄為空。它允許您添加部署應用程序所需的從屬圖表。一些針對應用程序的Helm圖表最多需要與主應用程序一起部署四個額外的圖表。發生這種情況時,將使用每個圖表的值更新值文件,以便同時配置和部署應用程序。這是高級得多的配置(在本介紹性文章中我不會介紹),因此將圖表/文件夾留空。
了解和編輯值
模板文件的設置格式可從values.yaml文件收集部署信息。因此,要自定義Helm圖表,您需要編輯值文件。默認情況下,values.yaml文件如下所示:
# Default values for buildachart.# This is a YAML-formatted file.# Declare variables to be passed into your templates.replicaCount: 1image:repository: nginxpullPolicy: IfNotPresentimagePullSecrets: []nameOverride: ""fullnameOverride: ""serviceAccount: # Specifies whether a service account should be createdcreate: true # Annotations to add to the service accountannotations: {} # The name of the service account to use. # If not set and create is true, a name is generated using the fullname templatename:podSecurityContext: {} # fsGroup: 2000securityContext: {} # capabilities: # drop: # - ALL # readOnlyRootFilesystem: true # runAsNonRoot: true # runAsUser: 1000service:type: ClusterIPport: 80ingress:enabled: falseannotations: {} # http://kubernetes.io/ingress.class: nginx # http://kubernetes.io/tls-acme: "true"hosts:- host: chart-example.localpaths: []tls: [] # - secretName: chart-example-tls # hosts: # - chart-example.localresources: {} # We usually recommend not to specify default resources and to leave this as a conscious # choice for the user. This also increases chances charts run on environments with little # resources, such as Minikube. If you do want to specify resources, uncomment the following # lines, adjust them as necessary, and remove the curly braces after 'resources:'. # limits: # cpu: 100m # memory: 128Mi # requests: # cpu: 100m # memory: 128MinodeSelector: {}tolerations: []affinity: {}
基本配置
從頂部開始,您可以看到copyingCount自動設置為1,這意味著只會出現一個pod。在此示例中,您只需要一個Pod,但是您可以看到告訴Kubernetes運行多個Pod以實現冗余是多么容易。
該圖像部分有你需要看兩樣東西:庫你在哪里拉你的圖像和pullPolicy。pullPolicy設置為IfNotPresent ; 這意味著如果群集中不存在該映像,則該映像將下載該映像的新版本。有兩個其他選項:Always,這意味著它將在每次部署或重新啟動時提取映像(在映像失敗的情況下,我總是建議這樣做)和Latest,它將始終提取最新版本的。可用的圖像。如果您相信映像存儲庫與部署環境兼容,則最新消息可能會很有用,但并非總是如此。
將值更改為Always。
之前:
image:repository: nginxpullPolicy: IfNotPresent
后來:
image:repository: nginxpullPolicy: Always
命名和加密
接下來,查看圖表中的替代。第一個替代是imagePullSecrets,它是提取秘密(例如,您已將其作為私有注冊表的憑據生成的密碼或API密鑰)的設置。接下來是nameOverride和fullnameOverride。從您開始掌控create的那一刻起,它的名稱(buildachart)就添加到了許多配置文件中-從上面的YAML文件到templates / helper.tpl文件。如果在創建圖表后需要重命名圖表,則此部分是執行此操作的最佳位置,因此您不會錯過任何配置文件。
使用替代更改圖表的名稱。
之前:
imagePullSecrets: []nameOverride: ""fullnameOverride: ""
后來:
imagePullSecrets: []nameOverride: "cherry-awesome-app"fullnameOverride: "cherry-chart"
帳目設置
服務帳戶提供了一個用戶身份,可以在群集內的Pod中運行。如果保留為空白,則將使用helpers.tpl文件根據全名生成名稱。我建議始終設置一個服務帳戶,以便該應用程序將直接與圖表中控制的用戶相關聯。
作為管理員,如果使用默認服務帳戶,則權限將太少或太多,因此請更改此設置。
之前:
serviceAccount: # Specifies whether a service account should be createdcreate: true # Annotations to add to the service accountannotations: {} # The name of the service account to use. # If not set and create is true, a name is generated using the fullname templateName:
后來:
serviceAccount: # Specifies whether a service account should be createdcreate: true # Annotations to add to the service accountannotations: {} # The name of the service account to use. # If not set and create is true, a name is generated using the fullname templateName: cherrybomb
安全設置
您可以配置pod安全性,以設置要使用的文件系統組類型或可以使用和不能使用哪個用戶的限制。了解這些選項對于保護Kubernetes吊艙很重要,但是對于本示例,我將不贅述。
podSecurityContext: {} # fsGroup: 2000securityContext: {} # capabilities: # drop: # - ALL # readOnlyRootFilesystem: true # runAsNonRoot: true # runAsUser: 1000
聯網設置
此圖表中有兩種不同類型的網絡選項。一個使用帶有ClusterIP地址的本地服務網絡,該網絡將服務公開在群集內部的IP上。選擇此值可使與您的應用程序關聯的服務僅可從群集內部訪問(并通過ingress,默認情況下設置為false)。另一個網絡選項是NodePort,它在靜態分配的端口上在每個Kubernetes節點的IP地址上公開服務。建議使用此選項來運行minikube,因此可將其用于此方法。
之前:
service:type: ClusterIPport: 80ingress:enabled: false
后來:
service:type: NodePortport: 80ingress:enabled: false
資源設置
Helm允許您顯式分配硬件資源。您可以配置Helm圖表可以請求的最大資源量以及可以接收的最大限制。由于我在筆記本電腦上使用Minikube,因此我將通過刪除花括號和哈希值(將注釋轉換為命令)來設置一些限制。
之前:
resources: {}# We usually recommend not to specify default resources and to leave this as a conscious# choice for the user. This also increases chances charts run on environments with little# resources, such as Minikube. If you do want to specify resources, uncomment the following# lines, adjust them as necessary, and remove the curly braces after 'resources:'.# limits:# cpu: 100m# memory: 128Mi# requests:# cpu: 100m# memory: 128Mi
后來:
resources: # We usually recommend not to specify default resources and to leave this as a conscious # choice for the user. This also increases chances charts run on environments with little # resources, such as Minikube. If you do want to specify resources, uncomment the following # lines, adjust them as necessary, and remove the curly braces after 'resources:'.limits:cpu: 100mmemory: 128Mirequests:cpu: 100mmemory: 128Mi
公差,節點選擇器和關聯性
最后三個值基于節點配置。盡管我無法在本地配置中使用它們中的任何一個,但我仍將說明它們的用途。
想要將應用程序的一部分分配給Kubernetes集群中的特定節點時,nodeSelector會派上用場。如果您具有特定于基礎架構的應用程序,則可以設置節點選擇器名稱,并在Helm圖表中匹配該名稱。然后,在部署應用程序時,它將與匹配選擇器的節點關聯。
容差,污點和親和力一起工作,以確保Pod在單獨的節點上運行。節點親和力是的性質豆莢該吸引他們的一組節點(無論是作為一個偏好或硬要求)。污點是相反它們允許節點以排斥一套豆莢。
實際上,如果節點受到污染,則意味著該節點無法正常工作或可能沒有足夠的資源來容納應用程序部署。容差設置為調度程序監視的鍵/值對,以確認節點將與部署一起使用。
節點相似性在概念上類似于nodeSelector:它使您可以根據節點上的標簽來限制Pod可以調度哪些節點。但是,標簽不同,因為它們與適用于schedule的規則匹配。
nodeSelector: {}tolerations: []affinity: {}
開始部署
現在,您已經對創建Helm圖表進行了必要的修改,可以使用Helm命令對其進行部署,在圖表上添加名稱點,添加值文件并將其發送到命名空間:
$ helm install my-cherry-chart buildachart/ --values buildachart/values.yamlRelease “my-cherry-chart” has been upgraded. Happy Helming!
該命令的輸出將為您提供連接到應用程序的后續步驟,包括設置端口轉發,以便您可以從本地主機訪問該應用程序。要遵循這些說明并連接到Nginx負載均衡器:
$ export POD_NAME=$(kubectl get pods -l "http://app.kubernetes.io/name=buildachart,app.kubernetes.io/instance=my-cherry-chart" -o jsonpath="{.items[0].metadata.name}")$ echo "Visit http://127.0.0.1:8080 to use your application"Visit http://127.0.0.1:8080 to use your application$ kubectl port-forward $POD_NAME 8080:80Forwarding from 127.0.0.1:8080 -> 80Forwarding from [::1]:8080 -> 80
查看已部署的應用程序
要查看您的應用程序,請打開Web瀏覽器:
關于“如何為Kubernetes制作一個Helm圖表”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。