在 Windows 上使用 Docker Desktop 快速搭建本地 Kubernetes 環境(附詳細部署教程)

言簡意賅的講解Docker Desktop for Windows搭建Kubernetes解決的痛點

目標讀者

  • 對 Docker Desktop 有一定了解,能在 Windows 上成功安裝和使用 Docker Desktop。
  • 想要在本地快速搭建一套 Kubernetes 環境進行測試或學習的開發者。

一、準備工作

  1. 安裝 Docker Desktop for Windows

    • 如果尚未安裝,請從 Docker 官網 下載并安裝 Docker Desktop for Windows。
    • 注意必須在 Windows 10(家庭版以上)或者 Windows 11,以及開啟 Hyper-V 或者 WSL2 功能(具體可參考 Docker 官方文檔進行配置)。
  2. 確保可以訪問 Docker Hub

    • Docker Desktop 在啟用 Kubernetes 時,會自動拉取所需的 Kubernetes 相關鏡像。由于鏡像較大,且有可能存在網絡限制,建議根據自身網絡環境配置科學上網工具,確保鏡像能夠順利下載。
  3. 初始 Docker Desktop 設置

    • 在不啟用 Kubernetes 的情況下,先啟動并配置好 Docker Desktop,以確保 Docker 能正常工作。
    • 打開 Docker Desktop,在右上角齒輪圖標中可以進行必要的配置(如 CPU、內存限制等),以免在啟用 Kubernetes 后出現資源不足問題。

二、啟用 Kubernetes

  1. 打開 Docker Desktop,進入“Settings”

    • 點擊右上角齒輪圖標,或在任務欄圖標上右鍵選擇 “Settings”。
  2. 選擇“Kubernetes”選項卡

    • 在左側菜單中找到 “Kubernetes”,勾選 “Enable Kubernetes”。
  3. 等待 Kubernetes 啟用

    • 點擊 “Apply & Restart” 之后,Docker Desktop 會重啟自身并拉取 Kubernetes 所需的鏡像。
    • 注意:這一步可能會耗費比較長的時間,請耐心等待。如果網絡環境無法連接鏡像倉庫,需要配置合適的科學上網工具。
    • 啟用完成后,Docker Desktop 左下角會出現 “Kubernetes running” 的狀態提示。

溫馨提示:如果由于網絡問題導致一直無法下載鏡像,可以嘗試使用官方或第三方鏡像加速器,這會大大提升拉取速度。

Docker desktop 啟動 Kubernetes


三、初識 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 已經正確啟用并可用。

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 已經生效。

Kubernetes創建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 Service 端口映射
Kubernetes部署成功驗證


五、查看和管理 Kubernetes 資源

  1. 查看 Pod 詳情
kubectl describe pod <pod-name>
  • 這條命令可以深入查看某個 Pod 的狀態、事件日志、容器的啟動參數等,便于排查問題。
  1. 日志查看
kubectl logs <pod-name>
  • 如果想查看日志,可以使用 kubectl logs 命令,后面加上 Pod 名稱或者加 -f 進行實時查看。
  1. 伸縮(Scaling)示例
kubectl scale deployment nginx-deployment --replicas=3
  • 通過上面命令,可以讓 Nginx 的副本數變為 3 個。再次查看 Pods,即可發現 3 個副本同時運行。
  1. 刪除資源
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默認沒有Ingress


七、總結

  1. Docker Desktop for Windows 提供了一個非常便捷的本地 Kubernetes 環境,適合開發者做快速驗證、個人學習和小型測試。
  2. 在啟用 Kubernetes 前,一定要確保網絡環境良好,以免拉取鏡像時間過長導致卡頓或失敗。
  3. 在基本部署一個 Deployment + Service 后,可以體驗 Kubernetes 的核心概念:Pod、ReplicaSet、Service、Resource Management、Scale、Logs 等。
  4. Ingress 等更高級功能需要額外安裝對應的組件(Ingress Controller),而 Docker Desktop 默認并未集成。
  5. 整個過程中,無需手動安裝 kubectl 工具,無需手動修改 hosts 文件,更加簡化了本地 K8s 的初體驗。

通過上述流程和示例,你可以初步感受到 Kubernetes 在本地環境下的運行和管理方式。如果想繼續深入學習,可以關注如下方向:

  • Kubernetes 基礎概念:Pod、Volume、ConfigMap、Secret、DaemonSet、StatefulSet 等。
  • Kubernetes 進階:Helm、Operator、CICD 流程整合、監控與日志體系(Prometheus、Grafana、EFK 等)。
  • 云上 Kubernetes:在云環境中體驗更完整的 Kubernetes 生態。

Docker Desktop for Windows成功部署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 (楠博萬)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/912351.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/912351.shtml
英文地址,請注明出處:http://en.pswp.cn/news/912351.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

dockercompose快速安裝ELK

第一步&#xff1a;環境準備 請確保您的機器上已經安裝了 Docker 和 Docker Compose。 第二步&#xff1a;創建項目目錄和配置文件 為了讓 Docker Compose 能夠正確地構建和管理容器&#xff0c;我們需要創建一個特定的目錄結構。 創建一個主目錄&#xff0c;例如 elk-stack。…

閑聊ARM內核參數傳遞機制

之前一直沒怎么在意這個問題&#xff0c;直到最近搞了個奇奇怪怪的項目&#xff0c;才發現這部分知識得補上來&#xff0c;記錄一下。 ARM有一個標準&#xff0c;叫《Procedure Call Standard for the Arm Architecture》&#xff0c;人話就是ARM架構過程調用標準&#xff0c;…

萬興喵影Filmora AI Video v14.7.03國際高級版,AI視頻剪輯全能工具,一鍵專業級創作?

[軟件名稱]: 萬興喵影Filmora AI Video v14.7.03 [軟件大小]: 199.4 MB [下載通道]: 夸克盤 | 迅雷盤 軟件介紹 &#x1f3ac;《萬興喵影》v14.7.03國際高級版&#xff5c;AI智能剪輯神器&#xff0c;解鎖全功能無水印&#xff01; ? 核心優勢&#xff1a; ? 1000背景音…

暴力風扇方案介紹

炎炎夏日&#xff0c;當普通風扇只能送來 “溫柔拂面”&#xff0c;暴力風扇卻能吹出 “臺風級” 清涼&#xff01;想知道這些 “風力狂魔” 是如何煉成的&#xff1f;答案藏在電機、電路和芯片的黃金三角組合里。? 一、電機&#xff1a;暴力風扇的 “心臟起搏器”? 暴力風扇…

pyqt小問題匯總

文章目錄 1、inherit global site-packages2、setGeometry(10,20,30,40)setGeometry(x, y, width, height)1. **x參數**2. **y參數**3. **width參數**4. **height參數** 示例說明與其他方法的對比注意事項示例代碼 1、inherit global site-packages 在pycharm 創建項目時&…

提升JavaScript性能的六大關鍵策略

1、優化代碼結構與算法 避免使用嵌套循環&#xff0c;改用更高效的算法如哈希表或二分查找。減少不必要的計算&#xff0c;緩存重復使用的計算結果。使用時間復雜度更低的算法替代高復雜度操作。優化遞歸調用&#xff0c;避免棧溢出和性能瓶頸。改用迭代或尾遞歸優化。簡化條件…

打造跨平臺應用的全能框架:Dioxus

在如今飛速發展的數字世界中,越來越多的開發者開始尋找能夠滿足跨平臺需求的高效框架。而在這些選擇中,Dioxus這個全棧應用框架脫穎而出。Dioxus是一款為Web、桌面和移動端開發而設計的全棧框架,采用Rust語言,具備跨平臺、一體化的優勢。本文將深入介紹Dioxus的獨特功能,應…

大事件項目記錄5-用戶接口開發-更新用戶頭像

5&#xff09;更新用戶頭像。 UserController.java&#xff1a; PatchMapping("updateAvatar")public Result updateAvatar(RequestParam String avatarUrl){userService.updateAvatar(avatarUrl);return Result.success();} UserService.java&#xff1a; UserServ…

Spring Cloud 微服務架構模型

下面是一個完整的 springcloud-eureka-demo 示例項目&#xff0c;包含&#xff1a; Eureka Server 注冊中心 Eureka Client 服務提供者&#xff08;service-provider&#xff09; Eureka Client 服務消費者&#xff08;service-consumer&#xff09; &#x1f4c1; 項目結構…

計算機網絡 網絡層:控制平面

