1. 程式人生 > 其它 >雖遲但到,k8s硬核技術,瞭解下?

雖遲但到,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重啟後(或者電腦重啟),第二種方式執行dockerk8s命令的時候,會報下面的錯,而且我還沒找到解決方案:

具體情況,各位小夥伴可以自己試驗下。

安裝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部署應用應該是有幫助的。好了,今天就到這裡吧!

本文參考內容:

  1. https://blog.csdn.net/weixin_32364911/article/details/112238229
  2. https://www.cnblogs.com/xxred/p/13258347.html