適用於 的 子系統 ( ) 是 新增的功能,使用它可以直接在 上運行 命令。而 是 的一個新版本,它支持適用於 的 子系統在 上運行 二進位文件。 它的主要目標是提高文件系統的性能,並增加系統調用的完全相容性。 使用最新和最高的虛擬化技術在輕型實用程式虛擬機( )內部運行 內核。 啟用並配置 WSL ...
- 原文鏈接(轉載請註明出處):將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
推出的最新的一款命令行工具,可以在應用商店裡搜索並下載,安裝完成打開界面如下
關於其的介紹這裡就不多展開,這裡記錄如何使用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
配置完成之後,預設的主題游標如下所示,如果想要配置更加豐富的主題,可以自行百度
安裝並配置 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
)
- (*) 暴露
2375
埠,讓外部其他程式也能管理Docker
(打開Expose daemon on tcp://localhost:2375 without TLS
前面的覆選框) - 在
Resources
中設置要從哪個WSL 2
發行版中訪問Docker
,如下圖使用的是Ubuntu-18.04
配置完成之後,點擊 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
。
安裝並配置 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
重啟。
如果運氣好的話,當你重啟之後你就會發現 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
)
如果上述操作一次下來還是不成功,建議重覆操作幾次。如果出現了其他的問題,一般到 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
進入 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