K8S 5: Using Helm Chart With Kubectl
Mô tả việc sử dụng Helm Chart
Table of Contents
Giới thiệu
Trước khi dùng helm, mình đã dùng kubectl
để run app này ok:
https://github.com/hoangmnsd/kubernetes-series/tree/master/spring-maven-postgres-docker-k8s
tuy nhiên việc chạy riêng từng command kubectl apply -f …
và việc quản lý version tập trung của kubectl
bất tiện đã dẫn đến việc cần dùng Helm để quản lý kubernetes cluster
Vậy nên giờ mình sẽ cấu trúc lại folder https://github.com/hoangmnsd/kubernetes-series/tree/master/spring-maven-postgres-docker-k8s
để sử dụng được Helm,
Sau khi cấu trúc lại thì kết quả cuối cùng là project này https://github.com/hoangmnsd/kubernetes-series/tree/master/spring-maven-postgres-docker-k8s-helm
Giờ mình sẽ mô tả lại các bước đã làm để cấu trúc lại project đó
Chuẩn bị
Workplace: Amazon EC2 Linux
Đầu tiên cần đảm bảo đã tạo ra cluster, có thể tạo bằng eksctl
chẳng hạn
sau đó là install helm + tiller
(https://eksworkshop.com/helm_root/helm_intro/install/)
cd ~/environment
curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get > get_helm.sh
chmod +x get_helm.sh
./get_helm.sh
Tạo rbac.yaml
cat <<EoF > ~/environment/rbac.yaml
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: tiller
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: tiller
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: tiller
namespace: kube-system
EoF
Sau mỗi lần xóa đi tạo lại cluster, bạn đều cần làm bước này để install Tiller (còn gọi là helm server-side) lên cluster
kubectl apply -f ~/environment/rbac.yaml
helm init --service-account tiller
$ helm version
Client: &version.Version{SemVer:"v2.16.1", GitCommit:"bbdfe5e7803a12bbdf97e94cd847859890cf4050", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.16.1", GitCommit:"bbdfe5e7803a12bbdf97e94cd847859890cf4050", GitTreeState:"clean"}
[ec2-user@ip-172-31-84-250 environment]$ kubectl get pods,svc -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system pod/aws-node-rjgp7 1/1 Running 0 12m
kube-system pod/coredns-8455f84f99-kjxvs 1/1 Running 0 17m
kube-system pod/coredns-8455f84f99-tlmql 1/1 Running 0 17m
kube-system pod/kube-proxy-5hpd7 1/1 Running 0 12m
kube-system pod/tiller-deploy-586965d498-q9pc4 1/1 Running 0 8m52s
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default service/kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 17m
kube-system service/kube-dns ClusterIP 10.100.0.10 <none> 53/UDP,53/TCP 17m
kube-system service/tiller-deploy ClusterIP 10.100.162.227 <none> 44134/TCP 8m52s
Bắt đầu dùng Helm
helm repo update
create 1 chart tên tự define như sau:
helm create spring-maven-postgres-docker-k8s-helm
chart mới tạo có cấu trúc thư mục như sau
cd spring-maven-postgres-docker-k8s-helm
tree
├── charts
├── Chart.yaml
├── templates
│ ├── configmap.yaml
│ ├── deployment.yaml
│ ├── _helpers.tpl
│ ├── ingress.yaml
│ ├── NOTES.txt
│ ├── serviceaccount.yaml
│ ├── service.yaml
│ └── tests
│ └── test-connection.yaml
└── values.yaml
trong folder /templates
, Helm đã tạo cho chúng ta những default resource,
nhưng mình cần dùng những resource mình đã tạo từ trước cơ, nên hãy xóa hết các file trong /templates
đi
chỉ cần giữ lại cái serviceaccount.yaml
thôi
Copy những file template yaml cũ (có sẵn) vào thư mục templates
cấu trúc mới như sau:
├── charts
├── Chart.yaml
├── templates
│ ├── docker_postgres-deployment.yaml
│ ├── docker_postgres-service.yaml
│ ├── docker_spring-boot-containers-deployment.yaml
│ ├── docker_spring-boot-containers-service.yaml
│ ├── _helpers.tpl
│ ├── serviceaccount.yaml
│ └── tests
│ └── test-connection.yaml
└── values.yaml
Cần chỉnh sửa file values.yaml
để sử dụng nó
các file yaml cũ cũng cần được chỉnh sửa lại, ví dụ như file docker_postgres-deployment.yaml
cụ thể thì các bạn xem file đã sửa ở đây
https://github.com/hoangmnsd/kubernetes-series/tree/master/spring-maven-postgres-docker-k8s-helm/templates
Giờ có thể deploy helm chart
helm install --name spring-maven-postgres-docker-k8s-helm .
$ helm install --name spring-maven-postgres-docker-k8s-helm .
NAME: spring-maven-postgres-docker-k8s-helm
LAST DEPLOYED: Mon Nov 18 14:17:37 2019
NAMESPACE: default
STATUS: DEPLOYED
RESOURCES:
==> v1/Deployment
NAME AGE
docker-postgres 0s
docker-spring-boot-containers 0s
==> v1/Pod(related)
NAME AGE
docker-postgres-748bcf79db-tcgp8 0s
docker-spring-boot-containers-6f8c4fbbbb-pnkng 0s
==> v1/Service
NAME AGE
docker-postgres 0s
docker-spring-boot-containers 0s
==> v1/ServiceAccount
NAME AGE
spring-maven-postgres-docker-k8s-helm 0s
$ kubectl get pods,svc,serviceaccount -A
NAMESPACE NAME READY STATUS RESTARTS AGE
default pod/docker-postgres-748bcf79db-tcgp8 1/1 Running 0 19s
default pod/docker-spring-boot-containers-6f8c4fbbbb-pnkng 1/1 Running 0 19s
kube-system pod/aws-node-wg64q 1/1 Running 0 78m
kube-system pod/coredns-8455f84f99-r78gk 1/1 Running 0 85m
kube-system pod/coredns-8455f84f99-szqsl 1/1 Running 0 85m
kube-system pod/kube-proxy-ddjhk 1/1 Running 0 78m
kube-system pod/tiller-deploy-586965d498-64pt8 1/1 Running 0 69m
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default service/docker-postgres ClusterIP 10.100.193.192 <none> 5432/TCP 19s
default service/docker-spring-boot-containers LoadBalancer 10.100.24.212 a2c8bb9720a0e11eaaeb412190640976-542595414.us-east-1.elb.amazonaws.com 80:30911/TCP 19s
default service/kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 85m
kube-system service/kube-dns ClusterIP 10.100.0.10 <none> 53/UDP,53/TCP 85m
kube-system service/tiller-deploy ClusterIP 10.100.14.180 <none> 44134/TCP 69m
NAMESPACE NAME SECRETS AGE
default serviceaccount/default 1 85m
default serviceaccount/spring-maven-postgres-docker-k8s-helm 1 19s
muốn get logs trong 1 pod nào đó
kubectl logs <POD_NAME>
sau mỗi lần edit file yaml, cần phải upgrade helm chart
helm upgrade spring-maven-postgres-docker-k8s-helm .
muốn xóa helm chart thì
helm ls
để lấy tên
helm delete <CHART_NAME>
command trên chưa phải xóa triệt để, vẫn có thể thấy bằng cách “helm list –all”
Nếu muốn rollback lại cái helm chart vừa xóa thì
helm rollback <CHART_NAME> <REVISON>
Nếu muốn thực sự xóa thì
helm delete --purge <CHART_NAME>
đóng cả cái chart thành package
helm package .
nó sẽ tạo thành 1 file package .tgz
tạo repo index
helm repo index .
Nó sẽ tạo file index.html
Git push lên 1 repo nào đấy trên github
Lấy link raw https://raw.githubusercontent.com/<ACCOUNT_NAME>/<REPO>/<BRANCH>
add repo lấy raw từ github
helm repo add spring-postgres https://raw.githubusercontent.com/hoangmnsd/spring-maven-postgres-docker-k8s-helm/master
list all repo
helm repo list
sau này có thể install bằng command
helm install --name spring-maven-postgres-docker-k8s-helm spring-postgres/spring-maven-postgres-docker-k8s-helm
CREDIT
https://github.com/red-gate/ks/blob/master/ks5/ks5.md
https://medium.com/ingeniouslysimple/deploying-kubernetes-applications-with-helm-81c9c931f9d3
Thank You!
Your comment has been submitted. It will appear on this page shortly! OKYikes, Sorry!
Error occured. Couldn't submit your comment. Please try again. Thank You! OK