Bài viết này hướng dẫn bạn cách tạo và triển khai biểu đồ Helm tùy chỉnh để triển khai Jenkins trên Kubernetes. Helm là trình quản lý gói cho Kubernetes, giúp tự động hóa việc triển khai ứng dụng bằng cách đóng gói chúng thành biểu đồ. Helm đơn giản hóa việc triển khai ứng dụng bằng cách quản lý tài nguyên Kubernetes như một đơn vị duy nhất.
Việc triển khai bao gồm tạo biểu đồ Helm, xác định các cấu hình cần thiết, triển khai Jenkins và truy cập bảng điều khiển Jenkins thông qua trình duyệt web.
Tại sao nên sử dụng Helm?
Helm hợp lý hóa việc triển khai ứng dụng Kubernetes bằng cách:
- Đóng gói tài nguyên Kubernetes: Biểu đồ Helm chứa tất cả các bản kê khai cần thiết để triển khai một ứng dụng, cho phép quản lý và cập nhật dễ dàng hơn.
- Kiểm soát phiên bản: Helm duy trì các phiên bản phát hành, giúp dễ dàng nâng cấp hoặc khôi phục ứng dụng.
- Tùy chỉnh: Biểu đồ Helm cho phép tham số hóa, vì vậy bạn có thể sử dụng cùng một biểu đồ để triển khai các phiên bản khác nhau của cùng một ứng dụng bằng cách điều chỉnh các giá trị cấu hình.
- Khả năng lặp lại: Helm giúp dễ dàng triển khai các ứng dụng một cách nhất quán trên nhiều môi trường.
Các bước triển khai Jenkins trên Kubernetes chi tiết
Bước 1: Tạo biểu đồ Helm
Để bắt đầu, chúng ta sẽ tạo một biểu đồ Helm có tên là myhelmchart để triển khai Jenkins.
helm create myhelmchart
Lệnh này tạo ra một cấu trúc thư mục với các tệp và mẫu cơ bản cần thiết cho việc triển khai Kubernetes. Hãy chia nhỏ cấu trúc của biểu đồ được tạo:
- Chart.yaml: Xác định siêu dữ liệu của biểu đồ Helm, chẳng hạn như tên biểu đồ, phiên bản và appVersion (phiên bản của ứng dụng được triển khai).
- values.yaml: Giá trị mặc định mà biểu đồ sử dụng, chẳng hạn như tên hình ảnh, cổng và loại dịch vụ. Các giá trị này có thể được ghi đè trong quá trình cài đặt.
- templates/: Chứa các bản kê khai Kubernetes (tệp YAML) cho triển khai, dịch vụ và các tài nguyên Kubernetes khác.
- NOTES.txt: Cung cấp hướng dẫn sau khi biểu đồ được cài đặt.
Bước 2: Cập nhật Chart.yaml
Tiếp theo, cập nhật Chart.yaml để chỉ định phiên bản Jenkins mà chúng tôi muốn triển khai:
cd myhelmchart
vim Chart.yaml
Sửa đổi trường appVersion để phản ánh phiên bản Jenkins:
appVersion: "2.249.2"
Bước 3: Dọn dẹp các tệp không cần thiết
Chúng tôi sẽ xóa các tệp và thư mục không cần thiết để đơn giản hóa biểu đồ Helm của chúng tôi:
rm -rf templates/*.yaml templates/tests
Bước 4: Tạo bản kê khai triển khai và dịch vụ
Trong thư mục templates/, hãy tạo hai tệp: một tệp cho việc triển khai Jenkins và một tệp cho dịch vụ.
1. Tạo bản kê khai triển khai Jenkins
cd templates
touch jenkins-deployment.yaml
vim jenkins-deployment.yaml
Thêm đoạn mã sau vào jenkins-deployment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata: name: {{ template "myhelmchart.fullname" . }} labels: app: jenkins
spec: replicas: 1 selector: matchLabels: app: jenkins template: metadata: labels: app: jenkins spec: containers: - name: jenkins image: {{ printf "%s:%s" .Values.image.repository .Values.image.tag | quote }} env: - name: JENKINS_USERNAME value: {{ default "test" .Values.jenkinsUsername | quote }} - name: JENKINS_PASSWORD {{- if .Values.jenkinsPassword }} value: {{.Values.jenkinsPassword }} {{- else }} value: testPassword {{- end }} ports: {{- range .Values.containerPorts }} - name: {{ .name }} containerPort: {{ .port }} {{- end }}
Bản kê khai này xác định Triển khai với các yếu tố chính sau:
- metadata: Chỉ định tên và nhãn cho triển khai.
- spec.replicas: Đảm bảo chỉ có một bản sao (phiên bản Jenkins) đang chạy.
- spec.template: Mô tả mẫu pod với siêu dữ liệu và bộ chứa. Nó đặt các biến môi trường JENKINS_USERNAME và JENKINS_PASSWORD từ tệp values.yaml của biểu đồ, với các giá trị mặc định nếu không được cung cấp.
- containers: Xác định bộ chứa Jenkins, sử dụng hình ảnh được chỉ định trong values.yaml và hiển thị các cổng từ cùng một tệp.
2. Tạo bản kê khai dịch vụ Jenkins
touch jenkins-service.yaml
vim jenkins-service.yaml
Thêm nội dung sau vào jenkins-service.yaml:
apiVersion: v1
kind: Service
metadata: name: {{ template "myhelmchart.fullname" . }}
spec: type: {{ .Values.service.type }} ports: - name: http port: 8080 targetPort: http nodePort: {{ .Values.service.nodePort }} selector: app: jenkins
Bản kê khai này xác định Dịch vụ để hiển thị pod Jenkins:
- spec.type: Đặt loại dịch vụ thành NodePort, hiển thị ứng dụng trên một cổng cụ thể của nút (phiên bản EC2).
- ports: Ánh xạ cổng 8080 của pod Jenkins với NodePort được chỉ định trong values.yaml.
- selector: Đảm bảo dịch vụ nhắm mục tiêu các pod được gắn nhãn app: jenkins.
Bước 5: Cập nhật NOTES.txt
Tệp NOTES.txt cung cấp thông tin sau khi cài đặt Helm thành công. Hãy cập nhật nó:
echo “This is my first chart” > NOTES.txt
Bước 6: Cập nhật values.yaml
Tệp values.yaml lưu trữ các giá trị mặc định được sử dụng bởi các mẫu. Cập nhật nó với cấu hình sau:
image: repository: bitnami/jenkins tag: latest jenkinsUsername: ""
jenkinsPassword: "" containerPorts: - name: http port: 8080 service: type: NodePort nodePort: 30080
Cấu hình này:
- image.repository: Sử dụng hình ảnh Bitnami Jenkins chính thức.
- jenkinsUsername and jenkinsPassword: Có thể chuyển các giá trị mặc định trong quá trình cài đặt.
- service: Đặt loại dịch vụ thành NodePort, hiển thị Jenkins trên cổng 30080.
Bước 7: Chạy lệnh Helm Template
Trước khi cài đặt biểu đồ, hãy xác minh các mẫu bằng lệnh helm template, lệnh này hiển thị các bản kê khai Kubernetes mà không áp dụng chúng:
helm template myhelmchart . -s templates/jenkins-deployment.yaml
Bước 8: Cài đặt biểu đồ Helm
Bây giờ hãy cài đặt biểu đồ Helm bằng lệnh helm install:
helm install myhelmchart ./myhelmchart
Điều này sẽ triển khai Jenkins cho cụm Kubernetes của bạn.
Bước 9: Lấy IP công cộng của nút và truy cập Jenkins
Để truy cập Jenkins thông qua trình duyệt web, chúng ta cần có IP công cộng của nút (phiên bản EC2) lưu trữ pod Jenkins.
1. Lấy IP công cộng của nút:
kubectl get nodes -o wide
Hãy tìm địa chỉ IP bên ngoài / công cộng của nút mà pod Jenkins đang chạy.
2. Truy cập Jenkins trong trình duyệt:
Mở trình duyệt web của bạn và điều hướng đến:
http://<Public_IP>:30080
Bước 10: Truy cập bảng điều khiển Jenkins
Khi bạn truy cập Jenkins trong trình duyệt, nó sẽ nhắc bạn nhập tên người dùng và mật khẩu. Sử dụng thông tin đăng nhập được đặt trong biểu đồ Helm của bạn:
- Tên người dùng: Giá trị của jenkinsUsername (hoặc kiểm tra nếu không được đặt).
- Mật khẩu: Giá trị của jenkinsPassword (hoặc testPassword nếu không được đặt).
Kết luận
Trong bài viết này, chúng ta đã tạo biểu đồ Helm để triển khai Jenkins trên Kubernetes, tùy chỉnh biểu đồ với bản kê khai triển khai và dịch vụ và truy cập Jenkins thông qua trình duyệt. Helm giúp quản lý các ứng dụng Kubernetes hiệu quả hơn bằng cách cung cấp các mẫu dễ sử dụng và quy trình cài đặt đơn giản.
Cảm ơn các bạn đã theo dõi.