Saturday, November 16, 2024

[Helm] Helm cơ bản

-

I. TỔNG QUAN

Tại sao bạn lại sử dụng Helm, vì Helm giúp quản lý việc triển khai các ứng dụng dễ dàng hơn trong Kubernetes bằng cách sử dụng các temlplate đã được làm sẵn. Tất cả các Helm chart đều có cấu trúc giống nhau nhưng vẫn có thể linh hoạt để chạy bất kì ứng dụng nào trên Kubernetes. Helm cũng hỗ trợ việc quản lý phiên bản nhằm việc theo dõi sự thay đổi của từng phiên bản ứng dụng được triển khai.

Helm có 4 khái niệm cơ bản:

1. Chart: là tập hợp những file YAML template của những Kubernetes resource cần thiết để dựng lên một ứng dụng Kubernetes. Để dễ hình dung, Chart của Helm có thể được so sánh giống như một Image của Docker. Đương nhiên Helm cũng có Helm Hub nơi để tìm kiếm và chia sẻ Chart của những ứng dụng phổ biến.

2. Config: nằm trong file values.yaml chứa những configuration dành riêng cho một bản release của Kubernetes application. Đó có thể là config cho service, ingress, deployment,… cho đến những application riêng biệt như Kafka, Consul, Vault, NATS-streaming,

3. Release: là một version của K8s application đang chạy dựa trên Chart và kết hợp với một Config cụ thể.

4. Repositories: Helm Charts có thể được publish thông qua nhiều repo khác nhau. Nó có thể là những private repo chỉ dùng trong nội bộ công ty, hoặc public thông qua Helm Hub. Một số Chart có thể có nhiều phiên bản của từng công ty hoặc publisher khác nhau. Riêng những Chart trong repo Stable thì luôn phải đáp ứng được tiêu chí từ Technical Requirements của Helm.

II. TẠO HELM CHART CƠ BẢN

Sau đây mình sẽ hướng dẫn các bạn tạo 1 helm chart cơ bản, trình tự các bước như sau:

1. Tạo 1 thư mục mới để sử dụng cho việc tạo helm chart.

mkdir helm
cd helm

2. Sử dụng command helm create <tên ứng dụng> để khởi tạo ban đầu. Ví dụ dưới mình sẽ tạo 1 ứng dụng tên là Prometheus.

helm create prometheus

3. Sau khi khởi tạo 1 helm chart mới ta sẽ thấy 1 thư mục có tên là tên của helm chart khi khởi tạo.

root@loadbalancer3:~/learn-devops/helm#  ll
total 12
drwxr-xr-x  3 root root 4096 Sep 22 08:19 ./
drwxr-xr-x 12 root root 4096 Sep 22 08:19 ../
drwxr-xr-x  4 root root 4096 Sep 22 08:19 prometheus/

4. Di chuyển vào thư mục vừa khởi tạo và list các file có trong đó. Trong bài viết này chúng ta chỉ quan tâm đến thư mục templates và 2 file values.yaml, Chart.yaml. Các thành phần khác chúng ta tìm hiểu sau nhé.

root@loadbalancer3:~/learn-devops/helm# cd prometheus/
root@loadbalancer3:~/learn-devops/helm/prometheus# ll
total 28
drwxr-xr-x 4 root root 4096 Sep 22 08:19 ./
drwxr-xr-x 3 root root 4096 Sep 22 08:19 ../
-rw-r--r-- 1 root root  349 Sep 22 08:19 .helmignore
-rw-r--r-- 1 root root 1146 Sep 22 08:19 Chart.yaml
drwxr-xr-x 2 root root 4096 Sep 22 08:19 charts/
drwxr-xr-x 3 root root 4096 Sep 22 08:19 templates/
-rw-r--r-- 1 root root 1877 Sep 22 08:19 values.yaml

5. File values.yaml mình sẽ làm rỗng nó cho đỡ rối, lát mình sẽ define lại cho file này.