在本章中&#xff0c;包含網絡層的控制平面組件。控制平面作為一種網絡范圍的邏輯&#xff0c;不僅控制沿著從源主機到目的主機的端到端路徑間的路由器如何轉發數據報&#xff0c;而且控制網絡層組件和服務如何配置和管理。5.2節&#xff0c;傳統的計算圖中最低開銷路徑的路由選…

力扣第85題-最大矩形

力扣鏈接:85. 最大矩形 - 力扣&#xff08;LeetCode&#xff09; 給定一個僅包含 0 和 1 、大小為 rows x cols 的二維二進制矩陣&#xff0c;找出只包含 1 的最大矩形&#xff0c;并返回其面積。 輸入&#xff1a;matrix [["1","0","1","…

6-創建和查詢

創建&查詢 DDL - 表操作 - 查詢 查詢當前數據庫所有表 查詢庫表之前需要先試用 use 數據庫名 進入數據庫才可以查詢到該數據庫的庫表, 否則將會出現未選擇數據庫的報錯; 如果數據庫中并無數據表, 則會出現 Empty set 的相應結果 SHOW TABLES;切換到 sys 數據庫, 并且查詢庫…

【Java面試】MySQL的聚集索引和非聚集索引的區別?

一、存儲結構的本質差異 物理存儲的哲學沖突 聚集索引的本質是將數據行的物理存儲順序與索引鍵值的邏輯順序強制綁定&#xff0c;這種設計源于計算機科學的局部性原理&#xff08;Locality Principle&#xff09;。 為什么選擇B樹&#xff1f; B樹的平衡多路特性&#xff08;通…

LRU緩存設計與實現詳解

LRU緩存設計與實現詳解 一、LRU緩存核心概念1.1 LRU策略定義1.2 應用場景1.3 核心操作要求 二、數據結構設計&#xff1a;雙向鏈表哈希表2.1 為什么選擇雙向鏈表&#xff1f;2.2 為什么結合哈希表&#xff1f;2.3 節點結構設計&#xff08;雙向鏈表&#xff09;2.4 LRU緩存的邏…

RabbitMQ中,basicAck、basicNack和basicReject是三種核心的消息確認機制

channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, true); channel.basicReject(message.getMessageProperties().getDeliveryTag(), false); channel.basicAck(message.getMessageProperties().getDeliveryTag(), false); 在RabbitMQ中&#xff0…

UNIAPP入門基礎

一、開發環境準備 1. 安裝 HBuilderX(官方推薦IDE) 下載地址:HBuilderX 官網 版本選擇: App開發版:開箱即用,內置 UniApp 插件 標準版:需手動安裝 UniApp 插件(運行時會提示) 安裝步驟: Windows:雙擊安裝包,勾選“創建桌面快捷方式” macOS:拖拽到 Applications…

前端單點登錄

“前端單點登錄&#xff08;SSO, Single Sign-On&#xff09;”是指在多個系統之間共享用戶登錄狀態&#xff0c;使用戶只需登錄一次&#xff0c;就可以在多個子系統中使用同一身份訪問資源&#xff0c;無需重復登錄。 以下是一個典型的前端單點登錄方案的介紹和實現思路&…

DiNA:擴張鄰域注意力 Transformer

摘要 Transformer 正迅速成為跨模態、跨領域和跨任務中應用最廣泛的深度學習架構之一。在計算機視覺領域&#xff0c;除了持續發展的純 transformer 架構&#xff0c;分層 transformer 也因其優越的性能和在現有框架中易于集成而受到廣泛關注。這類模型通常采用局部化的注意力…

對于“隨機種子”的作用的理解

深度學習系統的兩大組成部分 確定性部分&#xff08;無法通過種子改變&#xff09;&#xff1a; ? 網絡結構&#xff1a;層數、神經元數量、連接方式 ? 學習率&#xff1a;如您所說&#xff0c;這是開發者明確設置的固定值或調度策略 ? 損失函數&#xff1a;MSE、CrossEnt…

C# 委托(調用帶引用參數的委托)

調用帶引用參數的委托 如果委托有引用參數&#xff0c;參數值會根據調用列表中的一個或多個方法的返回值而改變。 在調用委托列表中的下一個方法時&#xff0c;參數的新值&#xff08;不是初始值&#xff09;會傳給下一個方法。例如&#xff0c; 如下代碼調用了具有引用參數的…