言簡意賅的講解Docker Desktop for Windows搭建Kubernetes解決的痛點
目標讀者:
- 對 Docker Desktop 有一定了解,能在 Windows 上成功安裝和使用 Docker Desktop。
- 想要在本地快速搭建一套 Kubernetes 環境進行測試或學習的開發者。
一、準備工作
-
安裝 Docker Desktop for Windows
- 如果尚未安裝,請從 Docker 官網 下載并安裝 Docker Desktop for Windows。
- 注意必須在 Windows 10(家庭版以上)或者 Windows 11,以及開啟 Hyper-V 或者 WSL2 功能(具體可參考 Docker 官方文檔進行配置)。
-
確保可以訪問 Docker Hub
- Docker Desktop 在啟用 Kubernetes 時,會自動拉取所需的 Kubernetes 相關鏡像。由于鏡像較大,且有可能存在網絡限制,建議根據自身網絡環境配置科學上網工具,確保鏡像能夠順利下載。
-
初始 Docker Desktop 設置
- 在不啟用 Kubernetes 的情況下,先啟動并配置好 Docker Desktop,以確保 Docker 能正常工作。
- 打開 Docker Desktop,在右上角齒輪圖標中可以進行必要的配置(如 CPU、內存限制等),以免在啟用 Kubernetes 后出現資源不足問題。
二、啟用 Kubernetes
-
打開 Docker Desktop,進入“Settings”
- 點擊右上角齒輪圖標,或在任務欄圖標上右鍵選擇 “Settings”。
-
選擇“Kubernetes”選項卡
- 在左側菜單中找到 “Kubernetes”,勾選 “Enable Kubernetes”。
-
等待 Kubernetes 啟用
- 點擊 “Apply & Restart” 之后,Docker Desktop 會重啟自身并拉取 Kubernetes 所需的鏡像。
- 注意:這一步可能會耗費比較長的時間,請耐心等待。如果網絡環境無法連接鏡像倉庫,需要配置合適的科學上網工具。
- 啟用完成后,Docker Desktop 左下角會出現 “Kubernetes running” 的狀態提示。
溫馨提示:如果由于網絡問題導致一直無法下載鏡像,可以嘗試使用官方或第三方鏡像加速器,這會大大提升拉取速度。
三、初識 Kubernetes:不修改 hosts、無需安裝額外 kubectl
Docker Desktop 自帶了 kubectl
命令行工具,無需用戶額外安裝,因此后續所有 Kubernetes 命令均可直接在命令行(如 PowerShell、CMD 或 Windows Terminal)中使用。
此外,Docker Desktop 的 Kubernetes 環境默認沒有安裝 Ingress Controller,所以我們暫時不涉及到域名配置,也不需要去修改本機的 hosts 文件。
四、基礎部署演示
下面我們來做一個最常見的 Kubernetes 上的示例:部署一個 Nginx 應用。演示如何使用 Deployment 和 Service。
1. 驗證 Kubernetes 環境是否可用
在 PowerShell 或 CMD 中輸入:
kubectl get nodes
若正確返回一個名為 docker-desktop
的節點(Status 為 Ready),就表示 Kubernetes 已經正確啟用并可用。
2. 創建 Deployment
我們可以直接用命令行創建一個 Nginx Deployment。示例如下:
kubectl create deployment nginx-deployment --image=nginx:latest
- 這條命令會告訴 Kubernetes 創建一個名為
nginx-deployment
的 Deployment,并且使用nginx:latest
鏡像來拉起 Pod。 - 創建完成后,可以通過下面命令查看部署情況:
kubectl get deployments
kubectl get pods
如果看到 nginx-deployment
在運行,同時有對應的 Pod 狀態為 Running
,就說明 Deployment 已經生效。
3. 創建 Service
雖然 Deployment 已經在 Kubernetes 內部運行,但我們需要暴露這個服務才能從本地訪問。最簡單的方式是創建一個 NodePort 類型的 Service,示例如下:
kubectl expose deployment nginx-deployment \--type=NodePort \--port=80
--type=NodePort
會在 Kubernetes 節點上隨機選擇一個30000-32767之間的端口,用于映射到容器內部的 80 端口。- 創建后,我們同樣可以查看 Service:
kubectl get service
可以看到一個名為 nginx-deployment
的 Service,并在 PORT(S)
欄顯示類似 80:30294/TCP
(具體端口可能不同)。這就意味著,我們可以通過 Docker Desktop 提供的本地 Kubernetes 節點的 IP(一般是 127.0.0.1
結合 nodePort),或者通過 Docker Desktop 路由來訪問這個 Nginx。
如果要在宿主機上訪問,最簡單的方式是:
http://localhost:<NodePort>
例如,如果 NodePort 為 30294,則訪問 http://localhost:30294
,即可看到 Nginx 的默認歡迎頁。
五、查看和管理 Kubernetes 資源
- 查看 Pod 詳情
kubectl describe pod <pod-name>
- 這條命令可以深入查看某個 Pod 的狀態、事件日志、容器的啟動參數等,便于排查問題。
- 日志查看
kubectl logs <pod-name>
- 如果想查看日志,可以使用
kubectl logs
命令,后面加上 Pod 名稱或者加-f
進行實時查看。
- 伸縮(Scaling)示例
kubectl scale deployment nginx-deployment --replicas=3
- 通過上面命令,可以讓 Nginx 的副本數變為 3 個。再次查看 Pods,即可發現 3 個副本同時運行。
- 刪除資源
kubectl delete service nginx-deployment
kubectl delete deployment nginx-deployment
- 如果你想刪除剛才創建的 Service 和 Deployment,可以使用
kubectl delete
命令,后面跟資源類型和名稱即可。
六、Docker Desktop Kubernetes 與 Ingress Controller
在原生 Kubernetes 中,常見的對外暴露服務方式除了 Service Type=NodePort/LoadBalancer,還可以通過 Ingress 來靈活管理域名和路徑。但需要注意,Docker Desktop 自帶的 Kubernetes 環境默認沒有安裝 Ingress Controller,因此如果你想體驗 Ingress 功能,就必須自行安裝 Nginx Ingress Controller 或者其他第三方 Ingress Controller。
這里我們就不深入介紹 Ingress 的詳細配置和安裝,僅提示一下在本地實驗環境下的可能性:
- 如果確實需要測試 Ingress,可以自己通過 helm 或 yaml 手動安裝 Nginx Ingress Controller:
不過,執行成功與否取決于你的網絡環境和資源配置,需要保證能夠訪問相關鏡像倉庫。kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.9.1/deploy/static/provider/cloud/deploy.yaml
- 由于 Ingress 涉及到域名解析與路由規則,因此在本地測試時可能要額外配置
hosts
文件、使用自定義域名等。若純粹是想快速上手 Kubernetes,可以暫時不必折騰這部分內容。
七、總結
- Docker Desktop for Windows 提供了一個非常便捷的本地 Kubernetes 環境,適合開發者做快速驗證、個人學習和小型測試。
- 在啟用 Kubernetes 前,一定要確保網絡環境良好,以免拉取鏡像時間過長導致卡頓或失敗。
- 在基本部署一個 Deployment + Service 后,可以體驗 Kubernetes 的核心概念:Pod、ReplicaSet、Service、Resource Management、Scale、Logs 等。
- Ingress 等更高級功能需要額外安裝對應的組件(Ingress Controller),而 Docker Desktop 默認并未集成。
- 整個過程中,無需手動安裝
kubectl
工具,無需手動修改hosts
文件,更加簡化了本地 K8s 的初體驗。
通過上述流程和示例,你可以初步感受到 Kubernetes 在本地環境下的運行和管理方式。如果想繼續深入學習,可以關注如下方向:
- Kubernetes 基礎概念:Pod、Volume、ConfigMap、Secret、DaemonSet、StatefulSet 等。
- Kubernetes 進階:Helm、Operator、CICD 流程整合、監控與日志體系(Prometheus、Grafana、EFK 等)。
- 云上 Kubernetes:在云環境中體驗更完整的 Kubernetes 生態。
附:常用命令速查表
命令 | 說明 |
---|---|
kubectl get nodes | 查看所有節點 |
kubectl get deployments | 查看所有 Deployments |
kubectl get pods | 查看所有 Pods |
kubectl get service | 查看所有 Services |
kubectl describe deployment <deployment-name> | 查看某個 Deployment 詳細信息 |
kubectl describe pod <pod-name> | 查看某個 Pod 詳細信息 |
kubectl logs <pod-name> | 查看 Pod(容器)的日志 |
kubectl scale deployment <deployment-name> --replicas=n | 擴容/縮容 Deployment 副本數量 |
kubectl delete service <service-name> | 刪除某個 Service |
kubectl delete deployment <deployment-name> | 刪除某個 Deployment |
結語
在本地通過 Docker Desktop for Windows 運行 Kubernetes,是初學者和開發者快速上手 K8s 的最佳途徑之一。它大幅簡化了安裝和配置流程,而且不需要額外的硬件或云服務。
通過上述內容,你就已經基本理解了這個方法,基礎用法我也都有展示。如果你能融會貫通,我相信你會很強
Best
Wenhao (楠博萬)