0
0
Lập trình
Flame Kris
Flame Krisbacodekiller

Triển khai Jenkins trên EKS với EFS bền vững

Đăng vào 2 tuần trước

• 5 phút đọc

Giới thiệu

Trong hướng dẫn này, chúng ta sẽ cùng nhau triển khai Jenkins trên Amazon EKS với kho lưu trữ bền vững nhờ vào AWS EFS sử dụng driver CSI. Thiết lập này đảm bảo rằng Jenkins có thể mở rộng, bền vững và chia sẻ kho lưu trữ cho các bản dựng.

Mục lục

  1. Cài đặt AWS EFS CSI Driver
  2. Thiết lập Tài nguyên AWS
  3. Tạo Hệ thống Tệp EFS
  4. Thiết lập Lưu trữ Kubernetes
  5. RBAC cho Jenkins
  6. Dịch vụ Jenkins
  7. Triển khai Jenkins
  8. Thông tin đăng nhập Jenkins
  9. Mã thông báo Tài khoản Dịch vụ
  10. Cấu hình Cloud Kubernetes cho Jenkins

Cài đặt AWS EFS CSI Driver

Để bắt đầu, bạn cần cài đặt driver AWS EFS CSI. Sử dụng lệnh sau:

bash Copy
kubectl apply -k "github.com/kubernetes-sigs/aws-efs-csi-driver/deploy/kubernetes/overlays/stable/?ref=master"

Thiết lập Tài nguyên AWS

Trước khi triển khai Jenkins, bạn cần thiết lập một số tài nguyên AWS:

Lấy ID VPC

Sử dụng lệnh sau để lấy ID VPC:

bash Copy
aws eks describe-cluster \
  --name hulk-santhosh-cluster \
  --query "cluster.resourcesVpcConfig.vpcId" \
  --output text \
  --region ap-south-1

Lấy Dải CIDR VPC

Tiếp theo, lấy dải CIDR của VPC:

bash Copy
aws ec2 describe-vpcs \
  --vpc-ids vpc-07937adc3227e4b54 \
  --query "Vpcs[].CidrBlock" \
  --output text \
  --region ap-south-1

Tạo Nhóm Bảo mật

Tạo nhóm bảo mật mới:

bash Copy
aws ec2 create-security-group \
  --description efs-test-sg \
  --group-name efs-sg \
  --vpc-id vpc-07937adc3227e4b54 \
  --region ap-south-1

Cấp quyền Ingress

Cấp quyền cho nhóm bảo mật:

bash Copy
aws ec2 authorize-security-group-ingress \ 
  --group-id sg-0be281b6c437376c5 \ 
  --protocol tcp \ 
  --port 2049 \ 
  --cidr 192.168.0.0/16

Tạo Hệ thống Tệp EFS

Tạo hệ thống tệp EFS để sử dụng với Jenkins:

bash Copy
aws efs create-file-system \
  --creation-token eks-efs \
  --region ap-south-1

Tạo Điểm Gắn

Tiếp theo, tạo điểm gắn cho hệ thống tệp:

bash Copy
aws efs create-mount-target \
  --file-system-id fs-04ec113cee81e30b2 \
  --subnet-id subnet-0a6d27e06ff1e24ed \
  --security-group sg-0be281b6c437376c5

Thiết lập Lưu trữ Kubernetes

Thiết lập PersistentVolume và PersistentVolumeClaim cho Jenkins:

PersistentVolume

yaml Copy
apiVersion: v1
kind: PersistentVolume
metadata:
  name: jenkins
spec:
  capacity:
    storage: 5Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  storageClassName: efs-sc
  csi:
    driver: efs.csi.aws.com
    volumeHandle: fs-04ec113cee81e30b2

PersistentVolumeClaim

yaml Copy
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: jenkins-claim
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: efs-sc
  resources:
    requests:
      storage: 5Gi

RBAC cho Jenkins

Thiết lập RBAC để Jenkins có thể hoạt động:

yaml Copy
apiVersion: v1
kind: ServiceAccount
metadata:
  name: jenkins
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: jenkins
rules:
  # Thêm quy tắc liên quan ở đây
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: jenkins
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: jenkins
subjects:
- kind: ServiceAccount
  name: jenkins
  namespace: jenkins

Dịch vụ Jenkins

Tạo dịch vụ cho Jenkins:

yaml Copy
apiVersion: v1
kind: Service
metadata:
  name: jenkins
  labels:
    app: jenkins
spec:
  type: ClusterIP
  ports:
    - name: ui
      port: 8080
      targetPort: 8080
    - name: slave
      port: 50000
    - name: http
      port: 80
      targetPort: 8080
  selector:
    app: jenkins

Triển khai Jenkins

Cuối cùng, triển khai Jenkins với cấu hình sau:

yaml Copy
apiVersion: apps/v1
kind: Deployment
metadata:
  name: jenkins
  namespace: jenkins
  labels:
    app: jenkins
spec:
  replicas: 1
  selector:
    matchLabels:
      app: jenkins
  template:
    metadata:
      labels:
        app: jenkins
    spec:
      securityContext:
        fsGroup: 1000
      initContainers:
      - name: volume-permission-fix
        image: busybox
        command: ["sh", "-c", "chown -R 1000:1000 /var/jenkins_home"]
        securityContext:
          runAsUser: 0
        volumeMounts:
        - name: jenkins-home
          mountPath: /var/jenkins_home
      containers:
      - name: jenkins
        image: jenkins/jenkins:lts
        ports:
        - containerPort: 8080
        - containerPort: 50000
        volumeMounts:
        - name: jenkins-home
          mountPath: /var/jenkins_home
      volumes:
      - name: jenkins-home
        persistentVolumeClaim:
          claimName: jenkins-claim

Thông tin đăng nhập Jenkins

Sau khi triển khai, bạn có thể lấy thông tin đăng nhập admin:

bash Copy
kubectl exec -it <jenkins-pod-name> -n jenkins -- cat /var/jenkins_home/secrets/initialAdminPassword

Mã thông báo Tài khoản Dịch vụ

Tạo mã thông báo cho tài khoản dịch vụ:

yaml Copy
apiVersion: v1
kind: Secret
metadata:
  name: jenkins-token
  namespace: jenkins
  annotations:
    kubernetes.io/service-account.name: jenkins
type: kubernetes.io/service-account-token

Cấu hình Cloud Kubernetes cho Jenkins

Cuối cùng, bạn cần cấu hình Jenkins để kết nối với Kubernetes:

Kiểm tra kết nối — nó sẽ thông báo rằng đã kết nối với Kubernetes.

Mẫu Pod cho Jenkins Agents

  • Tên: jenkins-agent
  • Namespace: jenkins
  • Nhãn: jenkins-agent
  • Sử dụng: Chỉ các công việc xây dựng với nhãn khớp

Mẫu Container

  • Tên: jnlp
  • Hình ảnh: jenkins/inbound-agent:latest
  • Thư mục làm việc: /home/jenkins/agent
  • Cấp phát pseudo-TTY: Có

Thực hành tốt nhất

  • Đảm bảo rằng bạn đã kiểm tra các quyền và hạn chế an ninh cho nhóm bảo mật của bạn.
  • Theo dõi hiệu suất của Jenkins và EFS để tối ưu hóa chi phí và hiệu suất.

Những cạm bẫy thường gặp

  • Không cấp quyền đúng cho nhóm bảo mật có thể dẫn đến lỗi khi kết nối đến EFS.
  • Quên không tạo PersistentVolumeClaim có thể làm Jenkins không thể lưu trữ dữ liệu.

Mẹo hiệu suất

  • Tối ưu hóa cấu hình EFS để đạt hiệu suất tốt hơn cho các tác vụ đọc/ghi.

Giải quyết sự cố

Nếu bạn gặp vấn đề với kết nối Jenkins tới Kubernetes, hãy kiểm tra các thông báo lỗi trong log của Jenkins và đảm bảo rằng tất cả các tài nguyên đã được thiết lập đúng cách.

Kết luận

Triển khai Jenkins trên Amazon EKS với EFS mang lại khả năng mở rộng và tính bền vững cho quy trình CI/CD của bạn. Hãy làm theo hướng dẫn từng bước và tối ưu hóa cấu hình của bạn để đạt được hiệu suất tốt nhất. Nếu bạn có bất kỳ câu hỏi hoặc thắc mắc nào, đừng ngần ngại chia sẻ với cộng đồng phát triển!

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào