Hướng dẫn tạo Helm chart trong 10 phút – TEL4VN

Helm là một trình quản trị gói ứng dụng cho Kubernetes, điều phối tải xuống, thiết lập và tiến hành ứng dụng. Helm chart là cách để bạn xác lập một ứng dụng gồm có những tài nguyên nào trong Kubernetes .
Tại sao bạn lại sử dụng Helm ư ? chính do Helm giúp quản trị việc tiến hành những ứng dụng thuận tiện hơn trong Kubernetes bằng cách sử dụng những temlplate đã được làm sẵn. Tất cả những Helm chart đều có cấu trúc giống nhau nhưng vẫn hoàn toàn có thể linh động để chạy bất kể ứng dụng nào trên Kubernetes. Helm cũng tương hỗ việc quản trị phiên bản nhằm mục đích việc theo dõi sự biến hóa của từng phiên bản ứng dụng được tiến hành .
Trong bài viết hôm này, mình sẽ nói về việc làm thế nào để tạo một Helm Chart với Minikube. Cụ thể hơn, bạn sẽ tạo một Web Server chạy Nginx. Trong ví dụ này, mình triển khai trên môi trường tự nhiên như sau :

Cách khởi tạo một Helm chart #

Trước khi khởi đầu, bạn cần xác nhận lại rằng Minikube và Helm đã được setup đúng :

USD which helm # #
/ usr / local / bin / helm
USD minikube status # #ifit shows Stopped, run ` minikube start `
host :Running
kubelet :Running
apiserver : Running
kubeconfig :Configured

Bắt đầu tạo một Helm chart mới sử dụng một câu lệnh sau :

USD helm create tel4vnchart

Trong bài viết này, mình sẽ tạo một chart có tên là tel4vnchart:

USD helm create tel4vnchart
Creating tel4vnchart
USDlstel4vnchart /
Chart. yaml charts / templates / values.yaml

Sau bước trên, bạn đã tạo một chart, giờ hãy cùng nhìn xem bên trong một chart bao gồm những thứ gì. Trước tiên, 2 file bạn nhìn thấy là Chart.yaml và values.yaml. Mở file Chart.yaml, bạn sẽ xem cấu trúc của chart bao gồm những gì:

apiVersion : v2
name : tel4vnchart
description : A Helm chartforKubernetes

# A chart canbeeitheran ' application 'ora ' library 'chart .
#
# Application charts areacollection of templates that canbepackaged into versioned archives
#to bedeployed .
#
# Library charts provide useful utilities or functionsforthe 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

Phần tiên phong gồm thông số kỹ thuật về API version mà chart này sẽ sử dụng. ( bắt buôc ). Tên của chart và diễn đạt của nó. Phần tiếp theo sẽ là loại chart ( mặc định là application ), tiếp theo là phiên bản chart mà ta sẽ tiến hành và phiên bản ứng dụng này .
Phần quan trọng nhất của chart là thư mực template. Trong đó gồm toàn bộ những thiết lập mà ứng dụng của bạn sẽ tiến hành trong cluster. Như bạn thấy ở bên dưới, ứng dụng này gồm có những phần tiến hành cơ bản nhất là ingress, service account, và service. Ngoài ra còn có thư mục test, gồm có những kiểm tra dùng để check liên kết vào bên trong ứng dụng .

USDlstemplates /
NOTES.txt _helpers. tpl deployment.yaml ingress.yaml service.yaml serviceaccount.yaml tests /

Ngoài các file trong thư mục template, bạn còn có thư mục charts/. Trong đó bao gồm các chart khác mà ứng dụng của bạn cần để triển khai. Một số chart cần thêm chart khác để có thể bổ sung được thì các chart bổ sung đó sẽ được để vào đây. Tạm thời bạn bỏ qua vấn đề này.

Giải thích và chỉnh sửa giá trị file config #

Thông số về các giá trị tài nguyên, cấu hình hạ tầng mà ứng dụng sử dụng sẽ được lưu trong file values.yaml. Trước đó, bạn sẽ cùng nói qua về file values.yaml.

# Default valuesfortel4vnchart .
# Thisis aYAML-formattedfile.
# Declare variablesto bepassed into your templates .

