天天看點

将WSL2作為生産力工具

  • 原文連結(轉載請注明出處):将WSL2作為生産力工具

    适用于

    Linux

    Windows

    子系統 (

    WSL

    ) 是

    Windows 10

    新增的功能,使用它可以直接在

    Windows

    上運作

    Linux

    指令。而

    WSL 2

    WSL

    的一個新版本,它支援适用于

    Linux

    Windows

    子系統在

    Windows

    ELF64 Linux

    二進制檔案。 它的主要目标是提高檔案系統的性能,并增加系統調用的完全相容性。

    WSL 2

    使用最新和最高的虛拟化技術在輕型實用程式虛拟機(

    VM

    )内部運作

    Linux

    核心。

啟用并配置 WSL 2

win 版本要求

WSL 2

僅在

Windows 10 18917

或更高版本中可用,如果版本太低,可以加入

Windows Insider

更新

Windows

,我們可以在

cmd

中使用

ver

來檢查目前

win

的版本。

啟用虛拟機平台可選元件

powerShell

中以管理者身份運作下面指令

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
           

運作完成之後,請重新開機電腦完成安裝.

設定 WSL 發行版

如果想要将預設的

WSL

發行版設定成

WSL 2

,在

powerShell

中使用下面指令

wsl --set-default-version 2
           

如果想要設定某一個發行版為

WSL2

powerShell

中使用下面指令,将

<Distro>

換成你想要設定的發行版即可,例如

Ubuntu-18.04

wsl --set-version <Distro> 2
           

驗證使用的

WSL

版本

wsl -l -v
           

下載下傳安裝 Ubuntu-18.04

Windows

應用商店裡搜尋

Ubuntu-18.04

,然後下載下傳,下載下傳完成之後打開

Ubuntu-18.04

,這時會先進行一些初始化安裝的設定,然後就會讓你設定新的

UNIX

使用者名和密碼,設定完成之後,就進入了

linux

子系統。驗證是否是

WSL 2

我們隻需要在

powerShell

下輸入

wsl -l -v

,輸出内容如下,這裡

VERSION

2

代表啟用了

WSL 2

NAME                   STATE           VERSION
* Ubuntu-18.04           Running         2
           

Ubuntu-18.04 更換國内源

首先備份一下預設的源

cp /etc/apt/sources.list /etc/apt/sourses.list.bak
           

更換預設源為阿裡源, 使用

sudo vim /etc/apt/sources.list

指令編輯,删除原來的内容,添加下面的阿裡源資訊

deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
           

更換源之後,使用下面的指令更新一下

sudo apt-get update
sudo apt-get upgade
           

安裝配置 Windows Terminal

下載下傳 Windows Terminal

Windows Terminal

win

推出的最新的一款指令行工具,可以在應用商店裡搜尋并下載下傳,安裝完成打開界面如下

将WSL2作為生産力工具

關于其的介紹這裡就不多展開,這裡記錄如何使用

Windows Terminal

連接配接

WSL 2

并安裝配置

zsh

安裝 zsh

# 安裝 zsh
sudo apt-get install zsh

# 修改預設的 Shell 為 zsh
chsh -s /bin/zsh
           

安裝 oh-my-zsh

oh-my-zsh

用于快速配置

zsh

,進入官網或者Github可以了解其基本使用及其豐富的主題使用,安裝隻需要執行下面代碼即可

sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
           

安裝

zsh-syntax-higlighting

文法高亮插件

# 下載下傳
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git

# 移動到 plugins 檔案夾中
mv -p zsh-syntax-highlighting $ZSH_CUSTOM/plugins

# 配置環境變量
cd ~
vim .zshrc

#在 plugins 一列中添加 zsh-syntax-highlighting,如下
plugins=(
         git
         zsh-syntax-highlighting
         )

# 在檔案最後添加
source $ZSH_CUSTOM/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh

# 配置生效
source ~/.zshrc
           

zsh-autosuggestions

文法曆史記錄插件

# 下載下傳
git clone https://github.com/zsh-users/zsh-autosuggestions.git

# 移動到 plugins 檔案夾中
mv -p zsh-autosuggestions $ZSH_CUSTOM/plugins

# 配置環境變量
cd ~
vim .zshrc