root@loadbalancer3:~/learn-devops/helm/prometheus# echo '' > values.yaml

6. File Chart.yaml mình sẽ xóa hết các dòng comment cho đỡ rối và giữ lại một số trường cụ thể như dưới.

cat > /root/learn-devops/helm/prometheus/Chart.yaml << OEF
apiVersion: v2
name: prometheus
description: A Helm chart for Kubernetes
type: application
version: 0.1.0
appVersion: "1.16.0"
OEF

7. Chèn biến cho file ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: {{ .Release.Name }}
  namespace: ns-{{ .Release.Name }}
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx
  rules:
    - host: {{ .Values.hosts }}
      http:
        paths:
          - path: /
            pathType: {{ .Values.pathType }}
            backend:
              service:
                name: {{ .Release.Name }}
                port:
                  number: {{ .Values.exposePort }}

Diễn dải các trường như sau:

{{ .Release.Name }}: tên ứng dụng khi chúng ta truyền vào để chạy ứng dụng

{{ .Values.hosts }}, {{ .Values.pathType }}, {{ .Values.exposePort }} : value được define trong file values.yaml, chúng ta sẽ define nó ở phần tiếp theo.

8. Chèn biến cho file deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Release.Name }}
  namespace: ns-{{ .Release.Name }}
spec:
  selector:
    matchLabels: {{ include "common.labels" . | nindent 6 }}
  replicas: {{ .Values.replicas }}
  template:
    metadata:
      labels: {{ include "common.labels" . | nindent 8 }} 
    spec:
      containers:
        - name: {{ .Release.Name }}
          image: {{ .Values.image }}
          ports:
            - containerPort: {{ .Values.targetPort }}

9. Chèn biến cho file service.yaml

apiVersion: v1
kind: Service
metadata:
  name: {{ .Release.Name }}
  namespace: ns-{{ .Release.Name }}
  labels: {{ include "common.labels" . | nindent 4 }}
spec:
  ports:
    - name: {{ .Release.Name }}
      port: {{ .Values.exposePort }}
      targetPort: {{ .Values.targetPort }}
  type: {{ .Values.type }}
  selector: {{ include "common.labels" . | nindent 4 }}

10. Helm lint dùng để check lỗi chart, nếu có lỗi sẽ xuất ra thông báo dưới. Theo thông báo ở dưới thì chart đang gặp lỗi không thấy trường common.labels. Chúng ta sẽ define cho nó ở phần tiếp theo.

root@loadbalancer3:~/learn-devops/helm/prometheus# helm lint ./
==> Linting ./
[INFO] Chart.yaml: icon is recommended
[ERROR] templates/: template: prometheus/templates/deployment.yaml:6:13: executing "prometheus/templates/deployment.yaml" at <include "common.labels" .>: error calling include: template: no template "common.labels" associated with template "gotpl"

Error: 1 chart(s) linted, 1 chart(s) failed

11. Define value cho trường common.labels bằng cách tạo file có tên __helper.tpl (2 dấu gạch dưới) ở trong thư mục templates với nội dung bên dưới.

{{- define “common.labels” -}}: Cú pháp bắt đầu define “<tên của key>”, dấu gạch – có ý nghĩa là xóa tất cả các khoảng trống hoặc xuống dòng ở trước và sau dấu {{}}

label: {{ .Release.Name }}: với key là label sẽ có value là {{ .Release.Name }}

{{ .Release.Name }}: tên ứng dụng khi chúng ta truyền vào để chạy ứng dụng (mình đã nói ở trên)