replicaCount : 1

image :
repository : nginx
pullPolicy : IfNotPresent

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

serviceAccount :
# Specifies whetheraservice account shouldbecreated
create : true
# Annotationstoaddtothe service account
annotations :{ }
# The name of the service accounttouse .
# If notsetand createistrue ,anameisgenerated using the fullname template
name :

podSecurityContext :{ }
# fsGroup :2000

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

service :
type : ClusterIP
port : 80

ingress :
enabled : false
annotations :{ }
# kubernetes.io/ingress.class :nginx
# kubernetes.io/tls-acme :" true "
hosts :
- host :chart-example.local
paths :[ ]
tls :[ ]
# - secretName : chart-example-tls
# hosts :
# - chart-example.local

resources :{ }
# We usually recommend nottospecify default resources andtoleave thisas aconscious
# choiceforthe user. This also increases chances charts runonenvironments with little
# resources, suchasMinikube. If youdowanttospecify resources, uncomment the following
# lines, adjust themasnecessary, and remove the curly braces after' resources : '.
# limits :
# cpu :100m
# memory :128Mi
# requests :
# cpu :100m
# memory :128Mi

nodeSelector : { }

tolerations :[ ]

affinity : { }

Trên cùng của file, bạn có thể thấy thông số replicaCount được đặt mặc định là 1. Nó có nghĩa là sẽ chỉ có 1 pod được tạo khi ứng dụng chạy. Nếu bạn cần nhiều hơn 1 pod thì hãy chỉnh sửa thông số này. Bạn sẽ để nguyên là 1 trong bài viết này.

Đoạn image trong phần này sẽ gồm 2 điểm bạn cần quan tâm: repository – nơi bạn sẽ tải xuống các image để triển khai và pullPolicy – điều kiện để bạn tải xuống images mới. Hiện tại pullPolicy được cài đặt là IfNotPresent nghĩa là tự động tải xuống image khi nó chưa có trên máy. Ở đây bạn sẽ sử dụng Always để có thể luôn tải xuống image mỗi khi triển khai hoặc Latest để tải xuống image mới nhất mỗi khi triển khai.

Hiện tại :

image :
repository : nginx
pullPolicy : IfNotPresent

Sau đó :

image :
repository : nginx
pullPolicy : Always

Các thông số kỹ thuật trong Helm chart #

Thông số naming và secrets

#

Tiếp theo bạn đến với thông số imagePullSecrets – đây là cài đặt một khoá bí mật, mật khẩu hoặc API key để bạn có thể tải xuống image từ một Private Registy. Tiếp theo là nameOverride  và fullnameOverride. 2 thông số này được hiểu là khi bạn chạy câu lệnh heml create thì đã đặt tên cho chart là tel4vnchart nhưng nếu bạn cần phải đổi tên chart sau khi bạn tạo nó thì bạn có thể thay đổi nó ở đây:

Hiện tại :

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

Sau đó :

imagePullSecret

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

Thông sốAccounts #

Trường service accounts cung cấp xác thực người dùng khi chạy một pod bên trong cluster. Nếu phần này Trống, nó sẽ được sinh tự động theo full name được chỉ định trong helpers.tpl. mình kiến nghị nên có service account được cài để ứng dụng có thể được liên kết với người dùng ngay trong chart.

Hiện tại :

serviceAccount :
# Specifies whetheraservice account shouldbecreated
create : true
# Annotationstoaddtothe service account
annotations :{ }
# The name of the service accounttouse .
# If notsetand createistrue ,anameisgenerated using the fullname template
Name :

Sau đó :

serviceAccount :
# Specifies whetheraservice account shouldbecreated
create : true
# Annotationstoaddtothe service account
annotations :{ }
# The name of the service accounttouse .
# If notsetand createistrue ,anameisgenerated using the fullname template
Name : cherrybomb

Thông sốSecurity #

Bạn hoàn toàn có thể setup pod security để số lượng giới hạn nhóm người hoặc người dùng nhất định được can thiệp vào pod. Hiểu được những thông số kỹ thuật trong phần này sẽ giúp tăng năng lực bảo mật thông tin cho pod nhưng trong bài viết này, mình sẽ bỏ lỡ :

podSecurityContext :{ }
# fsGroup :2000

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

Thông sốNetworking #

Có 2 loại cài đặt khác nhau trong phần này có thể được chỉ định trong chart. Đầu tiên là sử dụng mạng local với ClusterIP. Khi đó ứng dụng sẽ được expose trên địa chỉ ip bên trong của Cluster. Với thông số này, ứng dụng của bạn chỉ có thể truy cập ở bên cluster (hoặc thông qua ingress, mặc định thông số ingress được đặt là false). Cài đặt khác là NodePort. Nó sẽ expose ứng dụng trên mỗi địa chỉ của từng node trong Kubernetes Cluster:

Hiện tại :

service :
type : ClusterIP
port : 80

ingress :
enabled : false

Sau đó :

service :
type : NodePort
port : 80

ingress :
enabled : false

Thông sốResources #

Helm được cho phép bạn chỉnh sửa thông số kỹ thuật phần cứng sẽ cung ứng để chạy ứng dụng. Bạn hoàn toàn có thể thông số kỹ thuật giá trị lớn nhất và nhỏ nhất phần cứng sẽ cung ứng. Trong bài viết này, bạn sẽ số lượng giới hạn lại như bên dưới :
Hiện tại :

resources :{ }
# We usually recommend nottospecify default resources andtoleave thisas aconscious
# choiceforthe user. This also increases chances charts runonenvironments with little
# resources, suchasMinikube. If youdowanttospecify resources, uncomment the following
# lines, adjust themasnecessary, and remove the curly braces after' resources : '.
# limits :
# cpu :100m
# memory :128Mi
# requests :
# cpu :100m
# memory :128Mi

Sau đó :

resources :
# We usually recommend nottospecify default resources andtoleave thisas aconscious
# choiceforthe user. This also increases chances charts runonenvironments with little
# resources, suchasMinikube. If youdowanttospecify resources, uncomment the following
# lines, adjust themasnecessary, and remove the curly braces after' resources : '.
limits :
cpu :100m
memory :128Mi
requests :
cpu :100m
memory :128Mi

Tolerations, node selectors, affinities #

Cuối cùng là 3 thông số kỹ thuật :

  • nodeSelector: chỉ định rằng bạn sẽ tiến hành ứng dụng trên những node nào trong cluster .
  • taining: chỉ định thông số kỹ thuật để vô hiệu một node ra khỏi quy trình tiến hành
  • affinity: chỉ định thông số kỹ thuật để thêm ưu tiên chọn một node khi tiến hành

Trong bài viết này, để đơn giản hoá việc tạo Helm chart, mình sẽ không đề cập đến việc chỉnh sửa những thông số kỹ thuật này :

nodeSelector : { }

tolerations :[ ]

affinity : { }

Triển khai Helm chart #

Sau những bước trên, bạn đã chỉnh sửa những thông số kỹ thuật thiết yếu để tạo một Helm chart. Tiếp sẽ là bước tiến hành chart này trên cluster của bạn :

USD helm install my-tel4vn-chart tel4vnchart / -- values tel4vnchart / values.yaml
Release" my-tel4vn-chart "has been upgraded. Happy Helming !

Câu lệnh này sẽ hiển thị tiếp những bước để bạn setup làm thế nào liên kết được mình ứng dụng. Ví dụ như bên dưới :

USD export POD_NAME = $ ( kubectl get pods -l " app.kubernetes.io/name=tel4vnchart,app.kubernetes.io/instance=my-tel4vn-chart "-ojsonpath =" {. items [ 0 ]. metadata.name } ")
USDecho " Visit http://127.0.0.1:8080 to use your application "
Visit http : / /127.0.0.1:8080 touse your application
USD kubectl port-forward $ POD_NAME8080:80
Forwarding from127.0.0.1:8080->80
Forwarding from [ ::1] :8080->

80

Cuối cùng thì bạn sẽ có tác dụng như sau :

Nginx welcome screen

Nguồn bài viết : https://opensource.com

ĐÁNH GIÁ post
Bài viết liên quan

Tư vấn miễn phí (24/7) 094 179 2255