Windows安裝Docker Desktop並在WSL2整合Kubernetes

mi_zy發表於2021-03-01

Kind 的全稱是Kubernetes in Docker

在 Windows10 下使用 WSL2 和 KinD 來搭建一套 Kubernetes 叢集

操作1: (參考 https://cloud.tencent.com/developer/article/1645054         失敗)

1、將 Ubuntu 的軟體源更換成阿里雲的源

root@k8s:~# cp /etc/apt/sources.list /etc/apt/sources.list.bak
root@k8s:~# echo "deb 
deb 
deb 
deb 
deb 
deb 
deb 
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted
deb http://mirrors.aliyun.com/ubuntu/ focal-security universe
deb http://mirrors.aliyun.com/ubuntu/ focal-security multiverse" > /etc/apt/sources.list
root@k8s:~#

2、 配置 Systemd

由於預設情況下 WSL 中不能使用 systemd,所以很多應用程式沒辦法啟動,不過還是有一些大神解決了這個問題,我們可以在  連結下面找到啟動 SystemD 的方法。

首先安裝 Systemd 相關的依賴:

apt install -yqq fontconfig daemonize

然後建立一個如下所示的指令碼檔案:

# Create the starting script for SystemD
vi /etc/profile.d/00-wsl2-systemd.sh
SYSTEMD_PID=$(ps -ef | grep '/lib/systemd/systemd --system-unit=basic.target$' | grep -v unshare | awk '{print $2}')if [ -z "$SYSTEMD_PID" ]; then
   sudo /usr/bin/daemonize /usr/bin/unshare --fork --pid --mount-proc /lib/systemd/systemd --system-unit=basic.target
   SYSTEMD_PID=$(ps -ef | grep '/lib/systemd/systemd --system-unit=basic.target$' | grep -v unshare | awk '{print $2}')fiif [ -n "$SYSTEMD_PID" ] && [ "$SYSTEMD_PID" != "1" ]; then
    exec sudo /usr/bin/nsenter -t $SYSTEMD_PID -a su - $LOGNAME
fi

上面的指令碼放置在 /etc/profile.d 目錄下面,所以要讓指令碼生效,我們需要退出當前 session,重新進入即可到這裡我們就完成了 WSL2 的安裝和配置。

3、安裝docker

4、 安裝 Kubernetes

安裝 Kubernetes 叢集有很多成熟的方案,在本地搭建也有 minikube、microk8s 等等,我們這裡選擇使用 KinD:在容器中來執行 Kubernetes 的一種簡單方式。這裡我們將安裝 KinD 官方網站的說明()來進行操作。

# 下載 KinD 二進位制檔案
curl -Lo ./kind (uname)-amd64
# 標記為可執行檔案
chmod +x ./kind
# 移動到 PATH 目錄下去
mv ./kind /usr/local/bin/# TODO,記得提前下載安裝 kubectl 二進位制檔案

KinD 獲取後,我們就可以來建立 Kubernetes 叢集了——失敗!

# 檢查是否設定了 KUBECONFIG 環境變數
echo $KUBECONFIG
# 檢查是否存在 .kube 目錄,不需要手動建立
ls $HOME/.kube
# 使用 kind 命令建立一個名為 wslk8s 的叢集
# 建立後檢查 .kube 目錄
ls $HOME/.kube

到這裡叢集就建立成功了,我們也可以在 Windows 的瀏覽器中開啟上面的 Kubernetes master 地址127.0.0.1:36063
v1.18.2 版本的 Kubernetes 節點


操作2:( 重點步驟2,KinD環境安裝Kubernetes成功

https://blog.csdn.net/weixin_43168190/article/details/107179715kubelet,kubeadm和kubectl安裝參考這個

KinD官網:kind.sigs.k8s.io/docs/user/quick-start/#installation

Docker Desktop for Windows user manual:docs.docker.com/docker-for-windows/

1、kind是一個 使用Docker容器“節點”執行本地Kubernetes叢集的工具。這類軟體主要是為測試Kubernetes本身而設計的,但也可以用於本地開發或CI。(  is a tool for running local Kubernetes clusters using Docker container “nodes”.kind was primarily designed for testing Kubernetes itself, but may be used for local development or CI.)

curl -Lo ./kind

chmod +x ./kind

mv ./kind /some-dir-in-your-PATH/kind

2、還是在

kind create cluster --name wslk8s

失敗!實際沒有失敗,頁面停止不動是因為 執行過程時間較長,等到最後,安裝成功了。

上圖可見,kindest/node的映象檔案1.17GB,所以慢,而且在Dockers desktop檢視容器自動正常執行,埠是36275

上圖"Status Failure",新增docker的GPG key後OK.

curl  | apt-key add -

——>kind.sigs.k8s.io/docs/user/quick-start/#creating-a-cluster

root@ATC-Analyzer:~# kubectl cluster-info

    Kubernetes control plane is running at 36275

    KubeDNS is running at 36275/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

    To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

root@ATC-Analyzer:~# kubectl cluster-info --context kind-mi-kind

    Kubernetes control plane is running at 36275

    KubeDNS is running at 36275/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

    To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

root@ATC-Analyzer:~# kubectl get nodes            // 可以看到kubernetes節點,這就是一個 單節點的叢集

    NAME                    STATUS   ROLES                  AGE   VERSION

    mi-kind-control-plane   Ready    control-plane,master   18h   v1.20.2

該叢集的名字是:kind-mi-kind, 假如$KUBECONFIG environment variable沒有設定, 預設叢集的configuration儲存在${HOME}/.kube/config(/root/.kube)。

檢視已建立的叢集:

# ./kind get clusters

     mi-kind

檢視叢集 node中的映象列表;

# docker exec -it mi-kind-control-plane crictl images   // Docker container: mi-kind-control-plane

IMAGE                                      TAG                  IMAGE ID            SIZE

docker.io/kindest/kindnetd                 v20210119-d5ef916d   6b17089e24fdb       122MB

docker.io/library/nginx                    latest               35c43ace92162       53.7MB

docker.io/rancher/local-path-provisioner   v0.0.14              e422121c9c5f9       42MB

k8s.gcr.io/build-image/debian-base         v2.1.0               c7c6c86897b63       53.9MB

k8s.gcr.io/coredns                         1.7.0                bfe3a36ebd252       45.4MB

k8s.gcr.io/etcd                            3.4.13-0             0369cf4303ffd       255MB

k8s.gcr.io/kube-apiserver                  v1.20.2              3ad0575b6f104       69.7MB

k8s.gcr.io/kube-controller-manager         v1.20.2              51dc9758caa7b       63.2MB

k8s.gcr.io/kube-proxy                      v1.20.2              23b52beab6e55       120MB

k8s.gcr.io/kube-scheduler                  v1.20.2              cd40419687469       47.6MB

k8s.gcr.io/pause                           3.3                  0184c1613d929       686kB

3、 以管理員許可權啟動 PowerShell,然後輸入以下命令啟用虛擬機器平臺,

Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform

在“啟用或關閉Windows功能”中檢視“Hyper-V”核取方塊還是保持未勾選。

4、 輸入以下命令啟用 Linux 子系統功能

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

在“啟用或關閉Windows功能”中檢視“適用於Linux的Windows子系統”核取方塊從未勾選變為勾選。

5、 設定 WSL 預設版本為2

wsl --set-default-version 2

提示:“WSL 2 需要更新其核心元件。有關資訊,請訪問 ,有關與 WSL 2 的主要區別的資訊,請訪問 ”

按提示先下載安裝: 適用於 x64 計算機的 WSL2 Linux 核心更新包:wsl_update_x64

6、 開啟  Microsoft Store ,並選擇你偏好的 Linux 分發版: Ubuntu 20.04 LTS、Debian

安裝完成後,只是APP安裝完成,Ubuntu系統還沒有裝到電腦裡,需要啟動該APP,然後自動執行安裝:報錯(系統重啟也一樣)

Installing, this may take a few minutes...

WslRegisterDistribution failed with error: 0x80370102

Error: 0x80370102 ???????????????????

出現 0x80370102 錯誤,不是要求沒有達到,而是相容問題。 WSL必須滿足的條件

  • Windows10(版本大於等於19041)(滿足:測試系統版本19042.804)

  • 開啟VT虛擬化?( 由於步驟3問題,這裡 在“啟用或關閉Windows功能”中 勾選“Hyper-V”核取方塊,還必須BIOS啟用虛擬化

PS C:\Windows\system32> wsl --list --verbose

    適用於 Linux 的 Windows 子系統沒有已安裝的分發版。

    可以透過訪問 Microsoft Store 來安裝分發版:

意思是提示沒有安裝WSL的分發版 Ubuntu 20.04 LTS,表示沒有安裝成功,原因: 必須在BIOS中啟用虛擬化

PS C:\Windows\system32> wsl --list --verbose

  NAME                   STATE           VERSION

* Ubuntu-20.04           Running         2

  docker-desktop-data    Running         2

  docker-desktop         Running         2

  Debian                 Stopped         2

後續,開啟Ubuntu和Debian幾分鐘後就會提醒你設定使用者名稱和密碼(atc/123456)。 設定好使用者名稱和密碼後,這個系統並沒有設定root許可權的密碼,使用以下命令:

sudo passwd root (123456)

就可以su -切換到root使用者使用,至此,Ubuntu就安裝完了,可以關閉該終端。

7、下載安裝Docker Desktop for Windows:“Docker Desktop Installer.exe”

docs.docker.com/docker-for-windows/

  • BIOS-level hardware virtualization support must be enabled in the BIOS settings

  • The Docker Desktop installation includes  , Docker CLI client,  , and  .

  • The Kubernetes tab is not available in Windows container mode.

8、 配置docker映象下載位置為阿里雲, 加速器 需要雙引號

9、 開啟Ubuntu APP,或者在 PowerShell中輸入“wsl”,就能進入Ubuntu的命令列中。

10、Deploy on Kubernetes:docs.docker.com/docker-for-windows/kubernetes/

Docker Desktop includes a standalone Kubernetes server and client, as well as Docker CLI integration. The Kubernetes server runs locally within your Docker instance, is not configurable, and is a single-node cluster.

11、  select  Enable Kubernetes . To set Kubernetes as the  , select  Deploy Docker Stacks to Kubernetes by default .

不同於步驟2的叢集kind,這裡是Dockers desktop啟用叢集的方式,但是不成功?)應該是按上圖勾選了“Enable Kubernetes”,點選“Apply & Restart,下載了下圖所示映象:docker/docker-kubernetes v1.19.3。

但是,怎麼執行?



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7970627/viewspace-2760408/,如需轉載,請註明出處,否則將追究法律責任。

相關文章