將WSL2作為生產力工具

来源:https://www.cnblogs.com/dmego/archive/2019/12/23/12082013.html
-Advertisement-
Play Games

適用於 的 子系統 ( ) 是 新增的功能,使用它可以直接在 上運行 命令。而 是 的一個新版本,它支持適用於 的 子系統在 上運行 二進位文件。 它的主要目標是提高文件系統的性能,並增加系統調用的完全相容性。 使用最新和最高的虛擬化技術在輕型實用程式虛擬機( )內部運行 內核。 啟用並配置 WSL ...


  • 原文鏈接(轉載請註明出處):將WSL2作為生產力工具


    適用於 LinuxWindows 子系統 (WSL) 是 Windows 10新增的功能,使用它可以直接在 Windows 上運行 Linux 命令。而WSL 2WSL的一個新版本,它支持適用於 LinuxWindows 子系統在 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 ,輸出內容如下,這裡 VERSION2 代表啟用了 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 Terminalwin推出的最新的一款命令行工具,可以在應用商店裡搜索並下載,安裝完成打開界面如下

Windows Terminal

關於其的介紹這裡就不多展開,這裡記錄如何使用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)

啟用基於實驗性 WSL2 的引擎覆選框

  • (*) 暴露 2375 埠,讓外部其他程式也能管理 Docker (打開 Expose daemon on tcp://localhost:2375 without TLS 前面的覆選框)
  • Resources 中設置要從哪個 WSL 2 發行版中訪問 Docker,如下圖使用的是 Ubuntu-18.04

設置 Docker 訪問的發行版

配置完成之後,點擊 Apply & Restart 應用並重啟 Docker Desktop 。重啟完成之後,我們看到 Desktop 左下腳的 Docker 狀態為綠色的 running 表示 Docker 正在運行。

要想知道自己安裝的 Docker 的相關版本信息,我們可以在 About Docker Desktop 中看到,如下圖所示,目前安裝的 Docker Engine 版本為 19.03.5Docker-compose 版本為 1.25.1-rc1 ,支持的 Kubernetes 版本為 v1.15.5

查看 Desktop 版本

安裝並配置 Kubernetes 環境

修改 Docker daemon 配置

docker 預設 Cgroup Drivercgroup ,但是在 kubernetes1.14 之後的版本推薦使用 systemd 來作為 Dockercgroup 驅動 。使使用 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 重啟。

啟用 Kubernetes

如果運氣好的話,當你重啟之後你就會發現 Desktop 左下腳 DockerKubernetes 的狀態都變成了綠色的 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.8win 下如何修改網路連接的 DNS 可以自行百度
  • 刪除 C:\ProgramData\DockerDesktop 目錄下的 pki 目錄文件
  • 刪除 C:\Users\<yourname>目錄下.kube 目錄文件
  • 關閉 win 的網路防火牆,或者將 vpnkit.exe 添加到防火牆出入站規則中。
  • Desktop 中點擊進入 troubleshoot ,點擊重置 kubernetes 集群(Reset Kubernetes cluster)

重置 kubernetes 集群

如果上述操作一次下來還是不成功,建議重覆操作幾次。如果出現了其他的問題,一般到 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 dashboardKubernetes集群的基於 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

HelmDeis 開發的一個用於 kubernetes 的包管理器。每個包稱為一個 ChartHelm 客戶端安裝十分簡單,我們可以到 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

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.如何判斷按鍵成功按下? 2.在什麼時候採集數據? 按鍵在按下的過程中會產生大約2ms-3ms抖動,如果此時此刻採集數據來判斷按鍵是不准確的,那麼為了採集到準確的數據需要設置一個大約10ms左右的計數器。 原理:當key按下,key_cnt開始計數,當key_cnt > 10ms 則判斷按鍵成功按 ...
  • \+, , (乘), /(除), (乘方), %(取模) let var=算術運算符表達式 var=$[算術運算符表達式] var=$((算術運算符表達式)) var=$(expr $ARG1 OP $APG2) 註意:乘法符號在某些場景中需要使用轉義符 練習:寫一個腳本文件,完成如下功能:添加3個 ...
  • 我們常用的linux系統在安裝過程中大多都省略了對系統進行分區的操作,以至於後期,不瞭解什麼是分區以及分區當中最基本的一些概念, 我們不說最細的知識,只求瞭解這個過程,那直接步入正題,開始第一節的學習。 開始準備 Linux 系統鏡像一個 這裡我選擇的是 TinyCore Linux 最小的linu ...
  • 作為各種電子產品的控制和處理核心,微控制單元(MCU)器件是一種集成微處理器(CPU)、存儲器(RAM/ROM)、計數器,以及I/O埠的晶元。從MCU內核架構來看,單片機有歷經多年的8051,基於Arm CortexM內核的微處理器,以及最近兩年流行起來的開源RISC-V微處理器。無論採用哪種架構 ...
  • SpringBoot+Shiro+mybatis整合 1. 使用Springboot版本2.0.4 與shiro的版本 引入springboot和shiro依賴 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.a ...
  • 文本處理都要使用正則表達式,正則表達式有: 基本正則表達式: 或者 擴展正則表達式: 或者 Linux 文本處理三劍客: sed:stream editor,流編輯工具程式。 awk:linux上是gawk,格式化文本工具程式。 grep:Global search Regular expressi ...
  • zabbix監控redis腳本 !/bin/bash 此腳本用來獲取redis cli info信息 redis_cli="/usr/local/redis/bin/redis cli" redis_host="127.0.0.1" redis_pass="123456" redis_port="6 ...
  • 執行apt-get install fcitx時,報如下錯誤 grub-pc E: Sub-process /usr/bin/dpkg returned an error code (1) 通過執行下麵的命令可以解決該問題: sudo mv /var/lib/dpkg/info/ /var/lib/ ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...