{{- end }}: Đóng tác vụ define, dấu – có tác dụng tương tự như trên là xóa tất cả các khoảng trống hoặc xuống dòng ở trước và sau dấu {{

cat > /learn-devops/helm/prometheus/templates/__helper.tpl << OEF
{{- define "common.labels" -}}
label: {{ .Release.Name }}
run: {{ .Release.Name }}
{{- end }}
OEF

12. Define file values.yaml.

Cú pháp define như ở dưới, cách lấy value như sau:

Ví dụ nếu ta gọi {{ .Values.exposePort }} thì kết quả sẽ là 80 hoặc {{ .Values.replicas }} thì kết quả sẽ là 3. Rất đơn giản phải không nào.

#Deployment
image: prom/prometheus
replicas: 3

#Services
exposePort: 80
targetPort: 9090
type: LoadBalancer

#Ingress
pathType: Prefix
hosts: prometheus.hoanghd.com

13. Check lỗi lần nữa, ta thấy dòng thông báo [INFO] Chart.yaml: icon is recommended tức là không có lỗi. Kết thúc phần define các values.

root@loadbalancer3:~/learn-devops/helm/prometheus# helm lint ./
==> Linting ./
[INFO] Chart.yaml: icon is recommended

1 chart(s) linted, 0 chart(s) failed

14. Bây giờ ta thử in các template này ra màn hình xem kết quả nhé. Sử dụng command dưới để in thử các file template ra màn hình và quan sát kết quả. Nếu đúng như ý định đã khai báo, ta tiến hành qua bước tiếp theo.

root@loadbalancer3:~/learn-devops/helm/prometheus# helm template prometheus ./ 
---
# Source: prometheus/templates/service.yaml
apiVersion: v1
kind: Service
metadata:
  name: prometheus
  namespace: ns-prometheus
  labels: 
    label: prometheus
    run: prometheus
spec:
  ports:
    - name: prometheus
      port: 80
      targetPort: 9090
  type: LoadBalancer
  selector: 
    label: prometheus
    run: prometheus
---
# Source: prometheus/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: prometheus
  namespace: ns-prometheus
spec:
  selector:
    matchLabels: 
      label: prometheus
      run: prometheus
  replicas: 3
  template:
    metadata:
      labels: 
        label: prometheus
        run: prometheus 
    spec:
      containers:
        - name: prometheus
          image: prom/prometheus
          ports:
            - containerPort: 9090
---
# Source: prometheus/templates/ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: prometheus
  namespace: ns-prometheus
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx
  rules:
    - host: prometheus.hoanghd.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: prometheus
                port:
                  number: 80

15. Chúng ta thử instal chart này ta thấy kết quả trả về với status là deployed, REVISION là phiên bản thứ nhất đã được triển khai.

root@loadbalancer3:~/learn-devops/helm# helm install prometheus ./prometheus/ --namespace ns-prometheus --create-namespace --wait
NAME: prometheus
LAST DEPLOYED: Fri Sep 23 02:28:21 2022
NAMESPACE: ns-prometheus
STATUS: deployed
REVISION: 1
TEST SUITE: None

16. Sử dụng kubectl get ingress,po,svc -n ns-prometheus để hiển thị thông tin ứng dụng sau khi install chart.

root@loadbalancer3:~/learn-devops# kubectl get ingress,po,svc,ns -n ns-prometheus
NAME                                   CLASS   HOSTS                    ADDRESS          PORTS   AGE
ingress.networking.k8s.io/prometheus   nginx   prometheus.hoanghd.com   192.168.13.230   80      13m

NAME                              READY   STATUS    RESTARTS   AGE
pod/prometheus-5754c46bc6-84plc   1/1     Running   0          13m
pod/prometheus-5754c46bc6-h4tfm   1/1     Running   0          13m
pod/prometheus-5754c46bc6-sqtgw   1/1     Running   0          13m

NAME                 TYPE           CLUSTER-IP       EXTERNAL-IP      PORT(S)        AGE
service/prometheus   LoadBalancer   10.103.242.176   192.168.13.224   80:31645/TCP   13m

NAME                             STATUS   AGE
namespace/argocd                 Active   23h
namespace/default                Active   6d10h
namespace/kube-node-lease        Active   6d10h
namespace/kube-public            Active   6d10h
namespace/kube-system            Active   6d10h
namespace/kubernetes-dashboard   Active   6d10h
namespace/metallb-system         Active   6d10h
namespace/ns-prometheus          Active   13m

17. Nhớ trỏ domain đã khai báo trong ingress đến địa chỉ ip của cụm kubernetes nhé, ở đây địa chỉ ip 192.168.13.230 chính là virtual ip address loadbalancer cụm kubernetes của mình.

hoanghd@Has-MacMB ~ % cat /etc/hosts | grep prometheus.hoanghd.com
192.168.13.230 prometheus.hoanghd.com

18. Kiểm tra kết nối dến domain.

hoanghd@Has-MacMB ~ % ping prometheus.hoanghd.com
PING prometheus.hoanghd.com (192.168.13.230): 56 data bytes
64 bytes from 192.168.13.230: icmp_seq=0 ttl=64 time=0.432 ms
64 bytes from 192.168.13.230: icmp_seq=1 ttl=64 time=0.506 ms
64 bytes from 192.168.13.230: icmp_seq=2 ttl=64 time=0.570 ms
64 bytes from 192.168.13.230: icmp_seq=3 ttl=64 time=0.463 ms

--- prometheus.hoanghd.com ping statistics ---
6 packets transmitted, 6 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.357/0.448/0.570/0.076 ms

19. Thử dùng trình duyệt web truy cập domain trên và kết quả trả về thành công như hình dưới.

20. Mình sẽ thử thay đổi 1 số value bất kỳ và tiến hành update lại chart và kiểm tra lại kết quả nhé.

Ở đây mình sẽ thay đổi cổng exposePort từ 80 sang exposePort và hosts từ prometheus.hoanghd.com sang custom-prometheus.hoanghd.com.

root@loadbalancer3:~/learn-devops/helm# cat > prometheus/custom_value.yaml << OEF
exposePort: 8088
hosts: custom-prometheus.hoanghd.com
OEF

Ta chạy lệnh helm upgrade -f <đường dẫn đến file value cần upgrade>.

root@loadbalancer3:~/learn-devops/helm# helm upgrade prometheus ./prometheus/ -f prometheus/custom_value.yaml
Release "prometheus" has been upgraded. Happy Helming!
NAME: prometheus
LAST DEPLOYED: Fri Sep 23 03:08:39 2022
NAMESPACE: default
STATUS: deployed
REVISION: 2
TEST SUITE: None

Kết quả trả về như dưới với REVISION là phiên bản 2.

root@loadbalancer3:~/learn-devops/helm# helm list
NAME            NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                   APP VERSION
ingress         default         2               2022-09-16 04:33:00.964698745 +0000 UTC deployed        nginx-ingress-0.14.0    2.3.0      
prometheus      default         2               2022-09-23 03:08:39.494232288 +0000 UTC deployed        prometheus-0.1.0        1.16.0

21. Sử dụng kubectl get ingress,po,svc -n ns-prometheus để hiển thị thông tin ứng dụng sau khi upradge chart ta thấy:

– Hosts ở ingress đã đổi từ prometheus.hoanghd.com sang custom-prometheus.hoanghd.com

– Port expose ở service đã đổi từ 80 sang 8088.

root@loadbalancer3:~/learn-devops/helm# kubectl get ingress,po,svc,ns -n ns-prometheus
NAME                                   CLASS   HOSTS                           ADDRESS          PORTS   AGE
ingress.networking.k8s.io/prometheus   nginx   custom-prometheus.hoanghd.com   192.168.13.230   80      41m

NAME                              READY   STATUS    RESTARTS   AGE
pod/prometheus-5754c46bc6-84plc   1/1     Running   0          41m
pod/prometheus-5754c46bc6-h4tfm   1/1     Running   0          41m
pod/prometheus-5754c46bc6-sqtgw   1/1     Running   0          41m

NAME                 TYPE           CLUSTER-IP       EXTERNAL-IP      PORT(S)          AGE
service/prometheus   LoadBalancer   10.103.242.176   192.168.13.224   8088:31645/TCP   41m

NAME                             STATUS   AGE
namespace/argocd                 Active   23h
namespace/default                Active   6d22h
namespace/kube-node-lease        Active   6d22h
namespace/kube-public            Active   6d22h
namespace/kube-system            Active   6d22h
namespace/kubernetes-dashboard   Active   6d22h
namespace/metallb-system         Active   6d22h
namespace/ns-prometheus          Active   41m

22. Vì mình không có domain nên mình sẽ trỏ local host.

hoanghd@Has-MacMB ~ % cat /etc/hosts | grep prometheus.hoanghd.com
192.168.13.230 prometheus.hoanghd.com
192.168.13.230 custom-prometheus.hoanghd.com

23. Kết quả

24. Lưu ý nhỏ với các biến immutable.

Với helm ngoài các biến là immutable ví dụ như label thì không thể thay đổi, vì các trường immutable ví dụ như label người ta thường dùng nó để liên kết, tham chiếu với nhau thông qua label, nếu chúng ta thay đổi label sẽ gây mất đồng bộ, mất liên kết các ứng dụng nên mặc định các trường dạng immutable chúng ta không được phép upgrade, còn các trường khác các bạn có thể upgrade bình thường nhé.

Đối với các trường immutable cách duy nhất mà mình biết là mình sẽ hủy và triển khai lại helm chart này.

Dưới đây mình sẽ ví dụ thử thay đổi một trường immutable ví dụ là label.

Mình sẽ thay đổi 1 chút trong file /learn-devops/helm/prometheus/templates/__helper.tpl nội dung như dưới

label: {{ .Release.Name }} -> label: {{ .Values.customLabel }}

25. Kết quả sau khi thay đổi như sau

root@loadbalancer3:~/learn-devops/helm# cat /learn-devops/helm/prometheus/templates/__helper.tpl
{{- define "common.labels" -}}
label: {{ .Values.customLabel }}
run: {{ .Release.Name }}
{{- end }}

26. Bổ sung customLabel: prometheus-custom-label vào file custom_value.yaml

root@loadbalancer3:~/learn-devops/helm# cat >> prometheus/custom_value.yaml << OEF
customLabel: prometheus-custom-label
OEF

27. Tiến hành upgrade chart ta thấy kết quả báo lỗi không cho thay đổi các biến ở dạng immutable.

root@loadbalancer3:~/learn-devops/helm# helm upgrade prometheus ./prometheus/ -f prometheus/custom_value.yaml
Error: UPGRADE FAILED: cannot patch "prometheus" with kind Deployment: Deployment.apps "prometheus" is invalid: spec.selector: Invalid value: v1.LabelSelector{MatchLabels:map[string]string{"label":"prometheus-custom-label", "run":"prometheus"}, MatchExpressions:[]v1.LabelSelectorRequirement(nil)}: field is immutable

28. Để thay đổi được nó cách duy nhất mình biết là xóa chart hiện tại và triển khai lại chart mới với file custom_value.yaml. Khi thực hiện cách này sẽ làm dịch vụ downtime nhưng đây là cách duy nhất để thay đổi được label.

root@loadbalancer3:~/learn-devops/helm# helm uninstall prometheus --namespace ns-prometheus
release "prometheus" uninstalled

29. Sau khi gỡ bỏ xong chart cũ, mình sẽ triển khai lại chart này với file custom_value.yaml và kết quả cho thấy triển khai thành công.

root@loadbalancer3:~/learn-devops/helm# helm install prometheus ./prometheus/ --namespace ns-prometheus -f ./prometheus/custom_value.yaml 
NAME: prometheus
LAST DEPLOYED: Fri Sep 23 03:49:01 2022
NAMESPACE: ns-prometheus
STATUS: deployed
REVISION: 1
TEST SUITE: None

30. Kết quả describe cho ta thấy label đã thay đổi thành công.

31. Tiếp theo mình sẽ hướng dẫn các bạn cách đóng gói chart

Đầu tiên mình sẽ xóa đi file custom_value.yaml vì file này sẽ do bạn tùy chỉnh sau này.

root@loadbalancer3:~/learn-devops/helm# rm -rf prometheus/custom_value.yaml

32. Vì mình đã xóa file custom_value.yaml mà trong file này có chứa trường customLabel được sử dụng cho chart nhưng trong file values.yaml lại không có trường này nên mình sẽ thêm customLabel vào file values.yaml cho nó.

root@loadbalancer3:~/learn-devops/helm# cat >> prometheus/values.yaml << OEF
customLabel: prometheus
OEF

33. Sau khi hoàn tất thì mình tiến hành đóng gói bằng command helm package <thư mục chart> -d <thư mục chart sau khi đóng gói>

root@loadbalancer3:~/learn-devops/helm# helm package ./prometheus/ -d ./publish/ 
Successfully packaged chart and saved it to: publish/prometheus-0.1.0.tgz

Verify lại ta thấy đã có 1 file mới có đuôi *.tgz, đây chính là file lưu chart sau khi đóng gói ở dạng nén.

root@loadbalancer3:~/learn-devops/helm# ll publish/
-rw-r--r-- 1 root root 1148 Sep 23 06:38 prometheus-0.1.0.tgz

34. Để kubernetes đọc được thông tin repo, ta cần tạo ra 1 file có tên index.yaml, file này sẽ chứa các thông tin liên quan đến kho chứa charts của bạn. Ta sử dụng command helm repo index <thư mục gốc của helm charts> để tạo ra file này.

root@loadbalancer3:~/learn-devops/helm# helm repo index ./

Sau khi chạy xong command trên, chúng ta đã thấy xuất hiện index.yaml trong thư mục gốc

root@loadbalancer3:~/learn-devops/helm# ll
-rw-r--r--  1 root root  399 Sep 23 06:39 index.yaml
drwxr-xr-x  4 root root 4096 Sep 23 04:01 prometheus/
drwxr-xr-x  2 root root 4096 Sep 23 06:38 publish/

Nội dung file này cũng đơn giản, chúng chính là thông tin của các ứng dụng mà chúng ta đã khai báo khi viết ta các file charts. Mục urls chính là list của các charts có trong kho chứa.

Khi có chart mới chúng ta chỉ cần chạy lại command helm repo index ./ để cập nhật thêm chart mới trong file index.yaml.

root@loadbalancer3:~/learn-devops/helm# cat index.yaml 
apiVersion: v1
entries:
  prometheus:
  - apiVersion: v2
    appVersion: 1.16.0
    created: "2022-09-23T06:39:36.417702384Z"
    description: A Helm chart for Kubernetes
    digest: a3c083ce9e9bab89f7519f35fc4c445589706e8516d8467b4e9b3aa9e7ab9185
    name: prometheus
    type: application
    urls:
    - publish/prometheus-0.1.0.tgz
    version: 0.1.0
generated: "2022-09-23T06:39:36.417078319Z"

35. Cách đưa charts lên kho chứa của git.

Đơn giản chúng ta chỉ cần tạo repo trong git sau đó push chúng lên repo đó để bắt đầu sử dụng. Xem ví dụ ở bên dưới.

rm -rf .git
git init
git config --global user.name "hoanghd"
git config --global user.email "hoanghd164@gmail.com"
git add .
git commit -m "The first commit"
git remote add helm-chart git@github.com:hoanghd164/helm-charts.git
git push -u --force helm-chart master

Sau khi push charts xong, các bạn có thể verify lại.

35. Thêm và chạy repo.

Sử dụng command helm repo add <tên repo> https://raw.githubusercontent.com/<username>/<path>/master/ để thêm repo mới. Xem ví dụ của mình ở dưới.

root@loadbalancer3:~/learn-devops/helm# helm repo add helm-charts-hoanghd164 https://raw.githubusercontent.com/hoanghd164/helm-charts/master/
"helm-charts-hoanghd164" has been added to your repositories

Khi thêm xong chúng ta list repo thì đã xuất hiện repo vừa thêm xong

root@loadbalancer3:~/learn-devops/helm# helm repo list
NAME                    URL                                                             
nginx-stable            https://helm.nginx.com/stable                                   
helm-charts-hoanghd164  https://raw.githubusercontent.com/hoanghd164/helm-charts/master/

Có thể sử dụng command helm search repo <tên repo> để tìm các charts có trong kho chứa, do kho mình chỉ có 1 repo nên nó chỉ list được 1 chart duy nhất.

root@loadbalancer3:~/learn-devops/helm# helm search repo helm-charts-hoanghd164
NAME                                    CHART VERSION   APP VERSION     DESCRIPTION                
helm-charts-hoanghd164/prometheus       0.1.0           1.16.0          A Helm chart for Kubernetes

Hoặc ta có thể hiển thị nội dung file values.yaml có trong chart

root@loadbalancer3:~/learn-devops/helm# helm show values helm-charts-hoanghd164/prometheus
#Deployment
image: prom/prometheus
replicas: 3

#Services
exposePort: 80
targetPort: 9090
type: LoadBalancer
customLabel: prometheus

#Ingress
pathType: Prefix
hosts: prometheus.hoanghd.com
customLabel: prometheus

Thử tiến hành triển khai chart từ repo này nhé.

root@loadbalancer3:~/learn-devops/helm# helm install monitor-prometheus helm-charts-hoanghd164/prometheus --namespace ns-monitor-prometheus --create-namespace --wait
NAME: monitor-prometheus
LAST DEPLOYED: Fri Sep 23 06:30:31 2022
NAMESPACE: ns-monitor-prometheus
STATUS: deployed
REVISION: 1
TEST SUITE: None

Kết quả

root@loadbalancer3:~/learn-devops/helm# kubectl get ingress,po,svc,ns -n ns-monitor-prometheus
NAME                                           CLASS   HOSTS                    ADDRESS          PORTS   AGE
ingress.networking.k8s.io/monitor-prometheus   nginx   prometheus.hoanghd.com   192.168.13.230   80      56s

NAME                                    READY   STATUS    RESTARTS   AGE
pod/monitor-prometheus-768dfc96-7swzk   1/1     Running   0          56s
pod/monitor-prometheus-768dfc96-ng5jt   1/1     Running   0          56s
pod/monitor-prometheus-768dfc96-vmlcq   1/1     Running   0          56s

NAME                         TYPE           CLUSTER-IP       EXTERNAL-IP      PORT(S)        AGE
service/monitor-prometheus   LoadBalancer   10.110.174.164   192.168.13.224   80:32654/TCP   56s

NAME                              STATUS   AGE
namespace/argocd                  Active   26h
namespace/default                 Active   7d2h
namespace/kube-node-lease         Active   7d2h
namespace/kube-public             Active   7d2h
namespace/kube-system             Active   7d2h
namespace/kubernetes-dashboard    Active   7d2h
namespace/metallb-system          Active   7d1h
namespace/ns-monitor-prometheus   Active   56s
namespace/ns-prometheus           Active   4h3m

Để gỡ chart đang chạy, ta sử dụng command theo format bên.

helm uninstall monitor-prometheus helm-charts-hoanghd164/prometheus --namespace ns-monitor-prometheus

Đến đây mìnhd đã hướng dẫn các bạn cách sử dụng cơ bản helm charts trong kubernetes, hi vọng bài viết này sẽ giúp bạn có 1 cái nhìn tổng quan về helm.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories