0
0
Lập trình
Thaycacac
Thaycacac thaycacac

Hướng Dẫn Triển Khai Karpenter trên Google Cloud

Đăng vào 5 ngày trước

• 8 phút đọc

Hướng Dẫn Triển Khai Karpenter trên Google Cloud

Karpenter, một công cụ mở rộng tự động hóa cho Kubernetes, hiện đã có sẵn phiên bản thử nghiệm trên Google Cloud Platform (GCP), cho phép tự động điều chỉnh quy mô cho các workload trên Kubernetes. Được phát triển bởi đội ngũ CloudPilot AI với sự hợp tác của cộng đồng, bản phát hành này mở rộng khả năng đa đám mây của Karpenter.

⚠️ Lưu ý: Đây là phiên bản thử nghiệm và chưa được khuyến nghị sử dụng trong môi trường sản xuất, nhưng hoàn toàn có thể sử dụng cho việc thử nghiệm và nghiên cứu.

Trong hướng dẫn này, bạn sẽ học cách triển khai nhà cung cấp GCP bằng cách sử dụng biểu đồ Helm, cấu hình môi trường của bạn và thiết lập Karpenter để tự động khởi động các phiên bản GCP dựa trên các workload của bạn.

Mục Tiêu

Hướng dẫn này sẽ giúp bạn:

  • Cài đặt và cấu hình Karpenter trên GCP.
  • Tạo và quản lý các phiên bản GCP tự động.
  • Kiểm tra và xác minh quá trình triển khai.

Các Điều Kiện Cần Thiết

Trước khi bắt đầu, hãy đảm bảo rằng bạn đã thiết lập những điều sau:

  • Một cụm GKE đang hoạt động với trình điều khiển Karpenter đã được cài đặt (tham khảo hướng dẫn cài đặt Karpenter).
  • kubectl được cấu hình để truy cập vào cụm GKE của bạn.
  • helm phiên bản 3 trở lên đã được cài đặt.
  • Các CRD của Karpenter đã được cài đặt trong cụm của bạn.
  • Quyền truy cập GCP: Trình điều khiển Karpenter và nhà cung cấp GCP cần quyền truy cập để tạo các phiên bản, subnet và đĩa.

Chuẩn Bị Thông Tin Đăng Nhập GCP

Kích Hoạt Các API Cần Thiết

Kích hoạt các API Google Cloud cần thiết để Karpenter có thể quản lý tài nguyên tính toán và Kubernetes:

bash Copy
 gcloud services enable compute.googleapis.com
 gcloud services enable container.googleapis.com

Tạo Tài Khoản Dịch Vụ và Tải Xuống Khóa

Tạo một tài khoản dịch vụ GCP với các vai trò sau:

  • Quản trị viên Compute.
  • Quản trị viên Kubernetes Engine.
  • Quản trị viên Giám sát.
  • Người dùng Tài khoản Dịch vụ.

Các quyền này cho phép Karpenter quản lý các phiên bản GCE, truy cập vào metadata GKE và báo cáo các số liệu giám sát.

Sau khi tạo tài khoản dịch vụ, hãy tạo một tệp khóa JSON và lưu trữ nó ở vị trí an toàn. Tệp này sẽ được sử dụng để xác thực Karpenter với các API của GCP.

Tạo Bí Mật Cụm

Tạo một bí mật Kubernetes để lưu trữ thông tin đăng nhập tài khoản dịch vụ GCP của bạn:

yaml Copy
apiVersion: v1
kind: Secret
metadata:
  name: karpenter-gcp-credentials
  namespace: karpenter-system
type: Opaque
stringData:
  key.json: |
    {
      "type": "service_account",
      "project_id": "<your-project-id>",
      "private_key_id": "<your-private-key-id>",
      "private_key": "<your-private-key>",
      "client_email": "<your-client-email>",
      "client_id": "<your-client-id>",
      "auth_uri": "https://accounts.google.com/o/oauth2/auth",
      "token_uri": "https://oauth2.googleapis.com/token",
      "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
      "client_x509_cert_url": "<your-client-x509-cert-url>",
      "universe_domain": "googleapis.com"
    }

Lưu tệp trên dưới dạng karpenter-gcp-credentials.yaml, sau đó áp dụng nó vào cụm của bạn:

bash Copy
kubectl create ns karpenter-system
kubectl apply -f karpenter-gcp-credentials.yaml

Cài Đặt Biểu Đồ

Đặt các biến môi trường cần thiết trước khi cài đặt biểu đồ:

bash Copy
export PROJECT_ID=<your-google-project-id>
export CLUSTER_NAME=<gke-cluster-name>
export REGION=<gke-region-name>
# Tùy chọn: Đặt địa chỉ email tài khoản dịch vụ GCP nếu bạn muốn sử dụng một tài khoản dịch vụ tùy chỉnh cho các mẫu nhóm nút mặc định.
export DEFAULT_NODEPOOL_SERVICE_ACCOUNT=<your-custom-service-account-email>

Sau đó, sao chép kho lưu trữ này và cài đặt biểu đồ với lệnh sau:

bash Copy
helm upgrade karpenter charts/karpenter --install \
  --namespace karpenter-system --create-namespace \
  --set "controller.settings.projectID=${PROJECT_ID}" \
  --set "controller.settings.region=${REGION}" \
  --set "controller.settings.clusterName=${CLUSTER_NAME}" \
  --wait

Kiểm Tra Việc Tạo Nút

1. Tạo NodeClass và NodePool

Áp dụng các manifest sau để xác định cách Karpenter sẽ cấp phát các nút trên GCP. Hãy chắc chắn thay thế <service_account_email_created_before> bằng địa chỉ email của tài khoản dịch vụ bạn đã tạo ở bước trước.

yaml Copy
cat > nodeclass.yaml <<EOF
apiVersion: karpenter.k8s.gcp/v1alpha1
kind: GCENodeClass
metadata:
  name: default-example
spec:
  serviceAccount: "<service_account_email_created_before>"
  imageSelectorTerms:
    - alias: ContainerOptimizedOS@latest
  tags:
    env: dev
EOF

kubectl apply -f nodeclass.yaml

cat > nodepool.yaml <<EOF
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
  name: default-nodepool
spec:
  weight: 10
  template:
    spec:
      nodeClassRef:
        name: default-example
        kind: GCENodeClass
        group: karpenter.k8s.gcp
      requirements:
        - key: "karpenter.sh/capacity-type"
          operator: In
          values: ["on-demand", "spot"]
        - key: "karpenter.k8s.gcp/instance-family"
          operator: In
          values: ["n4-standard", "n2-standard", "e2"]
        - key: "kubernetes.io/arch"
          operator: In
          values: ["amd64"]
        - key: "topology.kubernetes.io/zone"
          operator: In
          values: ["us-central1-c", "us-central1-a", "us-central1-f", "us-central1-b"]
EOF

kubectl apply -f nodepool.yaml

2. Tạo Một Workload

Triển khai một workload đơn giản để kích hoạt Karpenter cấp phát một nút mới:

yaml Copy
cat > deployment.yaml <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
  name: inflate
spec:
  replicas: 1
  selector:
    matchLabels:
      app: inflate
  template:
    metadata:
      labels:
        app: inflate
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
              - matchExpressions:
                  - key: karpenter.sh/capacity-type
                    operator: Exists
      securityContext:
        runAsUser: 1000
        runAsGroup: 3000
        fsGroup: 2000
      containers:
      - image: public.ecr.aws/eks-distro/kubernetes/pause:3.2
        name: inflate
        resources:
          requests:
            cpu: 250m
            memory: 250Mi
        securityContext:
          allowPrivilegeEscalation: false
EOF

kubectl apply -f deployment.yaml

Khi workload được tạo, kiểm tra xem Karpenter đã thành công trong việc cấp phát một nút:

bash Copy
$ kubectl get node
NAME                                       STATUS   ROLES    AGE     VERSION
gke-cluster-1-test-default-1c921401-kzbh   Ready    <none>   17d     v1.32.4-gke.1415000
gke-cluster-1-test-default-84243800-v30f   Ready    <none>   17d     v1.32.4-gke.1415000
gke-cluster-1-test-default-b4608681-5zq5   Ready    <none>   17d     v1.32.4-gke.1415000
karpenter-default-nodepool-sp86k           Ready    <none>   18s     v1.32.4-gke.1415000

$ kubectl get nodeclaim
NAME                     TYPE       CAPACITY   ZONE            NODE                               READY   AGE
default-nodepool-sp86k   e2-small   spot       us-central1-a   karpenter-default-nodepool-sp86k   True    46s

Các nút được tạo bởi Karpenter sẽ thường có nhãn karpenter.sh/provisioner-name và có thể bao gồm các taint hoặc nhãn được xác định trong NodeClassNodePool của bạn.

Tham Gia Cộng Đồng

Có câu hỏi, phản hồi hoặc muốn theo dõi sự phát triển?

👉 Tham gia kênh Slack của chúng tôi

👉 Hoặc tham gia Discord để kết nối với các cộng tác viên và người dùng khác

Phản hồi của bạn sẽ giúp định hình tương lai của việc tự động điều chỉnh quy mô đa đám mây với Karpenter!

Thực Hành Tốt Nhất

  • Kiểm tra thường xuyên: Nếu bạn triển khai trong môi trường thử nghiệm, hãy kiểm tra thường xuyên các phiên bản và tính năng mới.
  • Bảo mật thông tin: Đảm bảo thông tin đăng nhập luôn được bảo mật và chỉ cấp quyền tối thiểu cần thiết cho tài khoản dịch vụ.

Những Cạm Bẫy Thường Gặp

  • Quyền truy cập không đủ: Đảm bảo rằng tài khoản dịch vụ có đầy đủ quyền cần thiết để thực hiện các hành động trên GCP.
  • Cấu hình sai: Kiểm tra kỹ các biến môi trường và các tệp YAML để đảm bảo không có sai sót.

Mẹo Tối Ưu Hiệu Suất

  • Chọn loại phiên bản phù hợp: Lựa chọn các loại phiên bản GCE phù hợp với workload của bạn để tối ưu hóa chi phí.
  • Theo dõi tài nguyên: Sử dụng các công cụ giám sát để theo dõi hiệu suất và sử dụng tài nguyên của các nút.

Giải Quyết Sự Cố

  • Nếu Karpenter không tạo nút, kiểm tra log của Karpenter để tìm hiểu nguyên nhân.
  • Xác minh rằng tất cả các API cần thiết đã được kích hoạt.

FAQ

Karpenter có hỗ trợ cho các nhà cung cấp đám mây khác không?

Có, Karpenter hỗ trợ nhiều nhà cung cấp đám mây khác nhau.

Làm thế nào để báo cáo sự cố?

Bạn có thể báo cáo sự cố qua kênh Slack hoặc Discord của chúng tôi.

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