在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 系統是最新版本,這有助於避免潛在的兼容性問題:
- 點擊左上角蘋果圖標
- 選擇"關於這台 Mac"
- 點擊"軟件更新"
- 如有更新,請安裝並重啟電腦
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 可以提供更好的容器管理體驗:
- 訪問 Docker Desktop 官網
- 下載並安裝適用於 Apple Silicon 的版本
- 安裝完成後,啟動 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。
- 創建一個名為
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
- 應用這個配置:
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
- 啟動 kubectl proxy:
kubectl proxy
- 在瀏覽器中打開以下 URL:
http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/
- 在登錄頁面選擇 “Token” 方式,然後輸入之前獲取的令牌。
現在您應該能夠成功訪問 Kubernetes Dashboard 了!
5. 進行驗證與測試
成功登錄 Dashboard 後,您可以進行一些基本操作來驗證集群的功能:
5.1 查看節點信息
在 Dashboard 的左側菜單中,選擇 “Nodes” 來查看集群中的所有節點。您應該能看到之前創建的 1 個主節點和 2 個工作節點。
5.2 部署示例應用
讓我們部署一個簡單的 Nginx 應用來測試集群:
- 在 Dashboard 中,點擊右上角的 “Create” 按鈕
- 選擇 “Create from form”
- 填寫以下信息:
- App name: nginx-test
- Container image: nginx:latest
- Number of pods: 2
- 點擊 “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.requests
和 resources.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 之旅。如果您遇到任何問題或有更多疑問,請隨時查閱官方文檔,或加入社區尋求支持。祝您在容器化世界中玩得愉快!🚀