y0ngb1n

Aben Blog

欢迎来到我的技术小黑屋ヾ(◍°∇°◍)ノ゙
github

Kubernetes 入門到實踐:搭建 K3s 集群初體驗

實踐環境#

本文將使用 Ubuntu 系統,如選擇 Centos 系統,亦可作為參考,其步驟與命令大同小異,萬變不離其宗。

本文首發於:https://github.com/y0ngb1n/y0ngb1n.github.io

安裝 Docker#

K3s 包含並默認為 containerd, 一個行業標準的容器運行時。本文將使用 Docker 作為容器運行時,需要提前安裝 Docker 環境。

# 更新軟件源
sudo apt update

# 切換 root 用戶
sudo su -

# 安裝 docker
apt install docker.io

# 啟動 docker daemon
systemctl enable --now docker
systemctl status docker

# 驗證 docker 環境
docker version && docker info
docker ps

後續啟動 K3s 時使用--docker 选项激活。參考使用 Docker 作為容器運行時文檔。

安裝 K3s#

Lightweight Kubernetes. Production ready, easy to install, half the memory, all in a binary less than 100 MB.

K3s 是一個高可用的、經過 CNCF 認證的輕量級 Kubernetes 發行版,專為物聯網及邊緣計算設計。

image

k3s  將安裝 Kubernetes 所需的一切打包進僅有  60MB 大小的二進制文件中,並且完全實現了 Kubernetes API。為了減少運行 Kubernetes 所需的內存,k3s 刪除了很多不必要的驅動程序,並用附加組件對其進行替換。由於它只需要極低的資源就可以運行,因此它能夠在任何  512MB  內存以上的設備上運行集群。

我們先從簡單的 K3s 上手,體驗下 K8s 的一半 K3s。待 K3s 大法修煉成功後,我們再採用 kubeadm 進行部署高可用 Kubernetes 集群,其部署架構幾乎一樣,只是個別核心組件的變化,萬變不離其宗,可依葫蘆畫瓢。

方案一:一鍵安裝(官方源,需外網)#

因 K3s 的核心組件鏡像需從 gcr.io 拉取(國內網絡不通),所以需具備外網訪問的環境,適用於伺服器均在國外的環境選用,簡單粗暴一鍵安裝。

# 一鍵默認安裝
curl -sfL https://get.k3s.io | sh -

方案二:一鍵安裝(國內源)推薦#

國內用戶,可以使用以下方法加速安裝,內置阿里雲鏡像源:

# 指定 K3s 版本
export INSTALL_K3S_VERSION=v1.23.13+k3s1

# 自定義啟動執行命令
export INSTALL_K3S_EXEC="--docker"

# 只安裝不啟動
export INSTALL_K3S_SKIP_START=true

# https://docs.rancher.cn/docs/k3s/installation/installation-requirements/_index#先決條件
# 為您添加到集群的每個節點設計一個獨特的名稱
export K3S_NODE_NAME=k3s-node-01

###
# agent 需加上,其他保持一致
###
# 設置了 K3S_URL,它將默認為“agent”。如果未設置K3S_URL,它將默認為“server”
export K3S_URL=
# 用於將 server 或 agent 加入集群的共享 secret
export K3S_TOKEN=

# 使用阿里雲鏡像源安裝
curl -sfL https://rancher-mirror.oss-cn-beijing.aliyuncs.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -

# 啟動 K3s 服務
systemctl enable --now k3s

# 查看 K3s 服務狀態
systemctl status k3s

方案三:離線安裝#

前提條件#

  • 在安裝 K3s 之前,完成上面的部署私有鏡像倉庫手動部署鏡像,導入安裝 K3s 所需要的鏡像。本小節將演示手動部署鏡像的方式。
  • K3s GitHub Release 頁面下載 K3s v1.23.13+k3s1 二進制文件,K3s 二進制文件需要與離線鏡像的版本匹配。將二進制文件放在每個離線節點的 /usr/local/bin 中,並確保這個二進制文件是可執行的。
  • 下載 K3s 安裝腳本,將安裝腳本放在每個離線節點的任意地方,並命名為 install.sh

當使用 INSTALL_K3S_SKIP_DOWNLOAD 環境變量運行 K3s 腳本時,K3s 將使用本地的腳本和二進制。

手動部署鏡像#

