Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Kubernetes 地端自建 v.s. GKE,哪個更適合你? @Devfest Taipe...

Kubernetes 地端自建 v.s. GKE,哪個更適合你? @Devfest Taipei 2024

服務走到容器化,我想大概是勢不可擋的過程,
加上 AI 人工智慧與 ML 機器學習的需求, Kubernetes (K8s) 的基礎建設更為重要。
但你可能會面臨一些技術選型的難題:地端建置好?還是乾脆用雲端 GKE (Google Kubernetes Engine) 就好?
在這場演講中,我們會手把手的教學 Kubernetes (K8s) 的關鍵元素,
分享地端建置與遇到的問題,給大家做一個指引,少走一些彎路

大綱 Outline
- Kubernetes (K8s) 基礎元件
- 地端 Kubernetes 建置的注意事項
- GKE 怎麼建立
- 怎麼提供 gpu container 供 AI / ML 使用
- 方案比較

Johnny Sung

November 30, 2024
Tweet

More Decks by Johnny Sung

Other Decks in Technology

Transcript

  1. Full stack developer Johnny Sung (宋岡諺) https://fb.com/j796160836 https://blog.jks.co ff ee/

    https://www.slideshare.net/j796160836 https://github.com/j796160836
  2. CAP 定理 • 一 致性(Consistency) •可 用 性(Availability) •分區容錯性(Partition tolerance)

    https://zh.wikipedia.org/zh-tw/CAP%E5%AE%9A%E7%90%86 https://medium.com/nerd-for-tech/understand-cap-theorem-751f0672890e
  3. Created by hanis tusiyani from Noun Project https://thenounproject.com/icon/server-7086299/
 https://thenounproject.com/icon/data-center-7086329/
 https://www.pngwing.com/en/free-png-ztqam

    docker run -v ./www:/usr/share/nginx/html:ro -p 80:80 -d nginx version: "3" services: nginx: image: nginx volumes: - ./www:/usr/share/nginx/html:ro ports: - 80:80 docker run 指令 docker-compose.yml 一 次起 多組服務 一 次起 單 一 服務
  4. Created by hanis tusiyani from Noun Project https://thenounproject.com/icon/server-7086299/
 https://thenounproject.com/icon/data-center-7086329/
 https://www.pngwing.com/en/free-png-ztqam

    Created by hanis tusiyani from Noun Project docker run -v ./www:/usr/share/nginx/html:ro -p 80:80 -d nginx version: "3" services: nginx: image: nginx volumes: - ./www:/usr/share/nginx/html:ro ports: - 80:80 docker run 指令 docker-compose.yml • deployment.yml • services.yml • rbac.yml • config-map.yml • …. 一 次起 多組服務 Kubernetes 多組服務 部署在 多台主機 上 一 次起 單 一 服務
  5. 對應 Kubernetes 的元件 • 服務部署 → Deployment / Pod •

    磁碟 → PersistentVolumeClaim (PVC) / Con fi gMap / Secret • 網路 → Service / Ingress 永久磁碟儲存需求 會 自 動 1:1 對應 PersistentVolume (PV) 地端 K8s 預設沒有 LoadBalancer 可 用
  6. Kustomize Kustomize 是 一 個 Kubernetes 的配置管理 工 具,可以透過定制資源的配置來 簡化

    Kubernetes 的部署。它專注於以聲明式 方 式修改和管理 Kubernetes manifest 檔案,不需要動態 生 成配置。使 用 者可以建 立 基礎配置的 "基底", 然後在不同環境(如開發、測試和 生 產)中進 行 客製化覆蓋。Kustomize 允許 合併或替換 YAML 檔案的部分,使得配置更加模組化和可重 用 。它現在是 Kubernetes 的 一 部分,可以直接透過 kubectl 命令 行工 具使 用 。 https://zlaval.medium.com/kustomize-template-free-kubernetes-application-management-3d70ca9d2e05
  7. Pod Container Deployment ReplicaSet https://thenounproject.com/icon/ram-7094983/ https://thenounproject.com/icon/hard-disk-7094988/ https://thenounproject.com/icon/network-5355161/ https://thenounproject.com/icon/history-5019532/ https://thenounproject.com/icon/central-processing-unit-7095000/ https://thenounproject.com/icon/form-6622708/


    https://thenounproject.com/icon/approval-6293848/ by Muhammad Naufal Subhiansyah from Noun Project by Muhammad Naufal Subhiansyah from Noun Project Service Created by Mada Creative PVC PersistentVolumeClaim PersistentVolume PV 1:1 網站服務的基本元件
  8. Deployment (部署) • 定義 一 個 Pod 的部署 方 式

    • Replicas 要幾份 • 設定參數 • Con fi gMap, Secret • Resources Limit (CPU, memory) • VolumeMounts
 (使 用 的 PersistentVolumeClaim PVC) apiVersion: apps/v1 kind: Deployment metadata: labels: app: my-deployment name: my-deployment namespace: my-namespace spec: replicas: 1 selector: matchLabels: app: my-deployment template: metadata: labels: app: my-deployment spec: containers: - image: my_image:1.0 name: my_image resources: requests: memory: 64Mi cpu: 250m limits: memory: 128Mi cpu: 500m ports: - containerPort: 5000 name: my_image volumeMounts: - name: my-pvc mountPath: /mydata - name: my-pvc mountPath: /data/output volumes: - name: my-pvc persistentVolumeClaim: claimName: my-pvc
  9. Pod Container Deployment ReplicaSet https://thenounproject.com/icon/ram-7094983/ https://thenounproject.com/icon/hard-disk-7094988/ https://thenounproject.com/icon/network-5355161/ https://thenounproject.com/icon/history-5019532/ https://thenounproject.com/icon/central-processing-unit-7095000/ https://thenounproject.com/icon/form-6622708/


    https://thenounproject.com/icon/approval-6293848/ by Muhammad Naufal Subhiansyah from Noun Project by Muhammad Naufal Subhiansyah from Noun Project Service Created by Mada Creative PVC PersistentVolumeClaim PersistentVolume PV Created by Andika Cahya Fitriani from the Noun Project Provisioner StorageClass 1:1 網站服務的基本元件 還有更多...
  10. 對應 Kubernetes 的元件 • 服務部署 → Deployment / StatefulSet /

    Pod • 磁碟 → PersistentVolumeClaim (PVC) / Con fi gMap / Secret • 網路 → Service / Ingress 永久磁碟儲存需求 會 自 動 1:1 對應 PersistentVolume (PV) 地端 K8s 預設沒有 LoadBalancer 可 用
  11. 我給你 一 個預設選項吧! •作業系統 OS:ubuntu •K8s distro:kubeadm •Container Runtime: docker

    •CNI (Container Network Interface): fl annel •CRI (Container Runtime Interface): cri-dockerd https://soco-st.com/21673 https://en.m.wikipedia.org/wiki/File:UbuntuCoF.svg https://www.docker.com/company/newsroom/media-resources/
  12. K8s 重點元件 •kubelet 主服務,確保各元件有正常運作 •kube-apiserver 主要核 心 ,提供 Kubernetes HTTP

    API •kube-scheduler 排程分配器,把 Pod 分到合適的 node https://github.com/coredns https://github.com/etcd-io/etcd
  13. K8s 重點元件 •etcd Key-Value 資料庫,有 一 致性與 高 可 用

    的特 色 •CoreDNS •Network CNI •Container Runtime (CRI) https://github.com/coredns https://github.com/etcd-io/etcd
  14. 大 致步驟 •<每台都做> 關掉 Swap •<每台都做> 安裝 Docker •<每台都做> 安裝

    kubelet、kubeadm、kubectl •<每台都做> 安裝 cri-dockerd •<每台都做> 設定 /etc/hosts •設定 Control plane node •設定 Worker node •<Control plane 做> 安裝 Helm 套件管理程式 •<Control plane 做> 安裝 Flannel CNI •<Control plane 做> 測試檢查叢集
  15. GKE vs 地端 • 一 個在雲端 一 個在地端(廢話) •按時收費(彈性收費) vs

    一 台實體機 N 百萬 •機房的 電 力 、冷氣、 門 禁、消防設施、合規性...
  16. 開 一 台 GKE 吧 •選 Autopilot or Standard 模式

    •選地區 •選 kubernetes 版本 https://soco-st.com/21673
  17. 區域 •距離(回應速度) •跨 AZ (Availability zone) 有容錯性 (Partition tolerance) 但有跨區流量費

    •直接反應 💰 https://mapsvg.com/maps/world 台灣節點 (asia-east1) https://cloud.google.com/kubernetes-engine/pricing?hl=zh-tw
  18. 連接 GKE •打開 Cloud Shell •選專案 •載 入金 鑰 gcloud

    config set project [PROJECT_ID] gcloud container clusters get-credentials [CLUSTER_NAME] \ --region=[COMPUTE_REGION] https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-access-for-kubectl
  19. GPU K8s 大 致步驟 •裝 NVIDIA driver(.run的版本) •裝 NVIDIA Cuda

    •裝 NVIDIA Container Toolkit •下指令 patch con fi g 綁定 Containerd •裝 Kubernetes •裝 GPU Operator
  20. Time slicing •分時多 工 的原理 •vRAM 不限制 MPS •Multi-Thread 方

    式分配 •vRAM 每份固定 大 (Multi-Process Service)
  21. MIG •硬體層 面 切割 GPU •指定型號才有 (例如:A100, H100) •Blackwell 或

    Hopper™ 系列 vGPU •NVIDIA 支 援 GPU 虛擬化 •要軟體授權 (Multi-Instance GPU) (virtual GPU) https://www.nvidia.com/en-us/technologies/multi-instance-gpu/
  22. GPU Mode 比 較 •Time slicing: Memory 不限制,Process 間會排擠 •MPS:

    軟體性均分 •MIG: 硬體層級分割 https://cloud.google.com/kubernetes-engine/docs/concepts/timesharing-gpus
  23. 台灣節點有嗎?有! NAME: nvidia-l4 ZONE: asia-east1-a DESCRIPTION: NVIDIA L4 NAME: nvidia-l4-vws

    ZONE: asia-east1-a DESCRIPTION: NVIDIA L4 Virtual Workstation NAME: nvidia-tesla-p100 ZONE: asia-east1-a DESCRIPTION: NVIDIA Tesla P100 NAME: nvidia-tesla-p100-vws ZONE: asia-east1-a DESCRIPTION: NVIDIA Tesla P100 Virtual Workstation NAME: nvidia-tesla-t4 ZONE: asia-east1-a DESCRIPTION: NVIDIA T4 NAME: nvidia-tesla-t4-vws ZONE: asia-east1-a DESCRIPTION: NVIDIA Tesla T4 Virtual Workstation NAME: nvidia-l4 ZONE: asia-east1-b DESCRIPTION: NVIDIA L4 NAME: nvidia-l4-vws ZONE: asia-east1-b DESCRIPTION: NVIDIA L4 Virtual Workstation NAME: nvidia-l4 ZONE: asia-east1-c DESCRIPTION: NVIDIA L4 NAME: nvidia-l4-vws ZONE: asia-east1-c DESCRIPTION: NVIDIA L4 Virtual Workstation NAME: nvidia-tesla-p100 ZONE: asia-east1-c DESCRIPTION: NVIDIA Tesla P100 NAME: nvidia-tesla-p100-vws ZONE: asia-east1-c DESCRIPTION: NVIDIA Tesla P100 Virtual Workstation NAME: nvidia-tesla-t4 ZONE: asia-east1-c DESCRIPTION: NVIDIA T4 NAME: nvidia-tesla-t4-vws ZONE: asia-east1-c DESCRIPTION: NVIDIA Tesla T4 Virtual Workstation NAME: nvidia-tesla-v100 ZONE: asia-east1-c DESCRIPTION: NVIDIA V100 台灣節點 (asia-east1) 列出 Google cloud 上有的 GPU/TPU gcloud compute accelerator-types list
  24. 把玩開源 LLM •Gemma 採 用 與建 立 Gemini 模型時相同的研究成果和技術, 開源

    LLM 模型 •Ollama https://ollama.com/ •Open webui https://openwebui.com/
  25. 如果你想要 用 AI •Vertex AI 串接 API https://cloud.google.com/vertex-ai •Cloud Run

    跑單次服務 https://cloud.google.com/run •GKE 適 用長 期部署架構 https://cloud.google.com/kubernetes-engine https://theaiagency.co.nz/