在 Docker Desktop 中啓用 K8s 服務

Overview

作爲目前事實上的容器編排系統標準,K8s 無疑是現代應用的基石,很多同學入門可能直接就被卡到第一關,從哪去弄個 K8s 的環境

自己搭吧,要求的硬件資源太高,基本上搭建一個 K8s 集羣就勸退了很多的人,因此這裏最簡單的方式就是直接使用 Windows or Mac 上的 Docker Desktop 內置的 K8s 來學習

然而,由於某些網絡原因,如果你直接在 Dokcer 中啓用這個功能的話,基本上是不可能成功開啓的,因此,本篇文章是基於 k8s-for-docker-desktop 進行的操作說明,希望可以幫你順利的啓用這一功能

Step by Step

首先,你需要在電腦上安裝好 Docker Desktop,這個過程就不贅述了,一路 Next 即可。如果可以的話,推薦使用 WSL 作爲宿主,後面運行 Docker 時的性能會更好些。最新版的軟件在安裝時也是會默認使用 WSL 作爲宿主的,這裏我使用的是 3.3.1 版本的 Docker,內置的 k8s 版本爲 v1.19.7

PS:安裝 Docker 之前需要你在 BIOS 中開啓虛擬化,同時基於你的宿主程序的選擇,你還需要執行如下的操作

  1. 使用 WSL2 作爲宿主:在“控制面板\所有控制面板項\程序和功能”中選擇“啓用或者關閉 Windows 功能” 勾選上適用於 Linux 的 Windows 子系統,然後在 Microsoft 商城中下載一個 Linux 的發行版本
  2. 使用 Hyper-V 作爲宿主:在“控制面板\所有控制面板項\程序和功能”中選擇“啓用或者關閉 Windows 功能” 勾選上 Hyper-V (沒記錯的話,如果你有安裝別的虛擬機軟件,啓用 Hyper-V 後原來的虛擬機由於衝突是沒辦法繼續使用了)

Dokcer 版本

Docker Desktop 中內置的 K8s 其實是依賴於相關的鏡像,由於這些鏡像位於 google 的服務器上,因此基本上是無法正常拉取下來的,所以這裏就需要藉助鏡像網站將這些 docker 鏡像拉取到本地

2.1、開啓 K8s 服務

因爲直接從 Docker Hub 拉取鏡像的速度實在感人,所以安裝完成之後我們可以配置鏡像網站地址,加速 docker 鏡像的拉取

找到 Docker 的設置頁面,在 Docker Engine 頁面,將鏡像網站的地址加入到右側配置文件的 registry-mirrors 節點下面,這裏我使用的是 Docker 官方和中科大的鏡像網站地址,你可以依據自己的喜好選擇,調整完成之後重啓 Dokcer 即可

配置鏡像網站地址

{
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",// 中科大
    "https://registry.docker-cn.com"// 官方
  ],
  "insecure-registries": [],
  "debug": false,
  "experimental": false,
  "features": {
    "buildkit": true
  }
}

鏡像地址配置完成之後,clone 下 k8s-for-docker-desktop 這個項目,找到 load_images.ps1 這個 powershell 文件,打開後可以看到整個腳本其實是從阿里雲拉取了相關的鏡像,確保紅框中的鏡像版本與 Dokcer 內置的 K8s 版本保持一致,然後直接運行

執行 Powershell 腳本

因爲使用到了 ps1 腳本文件來執行 powershell 命令,如果是第一次執行 powershell 的腳本文件的話,由於默認的安全策略,這裏會提示沒有權限執行,我們可以通過執行下面的語句來使腳本正常運行

Set-ExecutionPolicy RemoteSigned

修改 Powershell 策略

等待命令的執行完成,可以看到我們本地的 Docker 中已經包含了 images.properties 文件中列到的鏡像

拉取鏡像

打開 Docker 的設置頁面,找到 Kubernetes 頁面,選中 Enable Kubernetes,然後點擊 Apply & Restart,這個執行過程有個一兩分鐘,稍等一會等待 K8s 的啓動完成

啓用 K8s 服務

當左下角出現 K8s 的 logo,並逐步變爲綠色,整個 K8s 的環境也就運行起來了,此時我們就可以通過 kubectl 來操作集羣,可以看到這裏已經可以打印出整個“集羣”的信息

獲取集羣信息

2.2、啓用 Dashboard

集羣啓動之後,雖然我們可以通過 kubectl 來操作集羣,但是如果能夠通過可視化頁面的方式進行訪問,則會更加便捷

在上文 clone 下的 repo 中有個 kubernetes-dashboard.yaml 文件,你可以直接通過 kubectl apply 命令運行,然後啓用代理進行訪問

-- 創建 dashboard 資源
kubectl apply -f kubernetes-dashboard.yaml

-- 查看 Deployment 的運行狀態 
kubectl get deployment -n kuberenetes-dashboard

-- 查看 Pod 的運行狀態
kubectl get pods -n kuberenetes-dashboard

-- 通過代理的方式訪問 dashboard
kubectl proxy

啓用 Dashboard

這裏是使用 API Server 的形式訪問的 dashboard ,具體的地址爲:http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/

我們可以使用下面的 powershell 命令打印出 token,然後登錄到 dashboard 中查看整個集羣的信息

$TOKEN=((kubectl -n kube-system describe secret default | Select-String "token:") -split " +")[1]
kubectl config set-credentials docker-for-desktop --token="${TOKEN}"
echo $TOKEN

查看集羣 Dashboard

當然,這裏訪問 dashboard 的方式不是最優解,後續每一次訪問時,都需要執行 kubectl proxy,正常的做法應該是通過 ingress 進行代理訪問。由於 K8s 我也是剛剛入門,對於 ingress 的使用沒有過多的瞭解,所以這裏留下一個 topic,後續再進行補充

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章