雖遲但到,k8s硬核技術,瞭解下?
前言
最近一週,一直在搗鼓基於wsl2
搭建k8s
叢集的問題,試了好久才終於把叢集環境搞好,然後又花了兩天時間,才搞清楚服務如何訪問,感覺這應該是我工作以來,摸索問題最久的一次了,這兩天更是肝到一點(忙起來。感覺時間過的好快),這執著的精神是值得肯定,但是也說明我確實對k8s
還處在初學階段,未來可能還有好多坑要踩,不過能走出這第一步,我覺得未來的困難也會被我踩在腳下的。
不過,通過昨天晚上和今天叢集的建立,我發現k8s
叢集建立這塊的經驗和思路已經很成熟了,所以就想趁著這股熱勁,把自己的經驗分享下,供大家參考,為了搞清楚k8s
,連ubuntu
我都安裝了好幾個:
今天我們演示內容是基於ubuntu 20.04
正文
啟用wsl
關於wsl
的啟用,我們上次(前天)已經分享過了,不清楚的小夥伴爬樓看下,後期考慮把這一塊的內容再細化下。暫時可以參考微軟官方文件:
https://docs.microsoft.com/zh-cn/windows/wsl/
啟用成功後,開啟我們的wsl
:
後期,我們分享如何美化這裡的終端視窗。
配置系統
修改系統更新源
經常使用Linux
的小夥伴應該知道,我們在安裝完Linux
第一步都是修改更新源。所以wsl
安裝完成後,我們首先也是要修改系統更新源的地址,官方預設地址國內更新比較慢,我們改成阿里巴巴的映象地址,就快多了。
我們要把如下地址新增到/etc/apt/sources.list
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
編輯命令我們直接用vim
,預設已經安裝好了:
sudo vim /etc/apt/sources.list
這裡用sudo
是因為當前使用者不是root
賬戶,如果登入的是root
賬戶,就不需要加sudo
,不過加了也不影響,下面的命令也是一樣的,後面就不再說明了,#
表示註釋該行資料。
修改完映象後,我們通過如下命令更新下系統:
sudo apt update & sudo apt upgrade
前面的命令是更新軟體列表,後面的命令是安裝更新,也可以分開執行(感覺我說的好細呀),然後靜靜等待更新完成:
daemonize
安裝配置
安裝daemonize
是為了讓我們的wsl
支援systemctl
命令,然後啟用Systemd
,這些命令在後面啟動docker
服務、建立叢集的時候都要用到。
安裝命令也很簡單(我一直覺得linux
安裝軟體比windows
方便,一行命令就完成安裝,它不香嗎):
sudo apt install daemonize #第二種方式執行
sudo apt install -yqq fontconfig daemonize # 第一種方式需要執行
因為我已經安裝過了,顯示得可能和你不一樣:
這裡有兩種方式。需要注意的是第一種方式需要多安裝一個軟體包:fontconfig
第一種方式
第一種方式需要建立一個指令碼,我們直接通過vim
建立:
sudo vim /etc/profile.d/00-wsl2-systemd.sh
然後將如下內容寫入,儲存
# Create the starting script for SystemDvi /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}')
fi
if [ -n "$SYSTEMD_PID" ] && [ "$SYSTEMD_PID" != "1" ]; then
exec sudo /usr/bin/nsenter -t $SYSTEMD_PID -a su - $LOGNAME
fi
然後關閉當前Terminal
,重新開啟。
第二種方式
下面是第二種方式,這行命令是為了啟用我們的systemd
命令
sudo daemonize /usr/bin/unshare --fork --pid --mount-proc /lib/systemd/systemd --system-unit=basic.target
注意
我推薦第一種,第二種雖然第一次是ok
的,但是在實際使用中發現,wsl
重啟後(或者電腦重啟),第二種方式執行docker
和k8s
命令的時候,會報下面的錯,而且我還沒找到解決方案:
具體情況,各位小夥伴可以自己試驗下。
安裝Docker
這裡安裝的是Linux
原生的docker
,並非是基於windows
環境的,安裝完成後,你就可以在wsl
使用原生的docker
了
安裝依賴
安裝軟體包以允許 apt
通過 HTTPS
使用儲存庫
# 安裝 Docker CE
## 設定倉庫
### 安裝軟體包以允許 apt 通過 HTTPS 使用儲存庫
sudo apt-get update && sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
這裡是安裝多個軟體的方式,上面總共安裝了四個軟體包,軟體包直接用空格分割。
新增docker官方發金鑰
### 新增 Docker 的 官方 GPG 祕鑰
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
新增docker
映象地址
### 新增 Docker apt 倉庫
add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
這裡會把它新增進/etc/apt/sources.list
檔案中。
安裝docker
和上面一樣,安裝多個軟體。
## 安裝 Docker CE
sudo apt-get update && sudo apt-get install containerd.io docker-ce docker-ce-cli -y
配置docker
這裡主要是設定docker
的映象倉庫的映象地址(有點繞,主要是國內下載映象慢,所以需要改成網易等國內的映象地址)
sudo vim /etc/docker/daemon.json
前面忘記說了,加sudo
就是以管理員執行,因為/etc
資料夾許可權比較高,普通使用者是沒法修改的。然後加入如下內容:
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn/", "https://hub-mirror.c.163.com/", "https://reg-mirror.qiniu.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
啟動docker
如果前面安裝daemonize
採用的第一種方式,就通過下面的方式啟動docker
:
# 啟動
service docker start
# 重啟
service docker restart
# 停止
service docker stop
否則下面的命令,如果上面這種方式無法啟動,也可以通過下面的命令試下(萬一好了呢,病急亂投醫唄):
mkdir -p /etc/systemd/system/docker.service.d
# 重啟 docker.
systemctl daemon-reload
# 重啟
systemctl restart docker
# 啟動
systemctl start docker
安裝 kubelet、kubeadm、kubectl
新增官方 GPG 祕鑰
這裡新增的是阿里巴巴的映象金鑰
sudo apt-get update && sudo apt-get install -y apt-transport-https
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
然後把下面的地址加到我們的軟體更新列表中:
sudo vim /etc/apt/sources.list.d/kubernetes.list
第一次開啟應該是空的,因為這個檔案是我們剛建立的:
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
新增完成後,我們更新下軟體列表資料:
sudo apt-get update
更新完成後,安裝k8s
軟體包:
sudo apt-get install -y kubelet kubeadm kubectl
因為我已經安裝過了,所以提示已經安裝過了,根據提示資訊我們發現安裝的版本應該是1.21.1
,應該是最新版本了。
建立k8s叢集
建立叢集的方式有多種,目前我瞭解到的有兩種,一種是用kubeadm
,一種是用kind
,經過多次嘗試,我發現第一種方式在wsl
下始終無法成功,剛開始是不支援swap
交換分割槽,忽略這個錯誤後,又有其他錯誤,一直沒跑通,所以本文我們採用後一種,即kind
。
下載安裝kind
首先,我們要下載kind
,直接按照官網給的教程開始:
# 下載kind
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.11.1/kind-linux-amd64
# 新增執行許可權
chmod +x ./kind
# 移動到
sudo mv ./kind /usr/local/kind
然後kind
就安裝完成了,詳細官方文件地址如下
https://kind.sigs.k8s.io/
建立k8s叢集
k8s
的常用命令,今天就不講了,後面梳理下再分享,今天只分享流程。
到這裡,建立叢集就很簡單了,直接執行下面的命令即可:
kind create cluster --name wslk8s
然後就是漫長的等待,如果不出意外,最後會顯示建立成功:
我們通過下面的命令看下節點資訊:
kubectl cluster-info --context kind-wslk8s
顯示資訊如下:
然後我們訪問如下地址看下
https://127.0.0.1:45187/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
雖然顯示結果有點問題,但是也說明叢集建立成功,下面我們安裝k8s
控制檯。
安裝圖形化控制面板
執行如下命令建立Dashboard
節點
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.1/aio/deploy/recommended.yaml
上面的命令就是根據yaml
構建我們的k8s
節點
然後通過kubectl describe pod -n kubernetes-dashboard
檢視建立日誌:
如上顯示錶明,我們的節點建立成功,然後執行如下命令:
kubectl proxy
再訪問如下地址:
http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/#/error?namespace=kuboard
如果是這樣的,表面我們控制面板安裝成功:
但是真正要訪問,還需要配置個使用者資訊,生成一個token
。
建立管理使用者配置
建立yaml
檔案
vim adminuser.yaml
新增檔案內容,下面內容就是我們要建立的節點資訊
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboard
然後在k8s
中建立:
kubectl apply -f adminuser.yaml
正常情況下,會提示建立成功
然後獲取授權token
kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')
下面顯示的就是token
資訊,直接複製即可:
然後我們把token
填入頁面,即可訪問:
然後,我們就可以通過kubernetes-dashboard
管理我們的k8s
了,可以看日誌,管理服務節點等,具體各位小夥伴自己摸索吧。
總結
今天的內容長度已經完全超出我的預期了,本來想著把主要流程梳理下就可以,但是實際總結過程發現,需要注意的點還是挺多的,而且有好多原計劃的內容也沒有加上,後面有時間梳理下再來分享。
總的來說,k8s
相關知識點確實還是挺多的,除了基礎命令,還有閘道器相關配置,Linux
相關知識點,但只要你掌握了今天的大部分知識點,我相信對你使用k8s
部署應用應該是有幫助的。好了,今天就到這裡吧!
本文參考內容: