- Giới thiệu Helm =================
Helm là trình quản lý gói cho Kubernetes, tương tự như apt trong Ubuntu, yum trong CentOS hoặc pip trong Python. Nó giúp nhanh chóng tìm kiếm, tải xuống và cài đặt các gói phần mềm. Helm bao gồm thành phần client helm và server component Tiller, có thể đóng gói và quản lý thống nhất nhiều tài nguyên K8s phân tán, là cách tốt nhất để tìm kiếm, chia sẻ và sử dụng phần mềm được xây dựng cho Kubernetes.
Các khái niệm quan trọng của helm:
- Charts: Là tập hợp thông tin để tạo instance ứng dụng Kubernetes, tức là một gói chương trình của helm, chứa tất cả các hình ảnh, phụ thuộc và định nghĩa tài nguyên cần thiết để chạy một ứng dụng K8s.
- Repository: Kho lưu trữ Chart, dùng để lưu trữ và phân phối Charts.
- Config: Thông tin cấu hình khi cài đặt instance ứng dụng.
- Release: Instance chạy của chart, chứa cấu hình cụ thể.
Điều kiện sử dụng Helm:
- Môi trường cụm K8S/K3S
- Client Helm và server Tiller
Client Helm Là công cụ dòng lệnh cho người dùng cuối, chịu trách nhiệm:
- Phát triển chart cục bộ
- Quản lý kho lưu trữ
- Tương tác với server Tiller
Tiller Server (phiên bản v2 có, v3 đã loại bỏ) Là phía server của helm, thường chạy trên cụm Kubernetes, chịu trách nhiệm:
- Lắng nghe yêu cầu từ client Helm
- Kết hợp chart và cấu hình để tạo một bản phát hành
- Cài đặt và theo dõi các bản phát hành tiếp theo trong Kubernetes
- Tương tác với Kubernetes để cập nhật hoặc gỡ bỏ chart
Thay đổi của Helm v3 so với v2:
- Xóa bỏ Tiller
- Tên Release có thể được tái sử dụng trong các không gian tên khác nhau
- Hỗ trợ đẩy Chart vào kho Docker
- Sử dụng JSONSchema để xác thực giá trị chart
- Cài đặt cụm K8S/K3S ====================
Cài đặt cụm K3S
- Cài đặt Helm (cụm K3S) ======================
# Tải xuống Helm
wget http://example.com/helm/helm-v3.5.0-linux-amd64.tar.gz
# Giải nén
tar zxvf helm-v3.5.0-linux-amd64.tar.gz
# Cấp quyền
chmod 755 linux-amd64/helm
# Di chuyển đến thư mục hệ thống
cp linux-amd64/helm /usr/bin/
cp linux-amd64/helm /usr/local/bin/
# Cấu hình biến môi trường
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
# Cấu hình hoàn tự động
echo 'source <(helm completion bash)' >> /etc/profile
# Áp dụng cấu hình
. /etc/profile
# Kiểm tra phiên bản
helm version
Cấu hình nguồn Helm từ nước ngoài:
helm repo remove stable
helm repo add stable https://charts.helm.sh/stable
helm repo update
Cấu hình nguồn Helm trong nước (khuyến nghị):
helm repo remove stable
helm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
helm repo update
- Sử dụng Helm v3 ================
| Lệnh | Mô tả |
|---|---|
| create | Tạo một chart với tên chỉ định |
| install | Cài đặt một chart |
| uninstall | Gỡ bỏ một release |
| upgrade | Cập nhật một release |
| rollback | Hoàn nguyên phiên bản trước |
| version | Xem phiên bản client helm |
| dependency | Quản lý phụ thuộc chart |
| get | Tải xuống một release |
| history | Lấy lịch sử release |
| list | Liệt kê release |
| package | Đóng gói thư mục chart thành tệp lưu trữ |
| pull | Tải chart từ kho từ xa và giải nén |
| repo | Thêm, liệt kê, loại bỏ, cập nhật và chỉ mục kho chart |
| search | Tìm kiếm chart theo từ khóa |
| show | Xem thông tin chi tiết của chart |
| status | Hiển thị trạng thái của phiên bản đã đặt tên |
| template | Biểu mẫu cục bộ |
- Sử dụng chart để triển khai ứng dụng =====================================
Tìm kiếm chart:
helm search repo mysql
Xem thông tin chart:
helm show values azure/mysql
Cài đặt gói:
helm install db azure/mysql
Xem trạng thái phát hành:
helm list
helm status db
- Tùy chỉnh tùy chọn cấu hình chart trước khi cài đặt ================================================
Có hai cách để truyền dữ liệu cấu hình khi cài đặt:
--values (hoặc -f): Chỉ định tệp YAML với ghi đè. Có thể chỉ định nhiều lần, tệp bên phải được ưu tiên.--set: Chỉ định thay thế trên dòng lệnh. Nếu cả hai đều được sử dụng, --set có độ ưu tiên cao.
# Tạo tệp cấu hình
cat config.yaml
mysqlUser: "k8s"
mysqlPassword: "123456"
mysqlDatabase: "k8s"
# Cài đặt với tệp cấu chỉnh
helm install mysql azure/mysql -f config.yaml
- Mẫu tùy chỉnh Helm Chart =========================
7.1 Cấu trúc tệp Charts
Một Chart là cấu trúc thư mục được định dạng đặc biệt, tên thư mục là tên Chart. Cấu trúc cơ bản bao gồm:
- Chart.yaml: Mô tả thông tin cơ bản của Chart, bao gồm tên, mô tả và phiên bản.
- values.yaml: Lưu trữ giá trị của biến được sử dụng trong tệp mẫu.
- templates: Thư mục chứa tất cả tệp mẫu yaml.
- charts: Thư mục chứa tất cả các con chart phụ thuộc.
- NOTES.txt: Giới thiệu thông tin trợ giúp của Chart.
- _helpers.tpl: Nơi đặt mẫu trợ giúp, có thể sử dụng lại trong toàn bộ chart.
Tạo chart mới:
helm create mychart
Đóng gói và đẩy chart:
helm package mychart/
7.2 Cấu hình mẫu chart
Helm sử dụng mẫu hóa các tệp manifest K8s, về cơ bản là mẫu Go template. Helm bổ sung nhiều thứ vào mẫu Go template như dữ liệu metadata mở rộng, thư viện mở rộng và các luồng công việc tương tự lập trình.
Trích dẫn giá trị helm chart
# Tạo chart
helm create nginx
# Cài đặt
helm install web nginx
# Xem phiên bản
kubectl get pod,svc -o wide
Xây dựng mẫu chart riêng
Helm cung cấp các biến được xây dựng để sử dụng trong mẫu:
- Release.Name: Tên release
- Release.Time: Thời gian release
- Release.Namespace: Namespace của release
- Release.Revision: Số phiên bản sửa đổi của release, bắt đầu từ 1
- Release.IsUpgrade: Đặt thành true nếu hoạt động hiện tại là nâng cấp hoặc hoàn nguyên
- Release.IsInstall: Đặt thành true nếu hoạt động hiện tại là cài đặt
7.3 Hàm mẫu và đường ống
Hàm mẫu theo cú pháp gọi: functionName arg1 arg2.... Ví dụ, quote .Values.course.k8s gọi hàm quote và truyền giá trị làm tham số.
Trợ giúp mẫu:
- Đường ống (Pipe)
- Hàm default
- Hàm lookup
- Toán tử
7.4 Điều khiển luồng helm
- if/else điều kiện
- Kiểm soát khoảng trắng
- Sử dụng with để sửa đổi phạm vi
- Vòng lặp range
- Biến
- Tạo chart riêng ==============
Tạo chart mới:
helm create demo
Chỉnh sửa các tệp trong thư mục templates để định nghĩa tài nguyên Kubernetes:
# Xóa các tệp mẫu mặc định
rm -rf templates/*
# Tạo deployment
kubectl create deployment web --image=lizhenliang/java-demo --dry-run -o yaml > templates/deployment.yaml
# Tạo service
kubectl expose deployment web --port=80 --target-port=8080 --dry-run -o yaml > templates/service.yaml
Tạo tệp _helpers.tpl với các mẫu trợ giúp:
{{- define "demo.fullname" -}}
{{- .Chart.Name -}}-{{ .Release.Name }}
{{- end -}}
{{- define "demo.labels" -}}
app: {{ template "demo.fullname" . }}
chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
release: "{{ .Release.Name }}"
{{- end -}}
Chỉnh sửa values.yaml để định nghĩa các giá trị mặc định:
image:
pullPolicy: IfNotPresent
repository: lizhenliang/java-demo
tag: latest
replicaCount: 3
service:
port: 80
type: ClusterIP
Cài đặt và kiểm tra chart:
# Cài đặt
helm install java-demo ../demo/
# Nâng cấp với NodePort
helm upgrade java-demo --set service.type=NodePort ../demo/
# Thay đổi số bản sao
helm upgrade java-demo --set replicaCount=2 ../demo/
- Sử dụng Harbor làm kho Chart =========================
9.1 Cài đặt Harbor
Cài đặt Docker:
systemctl stop firewalld && systemctl disable firewalld
setenforce 0
yum -y install yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum -y install docker-ce
Cấu hình Docker:
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://your-mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl enable docker && systemctl restart docker
Cài đặt docker-compose:
wget https://github.com/docker/compose/releases/download/1.21.1/docker-compose-$(uname -s)-$(uname -m) -O /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
Cài đặt Harbor:
wget https://github.com/goharbor/harbor/releases/download/v1.9.2/harbor-offline-installer-v1.9.2.tgz
tar xzf harbor-offline-installer-v1.9.2.tgz -C /usr/local/
cd /usr/local/harbor
# Chỉnh sửa harbor.yml
sed -i 's/hostname = reg.mydomain.com/hostname = 192.168.10.50/' harbor.yml
sed -i 's/harbor_admin_password = Harbor12345/harbor_admin_password = YourPassword/' harbor.yml
# Cài đặt với hỗ trợ ChartMuseum
./install.sh --with-chartmuseum
9.2 Kích hoạt dịch vụ kho Chart Harbor
Sau khi cài đặt, truy cập giao diện web tại http://192.168.10.50, đăng nhập với tài khoản admin/mật khẩu đã cấu hình.
Tạo một dự án mới trong Harbor, ví dụ "javademo", và đặt thành công khai.
9.3 Cài đặt plugin push
# Tải plugin
wget http://example.com/helm/plugin/helm-push_0.10.1_linux_amd64.tar.gz
mkdir -p helm-push
tar -xzf helm-push_0.10.1_linux_amd64.tar.gz -C helm-push/
# Cài đặt plugin
mkdir -p /root/.local/share/helm/plugins/helm-push
chmod +x helm-push/bin/*
mv helm-push/bin/* helm-push/plugin.yaml /root/.local/share/helm/plugins/helm-push/
# Kiểm tra plugin
helm plugin list
9.4 Thêm repo
# Thêm repo Harbor
helm repo add harbor_lc_chart --username admin --password YourPassword http://192.168.10.50/chartrepo/javademo
# Cập nhật repo
helm repo update
# Liệt kê repo
helm repo list
9.5 Cấu hình insecure-registry cho cụm K8S/K3S
Cần cấu hình insecure-registry cho cụm K8S/K3S để có thể truy cập Harbor qua HTTP.
9.6 Đẩy và cài đặt Chart
# Đóng gói chart
helm package demo/
# Đẩy chart đến Harbor
helm cm-push demo-0.1.0.tgz --username=admin --password=YourPassword http://192.168.10.50/chartrepo/javademo
# Cập nhật repo
helm repo update
# Tìm kiếm chart
helm search repo harbor_lc_chart/demo
# Cài đặt từ repo
helm install web --version 0.1.0 harbor_lc_chart/demo