#在 plugins 一列中添加 zsh-autosuggestions,如下
plugins=(
         git
         zsh-syntax-highlighting
         zsh-autosuggestions
         )

# 在檔案最後添加
source $ZSH_CUSTOM/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh

# 配置生效
source ~/.zshrc
           

配置完成之後,預設的主題光标如下所示,如果想要配置更加豐富的主題,可以自行百度

将WSL2作為生産力工具

安裝并配置 Docker 環境

在 WSL 2 中安裝 Docker

解除安裝舊版本

sudo apt-get remove docker docker-engine docker.io containerd runc
           

設定存儲庫

# 更新 apt 包索引
sudo apt-get update

# 安裝軟體包以允許 apt 通過 HTTPS 使用存儲庫
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common

# 設定穩定的存儲庫
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
           

安裝 Docker 社群版( docker-ce )

# 更新 apt 包索引
sudo apt-get update

# 安裝最新版本的 Docker 和 containerd
sudo apt-get install docker-ce docker-ce-cli containerd.io
# (*)安裝特定版本;<VERSION> 為具體版本,例如 18.09.1
sudo apt-get install docker-ce=<VERSION> docker-ce-cli=<VERSION> containerd.io
           

啟動

docker

并設定開機自啟

# 啟動 docker
systemctl start docker.service
# 設定開機自啟
systemctl enable docker.service
           

如果非

root

使用者想要使用

docker

,需要将該使用者添加到

docker

使用者組

sudo usermod -aG docker user-name
           

(*)解除安裝docker

# 解除安裝軟體
sudo apt-get purge docker-ce
# 删除 docker 的容器,鏡像,卷等存儲
sudo rm -rf /var/lib/docker
           

下載下傳安裝 Docker Desktop WSL 2 backend

WSL 2

引入了重大的體系結構更改,因為它是

Microsoft

建構的完整

Linux

核心,允許

Linux

容器在沒有仿真的情況下本機運作,而

Docker

也專門開發了可以使用

WSL 2

中的

Docker

守護程序的桌面管理程式, 打開 Docker Desktop WSL2 backend 頁面,下載下傳最新的程式,安裝之後,打開程式做如下設定

  • 啟用基于實驗性

    WSL 2

    的引擎複選框(

    Enable the experimental WSL 2 based engine

    )
将WSL2作為生産力工具
  • (*) 暴露

    2375

    端口,讓外部其他程式也能管理

    Docker

    (打開

    Expose daemon on tcp://localhost:2375 without TLS

    前面的複選框)
  • Resources

    中設定要從哪個

    WSL 2

    發行版中通路

    Docker

    ,如下圖使用的是

    Ubuntu-18.04

将WSL2作為生産力工具

配置完成之後,點選

Apply & Restart

應用并重新開機

Docker Desktop

。重新開機完成之後,我們看到

Desktop

左下腳的

Docker

狀态為綠色的

running

表示

Docker

正在運作。

要想知道自己安裝的

Docker

的相關版本資訊,我們可以在

About Docker Desktop

中看到,如下圖所示,目前安裝的

Docker Engine

版本為

19.03.5

Docker-compose

1.25.1-rc1

,支援的

Kubernetes

v1.15.5

将WSL2作為生産力工具

安裝并配置

Kubernetes

環境

修改

Docker daemon

配置

docker 預設

Cgroup Driver

cgroup

,但是在

kubernetes1.14

之後的版本推薦使用

systemd

來作為

Docker

cgroup

驅動 。使使用

vim /etc/docker/deamon.json

指令修改或建立配置,具體配置内容可以參考 Kubernetes 官方。

另外我們還需要配置一下

Docker

國内的鏡像源,加速你的鏡像下載下傳速度,一般使用的有阿裡和中科大的鏡像源。上面的兩項配置步驟如下

# 編輯 deamon 檔案
vim /etc/docker/deamon.json

