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 :
-
minikube version: v1.14.0. Tải xuống và cài đặt theo hướng dẫn sau:
Bạn đang đọc: Hướng dẫn tạo Helm chart trong 10 phút – TEL4VN
Link
- helm chart v3. 4.0 – rc. 1. Tải xuống và setup theo hướng dẫn sau :Link
TÓM TẮT
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 đó :
|
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-> |
Cuối cùng thì bạn sẽ có tác dụng như sau :
Nguồn bài viết : https://opensource.com
Source: https://shopdothang.com
Category: Kiến thức cuộc sống