溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何為Kubernetes制作一個Helm圖表

發(fā)布時間:2021-12-24 16:24:15 來源:億速云 閱讀:101 作者:小新 欄目:云計算

這篇文章將為大家詳細講解有關如何為Kubernetes制作一個Helm圖表,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

創(chuàng)建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

檢查圖表的結構

現(xiàn)在,您已經創(chuàng)建了圖表,請查看其結構以查看內部內容。您看到的前兩個文件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圖表最多需要與主應用程序一起部署四個額外的圖表。發(fā)生這種情況時,將使用每個圖表的值更新值文件,以便同時配置和部署應用程序。這是高級得多的配置(在本介紹性文章中我不會介紹),因此將圖表/文件夾留空。

了解和編輯值

模板文件的設置格式可從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,這意味著只會出現(xiàn)一個pod。在此示例中,您只需要一個Pod,但是您可以看到告訴Kubernetes運行多個Pod以實現(xiàn)冗余是多么容易。

該圖像部分有你需要看兩樣東西:庫你在哪里拉你的圖像和pullPolicy。pullPolicy設置為IfNotPresent ; 這意味著如果群集中不存在該映像,則該映像將下載該映像的新版本。有兩個其他選項:Always,這意味著它將在每次部署或重新啟動時提取映像(在映像失敗的情況下,我總是建議這樣做)和Latest,它將始終提取最新版本的??捎玫膱D像。如果您相信映像存儲庫與部署環(huán)境兼容,則最新消息可能會很有用,但并非總是如此。

將值更改為Always。

之前:

image:repository: nginxpullPolicy: IfNotPresent

后來:

image:repository: nginxpullPolicy: Always

命名和加密

接下來,查看圖表中的替代。第一個替代是imagePullSecrets,它是提取秘密(例如,您已將其作為私有注冊表的憑據(jù)生成的密碼或API密鑰)的設置。接下來是nameOverride和fullnameOverride。從您開始掌控create的那一刻起,它的名稱(buildachart)就添加到了許多配置文件中-從上面的YAML文件到templates / helper.tpl文件。如果在創(chuàng)建圖表后需要重命名圖表,則此部分是執(zhí)行此操作的最佳位置,因此您不會錯過任何配置文件。

使用替代更改圖表的名稱。

之前:

imagePullSecrets: []nameOverride: ""fullnameOverride: ""

后來:

imagePullSecrets: []nameOverride: "cherry-awesome-app"fullnameOverride: "cherry-chart"

帳目設置

服務帳戶提供了一個用戶身份,可以在群集內的Pod中運行。如果保留為空白,則將使用helpers.tpl文件根據(jù)全名生成名稱。我建議始終設置一個服務帳戶,以便該應用程序將直接與圖表中控制的用戶相關聯(lián)。

作為管理員,如果使用默認服務帳戶,則權限將太少或太多,因此請更改此設置。

之前:

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安全性,以設置要使用的文件系統(tǒng)組類型或可以使用和不能使用哪個用戶的限制。了解這些選項對于保護Kubernetes吊艙很重要,但是對于本示例,我將不贅述。

podSecurityContext: {} # fsGroup: 2000securityContext: {} # capabilities: # drop: # - ALL # readOnlyRootFilesystem: true # runAsNonRoot: true # runAsUser: 1000

聯(lián)網設置

此圖表中有兩種不同類型的網絡選項。一個使用帶有ClusterIP地址的本地服務網絡,該網絡將服務公開在群集內部的IP上。選擇此值可使與您的應用程序關聯(lián)的服務僅可從群集內部訪問(并通過ingress,默認情況下設置為false)。另一個網絡選項是NodePort,它在靜態(tài)分配的端口上在每個Kubernetes節(jié)點的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

公差,節(jié)點選擇器和關聯(lián)性

最后三個值基于節(jié)點配置。盡管我無法在本地配置中使用它們中的任何一個,但我仍將說明它們的用途。

想要將應用程序的一部分分配給Kubernetes集群中的特定節(jié)點時,nodeSelector會派上用場。如果您具有特定于基礎架構的應用程序,則可以設置節(jié)點選擇器名稱,并在Helm圖表中匹配該名稱。然后,在部署應用程序時,它將與匹配選擇器的節(jié)點關聯(lián)。

容差,污點和親和力一起工作,以確保Pod在單獨的節(jié)點上運行。節(jié)點親和力是的性質豆莢該吸引他們的一組節(jié)點(無論是作為一個偏好或硬要求)。污點是相反它們允許節(jié)點以排斥一套豆莢。

實際上,如果節(jié)點受到污染,則意味著該節(jié)點無法正常工作或可能沒有足夠的資源來容納應用程序部署。容差設置為調度程序監(jiān)視的鍵/值對,以確認節(jié)點將與部署一起使用。

節(jié)點相似性在概念上類似于nodeSelector:它使您可以根據(jù)節(jié)點上的標簽來限制Pod可以調度哪些節(jié)點。但是,標簽不同,因為它們與適用于schedule的規(guī)則匹配。

nodeSelector: {}tolerations: []affinity: {}

開始部署

現(xiàn)在,您已經對創(chuàng)建Helm圖表進行了必要的修改,可以使用Helm命令對其進行部署,在圖表上添加名稱點,添加值文件并將其發(fā)送到命名空間:

$ helm install my-cherry-chart buildachart/ --values buildachart/values.yamlRelease “my-cherry-chart” has been upgraded. Happy Helming!

該命令的輸出將為您提供連接到應用程序的后續(xù)步驟,包括設置端口轉發(fā),以便您可以從本地主機訪問該應用程序。要遵循這些說明并連接到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圖表

關于“如何為Kubernetes制作一個Helm圖表”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。

AI