# 輸入如下内容
{
  "registry-mirrors": ["https://6e0d9uoa.mirror.aliyuncs.com","https://docker.mirrors.ustc.edu.cn"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}

# 重新開機 Docker
sudo service docker restart
           

下載下傳 Kubernetes 所需的鏡像

由于國内網絡的問題,如果你不開代理,直接在

Decker Desktop

中選擇啟用

Kubernetes

是啟動不了的,還好阿裡雲容器服務在

Github

上有開源 Docker Desktop for Mac/Windows 開啟 Kubernetes 的項目,我們隻需要下載下傳下來,執行腳本就能把所有

Kubernetes

所需要的鏡像都下載下傳到本地。

#将項目下載下傳到本地
git clone https://github.com/AliyunContainerService/k8s-for-docker-desktop
#進入項目目錄
cd k8s-for-docker-desktop

#由于最新 master 已經支援 kubernetes v1.15.5,是以直接執行下載下傳腳本即可
./load_images.sh
           

待所有鏡像下載下傳完成之後,我們在使用

docker images

可以看到下載下傳的容器

REPOSITORY                                                       TAG                 IMAGE ID            CREATED             SIZE
k8s.gcr.io/kube-apiserver                                        v1.15.5             e534b1952a0d        2 months ago        207MB
k8s.gcr.io/kube-proxy                                            v1.15.5             cbd7f21fec99        2 months ago        82.4MB
k8s.gcr.io/kube-controller-manager                               v1.15.5             1399a72fa1a9        2 months ago        159MB
k8s.gcr.io/kube-scheduler                                        v1.15.5             fab2dded59dd        2 months ago        81.1MB
quay.io/kubernetes-ingress-controller/nginx-ingress-controller   0.26.1              29024c9c6e70        2 months ago        483MB
docker/kube-compose-controller                                   v0.4.23             a8c3d87a58e7        6 months ago        35.3MB
docker/kube-compose-api-server                                   v0.4.23             f3591b2cb223        6 months ago        49.9MB
k8s.gcr.io/coredns                                               1.3.1               eb516548c180        11 months ago       40.3MB
k8s.gcr.io/kubernetes-dashboard-amd64                            v1.10.1             f9aed6605b81        12 months ago       122MB
k8s.gcr.io/etcd                                                  3.3.10              2c4adeb21b4f        12 months ago       258MB
k8s.gcr.io/pause                                                 3.1                 da86e6ba6ca1        24 months ago       742kB
           

啟用 Kubernetes

我們在

Docker Desktop

的設定中選擇啟用

kubernetes

,然後點選

Apply & Restart

重新開機。

将WSL2作為生産力工具

如果運氣好的話,當你重新開機之後你就會發現

Desktop

左下腳

Docker

Kubernetes

的狀态都變成了綠色的

runnning

,但是很有可能你重新開機之後,

kubernetes

的狀态一直是黃色的

starting

。出現這種情況不要着急,我們可以在

C:\ProgramData\DockerDesktop

下的

service.txt

檢視啟動的日志資訊,一般情況下,啟動不成功,出現最多的日志資訊為下面的重複内容

[08:57:24.359][ApiProxy          ][Info   ] time="2019-12-20T08:57:24+08:00" msg="cannot list nodes: Get https://kubernetes.docker.internal:6443/api/v1/nodes: EOF"
[08:57:24.359][GoBackendProcess  ][Info   ] time="2019-12-20T08:57:24+08:00" msg="external: POST /events 200 \"Go-http-client/1.1\" \"\""
           

出現這種情況,可以參考

Issue 3769(comment)

Issue 1962(comment)

,其實總結下來就是下面的幾個操作:

  • host

    檔案,将

    127.0.0.1 kubernetes.docker.internal

    映射資訊添加到

    host

    檔案中
  • 修改網絡連接配接的

    DNS

    位址為

    8.8.8.8

    win

    下如何修改網絡連接配接的

    DNS

    可以自行百度
  • 删除

    C:\ProgramData\DockerDesktop

    目錄下的

    pki

    目錄檔案
  • C:\Users\<yourname>目錄下

    .kube

  • 關閉

    win

    的網絡防火牆,或者将

    vpnkit.exe

    添加到防火牆出入站規則中。
  • Desktop

    中點選進入

    troubleshoot

    ,點選重置

    kubernetes

    叢集(

    Reset Kubernetes cluster

将WSL2作為生産力工具

如果上述操作一次下來還是不成功,建議重複操作幾次。如果出現了其他的問題,一般到 docker\for-win 項目的

issue

下可以找到解決方法。如果啟動成功了,我們在指令行下執行下面的指令可以驗證

$ kubectl cluster-info
Kubernetes master is running at https://kubernetes.docker.internal:6443
KubeDNS is running at https://kubernetes.docker.internal:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
$ kubectl get nodes
NAME             STATUS   ROLES    AGE   VERSION
docker-desktop   Ready    master   6h    v1.15.5
           

部署 Kubernetes dashboard

Kubernetes dashboard是

Kubernetes

叢集的基于

Web

的通用

UI

。它允許使用者管理叢集中運作的應用程式并對其進行故障排除,以及管理叢集本身。執行下面命指令即可部署

# 建立 dashboard 資源
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml

# (*)如果上面指令執行說網絡連接配接有問題,把 yaml 檔案下載下傳到本地,然後執行
kubectl apply -f kubernetes-dashboard.yaml

# 開啟 API Server 通路代理
kubectl proxy
           

部署完成之後,我們通過如下

URL

即可通路

Kubernetes dashboard

http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/login

進入

Dashboard

需要令牌,可以通過以下指令擷取令牌,将生成的令牌複制粘貼到令牌登入輸入框即可。

kubectl -n kube-system describe secret default| awk '$1=="token:"{print $2}'
           

下載下傳安裝 Helm

Helm是 Deis 開發的一個用于

kubernetes

的包管理器。每個包稱為一個

Chart

Helm

用戶端安裝十分簡單,我們可以到 Github下載下傳最新的可執行程式,解壓出來就可以使用了,具體操作步驟可如下:

# 下載下傳 v2.16.1 版本
wget https://get.helm.sh/helm-v2.16.1-linux-amd64.tar.gz
# 解壓
tar -zxvf helm-v2.16.1-linux-amd64.tar.gz
cd linux-amd64/
# 移動到 /usr/local/bin 目錄下
cp helm /usr/local/bin/
           

服務端

tiller

安裝起來就相對來說不是那麼容易了,因為要下載下傳牆外的鏡像。好在

Docker Hub

上有别人打包上傳的鏡像,我們隻需要

pull

下來,打個

tag

即可,具體步驟如下:

# 下載下傳鏡像到本地
docker pull doublemine/kubernetes-helm.tiller:v2.16.1
# 添加 tag
docker tag doublemine/kubernetes-helm.tiller:v2.16.1 gcr.io/kubernetes-helm/tiller:v2.16.1
           

服務端的鏡像下載下傳到本地之後,我們就可以在叢集上安裝

tiller

,我們可以運作下面的指令來建立服務賬号和初始化用戶端

kubectl create serviceaccount tiller -n kube-system
kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount kube-system:tiller
helm init --wait --service-account tiller
           

安裝和初始化完成之後,我們想要驗證

tiller

服務是否運作,可以使用如下指令

$ kubectl get pod --namespace kube-system
NAME                                     READY   STATUS    RESTARTS   AGE
coredns-5c98db65d4-7rn5b                 1/1     Running   0          12h
coredns-5c98db65d4-bx9x2                 1/1     Running   0          12h
etcd-docker-desktop                      1/1     Running   0          12h
kube-apiserver-docker-desktop            1/1     Running   0          12h
kube-controller-manager-docker-desktop   1/1     Running   0          12h
kube-proxy-rdtfm                         1/1     Running   0          12h
kube-scheduler-docker-desktop            1/1     Running   0          12h
kubernetes-dashboard-7d75c474bb-qcbxx    1/1     Running   0          4h46m
tiller-deploy-54f7455d59-fgsnb           1/1     Running   0          12h
           

我們可以看到最後一列顯示

tiller

服務正在運作。

Helm 配置國内鏡像源

當我們使用

helm

安裝應用的時候,我們會發現下載下傳速度特别慢,還有可能會遇到網絡的問題,這種情況我們需要配置其預設下載下傳的鏡像源為國内。具體配置步驟如下:

# 删除預設的鏡像源
helm repo remove stable
# 增加新的國内鏡像源
helm repo add stable http://mirror.azure.cn/kubernetes/charts/
helm repo add incubator http://mirror.azure.cn/kubernetes/charts-incubator/
# 更新倉庫
sudo helm repo update

# 測試速度
helm search mysql