假設您已經在離線 / 國內環境中創建了節點。這種方法需要您手動將必要的鏡像部署到每個節點,適用於運行無法部署鏡像倉庫的邊緣部署場景。參考官方手動部署鏡像文檔。

  1. K3s GitHub Release 頁面獲取需安裝的 K3s v1.23.13+k3s1 的鏡像 tar 文件。

  2. 將 tar 文件放在images目錄下,例如:

    # 為每個節點創建離線鏡像的存儲文件夾
    sudo mkdir -p /var/lib/rancher/k3s/agent/images/
    
    # $ARCH 是當前伺服器的 CPU 架構
    sudo cp ./k3s-airgap-images-$ARCH.tar /var/lib/rancher/k3s/agent/images/
    
  3. 需手動將鏡像部署到每個節點,在每個節點執行上述操作。

下載 K3s v1.23.13+k3s1 二進制文件#

K3s GitHub Release 頁面下載 K3s v1.23.13+k3s1 二進制文件,K3s 二進制文件需要與離線鏡像的版本匹配。將二進制文件放在每個離線節點的 /usr/local/bin 中,並確保這個二進制文件是可執行的。

使用腳本安裝#

安裝腳本可從下面任一地址下載:

腳本地址說明
https://get.k3s.io/官方地址,需要外網環境
https://rancher-mirror.oss-cn-beijing.aliyuncs.com/k3s/k3s-install.sh阿里源,內置阿里雲鏡像源
https://raw.githubusercontent.com/k3s-io/k3s/master/install.shGitHub 地址,同官方源
# 下載腳本
curl -sfL https://get.k3s.io > install.sh

# 切換 root 用戶
sudo su -

# 赋予執行權限
chmod +x install.sh

# 安裝 K3s,跳過下載二進制文件,只安裝,不啟動
INSTALL_K3S_SKIP_DOWNLOAD=true INSTALL_K3S_SKIP_START=true ./install.sh

# 啟動 K3s
systemctl enable --now k3s

驗證 K3s#

檢查集群#

# 查看集群的運行情況
kubectl get nodes -owide
kubectl get all -A -owide
kubectl describe nodes k3s-node-01
kubectl -n kube-system describe deploy coredns

# 使用 Docker 作為運行時,會使用 docker 拉取鏡像與運行容器
docker images
docker ps

牛刀小試#

啟動 whoami 服務#

# 快速部署 whoami 應用,指定副本為 2,默認副本為 1
kubectl create deploy whoami --image=traefik/whoami --replicas=2
kubectl describe deploy whoami
# 監控 pod 狀態,通過擴縮容可直觀看到 pod 的調度情況
kubectl get pods --watch
# 嘗試下對 whoami 應用進行擴縮容
kubectl scale deploy whoami --replicas=5

請求鏈路說明#

讓我們嘗試著理解下 k8s 的請求鏈路:

request public-ip -> node-port -> svc-port -> pod-port -> container

通過 Service 暴露給集群內部訪問#

默認為 NodePort 模式,會在每個節點監聽

kubectl expose deploy whoami --port=80
kubectl get svc -owide
kubectl describe svc whoami

# 在本地通過 service 多訪問幾次,出輪詢訪問 container
# curl http://<external-ip>:<port>
$ curl `kubectl get -o template service/whoami --template='{{.spec.clusterIP}}'`
Hostname: whoami-84d974bbd6-shqsr
IP: 127.0.0.1
IP: 10.42.0.13
RemoteAddr: 10.42.0.1:42158
GET / HTTP/1.1
Host: 10.43.181.167
User-Agent: curl/7.68.0
Accept: */*

通過 Service 暴露給集群外網訪問#

指定 LoadBalancer 模式並指定公網 IP

# 自行替換 <PUBLIC_IP> 為當前節點的公網 IP
kubectl expose deploy whoami --type=LoadBalancer --port=80 --external-ip <PUBLIC_IP>

$ kubectl get svc whoami -owide
NAME     TYPE           CLUSTER-IP     EXTERNAL-IP       PORT(S)        AGE   SELECTOR
whoami   LoadBalancer   10.43.77.116   123.123.123.123   80:32101/TCP   16s   app=whoami

# 集群內部仍可正常訪問
curl 10.43.77.116
curl `kubectl get -o template service/whoami --template='{{.spec.clusterIP}}'`

# 通過外網瀏覽器訪問,需要開啟雲服務商的防火牆配置
# Ctrl + F5 多刷新幾次查看效果
http://123.123.123.123:32101

快速清理實驗環境#

kubectl delete all --all

卸載 K3s#

# 一鍵卸載 server
k3s-uninstall.sh

# 一鍵卸載 agent
k3s-agent-uninstall.sh

參考鏈接#

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。