Buy Me a Coffee

在macOS Apple Silicon 上安裝 K8s 與 Dashboard 的全面指南

引言

隨著容器化技術的普及,Kubernetes (K8s) 已成為當今最受歡迎的容器編排平台之一。對於使用 macOS Apple Silicon (M1/M2/M3 芯片) 的開發者來說,在本地搭建一個輕量級的 Kubernetes 測試環境變得越來越重要。本文將為您提供一個全面且詳細的指南,介紹如何在 macOS Apple Silicon 上安裝測試用 Kubernetes 平台,並設置 Kubernetes Dashboard 來進行可視化管理。

1. 前置準備

在開始安裝過程之前,我們需要確保系統環境已經準備就緒。

1.1 更新 macOS

確保您的 macOS 系統是最新版本,這有助於避免潛在的兼容性問題:

  1. 點擊左上角蘋果圖標
  2. 選擇"關於這台 Mac"
  3. 點擊"軟件更新"
  4. 如有更新,請安裝並重啟電腦

1.2 安裝 Homebrew

Homebrew 是 macOS 上最流行的包管理器,我們將使用它來安裝必要的工具:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

安裝完成後,請按照終端機中的指示將 Homebrew 添加到您的 PATH 中。

1.3 安裝 Docker Desktop

雖然 K3d 不直接依賴 Docker Desktop,但在 macOS 上使用 Docker Desktop 可以提供更好的容器管理體驗:

  1. 訪問 Docker Desktop 官網
  2. 下載並安裝適用於 Apple Silicon 的版本
  3. 安裝完成後,啟動 Docker Desktop 並等待其完全啟動

2. 安裝 K3d

K3d 是一個輕量級的工具,允許您在 Docker 中運行 K3s (一個精簡版的 Kubernetes)。它特別適合在資源受限的環境中進行開發和測試。

2.1 使用 Homebrew 安裝 K3d

打開終端機,執行以下命令:

brew install k3d

2.2 驗證安裝

安裝完成後,驗證 K3d 是否正確安裝:

k3d version

您應該能看到 K3d 的版本信息。

3. 創建 Kubernetes 集群

現在我們已經安裝了 K3d,讓我們來創建一個 Kubernetes 集群。

3.1 創建基本集群

執行以下命令來創建一個包含 1 個主節點和 2 個工作節點的集群:

k3d cluster create mycluster --servers 1 --agents 2

這個命令做了以下幾件事:

  • 創建了一個名為 “mycluster” 的集群
  • 設置了 1 個 server (主節點)
  • 添加了 2 個 agents (工作節點)

3.2 驗證集群狀態

創建完成後,使用 kubectl 來驗證集群狀態:

kubectl get nodes

您應該能看到 3 個節點 (1 個 master 和 2 個 worker),它們的狀態應該都是 “Ready”。

3.3 配置 kubectl

K3d 會自動配置 kubectl 來連接新創建的集群。但如果您之前有使用其他 Kubernetes 集群,可能需要切換上下文:

kubectl config use-context k3d-mycluster

4. 安裝 Kubernetes Dashboard

Kubernetes Dashboard 提供了一個基於 Web 的用戶界面,使得管理和監控 Kubernetes 集群變得更加直觀。

4.1 部署 Dashboard

使用以下命令部署 Kubernetes Dashboard:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml

4.2 創建管理員用戶

為了安全起見,我們需要創建一個具有管理權限的服務賬戶來訪問 Dashboard。

  1. 創建一個名為 dashboard-admin-sa.yaml 的文件,內容如下:
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kubernetes-dashboard
  1. 應用這個配置:
kubectl apply -f dashboard-admin-sa.yaml

4.3 獲取訪問令牌

為了登錄 Dashboard,我們需要獲取剛才創建的管理員用戶的訪問令牌:

kubectl -n kubernetes-dashboard create token admin-user

# token長得像下列這樣
eyJhbGciOiJSUzI1NiIsImtpZCI6Im1tTmltVU4yRXFKc1VGMGZPVHdLeTcwazIwMGxuZXMzVWNOamtWbEJjU2cifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiLCJrM3MiXSwiZXhwIjoxNzI3MzQzNzIzLCJpYXQiOjE3MjczNDAxMjMsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwianRpIjoiNjNkZmNlYjAtYmUzYS00NzA5LThiMDItNjNhZmM5OWY1MTdmIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJkZWZhdWx0Iiwic2VydmljZWFjY291bnQiOnsibmFtZSI6ImRhc2hib2FyZC1hZG1pbi1zYSIsInVpZCI6Ijk2Yjc1MmE0LTBiNDItNGI5OS1iYzM1LWE2ZjA0MDA4NDhlZCJ9fSwibmJmIjoxNzI3MzQwMTIzLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6ZGVmYXVsdDpkYXNoYm9hcmQtYWRtaW4tc2EifQ.Tf3RwicVPnMLF_BA8Dw8Aci2-OPbyhZbv2691xHQvRsfZg3ROEA7e1c3jxYoWePDNbxJDetzqNHyrxHkHZZssPX6Kn4YuMAcQYsgMiQGcAJRZUSCb7zIpOP_sXmj-Gsbi4t-H8KQlEjYhh6yBT3G1HsvX5LnRdRGyuUDSiHD-CvATkunRuH8bCTAc3JPDCJiqPpYav4lAiOzsaZdFb7r3mSKUqQpJ9nDO37pG17UF9bwlWCuQOpmETpWJuViZQAL4R0xB196m3Q7Yeh3RfH46wZx-U2BvRI8AVsoCWrBvOyzk3_C87jgFbONxSuttP67W-imiib2sCJyB4mQMT3sMQ

請保存這個令牌,我們稍後會用到。

4.4 訪問 Dashboard

  1. 啟動 kubectl proxy:
kubectl proxy
  1. 在瀏覽器中打開以下 URL:
http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/
  1. 在登錄頁面選擇 “Token” 方式,然後輸入之前獲取的令牌。

現在您應該能夠成功訪問 Kubernetes Dashboard 了!

5. 進行驗證與測試

成功登錄 Dashboard 後,您可以進行一些基本操作來驗證集群的功能:

5.1 查看節點信息

在 Dashboard 的左側菜單中,選擇 “Nodes” 來查看集群中的所有節點。您應該能看到之前創建的 1 個主節點和 2 個工作節點。

5.2 部署示例應用

讓我們部署一個簡單的 Nginx 應用來測試集群:

  1. 在 Dashboard 中,點擊右上角的 “Create” 按鈕
  2. 選擇 “Create from form”
  3. 填寫以下信息:
    • App name: nginx-test
    • Container image: nginx:latest
    • Number of pods: 2
  4. 點擊 “Deploy” 按鈕

部署完成後,您應該能在 “Deployments” 和 “Pods” 頁面中看到新創建的資源。

5.3 查看日誌和監控信息

選擇一個 Pod,然後:

  • 點擊 “Logs” 標籤來查看容器日誌
  • 點擊 “Exec” 標籤來在容器內執行命令
  • 查看 “CPU” 和 “Memory” 圖表來監控資源使用情況

6. 高級配置和技巧

6.1 持久化存儲

如果您需要為應用提供持久化存儲,可以使用 K3d 的卷映射功能:

k3d cluster create mycluster --volume /path/on/host:/path/in/node@agent[0,1] --agents 2

這會將主機上的 /path/on/host 目錄映射到兩個工作節點的 /path/in/node 目錄。

6.2 端口轉發

要從集群外部訪問服務,可以在創建集群時設置端口轉發:

k3d cluster create mycluster --agents 2 -p "8080:80@loadbalancer"

這會將主機的 8080 端口轉發到集群負載均衡器的 80 端口。

6.3 使用私有鏡像倉庫

如果您需要使用私有 Docker 鏡像倉庫,可以在創建集群時配置:

k3d cluster create mycluster --agents 2 --registry-create myregistry.localhost:0.0.0.0:5000

這會創建一個本地的私有鏡像倉庫,並將其集成到集群中,方便從私有倉庫中拉取 Docker 鏡像。

7. 故障排除

7.1 集群創建失敗

如果集群創建失敗,請檢查以下幾點:

  • Docker Desktop 是否正在運行。
  • 系統資源 是否足夠,包括內存、CPU 和磁碟空間。
  • 防火牆設置 是否允許 Docker 和 Kubernetes 所需的網絡通信。

7.2 無法訪問 Dashboard

如果無法訪問 Kubernetes Dashboard,請確認:

  • kubectl proxy 是否正在運行。
  • 訪問令牌 是否正確,並且未過期。
  • 瀏覽器 是否允許不安全的 HTTP 連接(可以嘗試使用無痕模式或更換瀏覽器)。

7.3 性能問題

如果在運行 Kubernetes 集群時遇到性能問題,可以嘗試:

  • 增加 Docker Desktop 的資源分配,如增加內存或 CPU。
  • 減少集群中的節點數量,僅保留最小的測試配置。
  • 使用輕量級的網絡插件,如 flannel,而不是完整的 Kubernetes 組件。

8. 最佳實踐

8.1 定期更新

保持 K3d、Docker Desktop 和 Kubernetes Dashboard 的版本為最新,以便獲得最新的 bug 修復和功能更新。

8.2 資源管理

在部署應用時,設置資源限制,以避免單個應用程序占用過多的集群資源。這可以通過 resources.requestsresources.limits 在 Kubernetes 部署中進行設置。

8.3 使用命名空間

利用 Kubernetes 的命名空間功能,可以為不同的項目或環境隔離資源,這樣可以避免資源衝突和管理混亂。

8.4 定期備份

定期備份 Kubernetes 的配置和數據(如持久化存儲中的數據),以便在需要時快速恢復系統。

8.5 監控與告警

除了使用 Kubernetes Dashboard,也可以考慮部署更全面的監控解決方案,如 Prometheus 和 Grafana,來實時監控集群的健康狀況並設置告警。

9. 結論

通過本指南,您已經成功在 macOS Apple Silicon 上設置了一個功能齊全的 Kubernetes 測試環境,並學會了如何使用 Kubernetes Dashboard 來進行集群管理和監控。這個測試平台將為您的容器化開發和測試提供強大支持。

隨著您對 Kubernetes 的深入了解,您可以開始探索更多高級功能,如自動擴展、服務網格、CI/CD 整合等。持續的學習和實踐將幫助您充分發揮 Kubernetes 的強大功能,並提升開發效率和應用程序的穩定性。

10. 延伸閱讀


希望本指南能夠幫助您順利在 macOS Apple Silicon 上開始 Kubernetes 之旅。如果您遇到任何問題或有更多疑問,請隨時查閱官方文檔,或加入社區尋求支持。祝您在容器化世界中玩得愉快!🚀