日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

轻量级 Kubernetes 集群发行版 K3s 完全进阶指南

發布時間:2023/12/4 综合教程 37 生活家
生活随笔 收集整理的這篇文章主要介紹了 轻量级 Kubernetes 集群发行版 K3s 完全进阶指南 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

公眾號關注?「奇妙的 Linux 世界」

設為「星標」,每天帶你玩轉 Linux !

深入理解官方文檔,輕松學會使用 K3S 工具!

K3s 是一個輕量級的 Kubernetes 發行版,它針對邊緣計算、物聯網等場景進行了高度優化。

  • CNCF 認證的 Kubernetes 發行版

  • 支持 X86_64, ARM64, ARMv7 平臺

  • 單一進程包含 Kubernetes masterkubeletcontainerd

1. K3S 工具介紹

為你提供 k3s 的產品介紹

K3s 有以下增強功能:

  • 打包為單個二進制文件

    • K8S 相關的組件,比如 kube-api/ kube-manager 都打包到同一個二進制文件里面,這樣的話,只需要啟動這個文件就可以快速的啟動對應的組件。

  • 使用基于 sqlite3 的默認存儲機制

    • 同時支持使用 etcd3MySQLPostgreSQL 作為存儲機制。

  • 默認情況下是安全的

    • K3s 中有一個默認的證書管理機制(默認一年有效期),也有一個可以輪轉證書的功能(就是在小于九十天之內重啟 K3s 的話,就會自動續一年)。

  • 功能強大的 batteries-included 功能

    • 就是雖然有些服務本身這個二進制文件并沒有提供,但是可以通過內置的服務,將配置文件放到指定的目錄下面,就可以在啟動的時候一并將該服務啟動或替換默認組件。

  • 所有 K8S control-plane 組件都封裝在單個二進制文件和進程中

    • 因為封裝在二進制文件中,所以啟動的時候只有一個進程。好處在于只需要管理這個單一進程就可以了,同時也具備操作復雜集群的能力。

  • 最大程度減輕了外部依賴性

    • 即稍新一點的 Linux 內核就可以了(需要 kernelcgroup 掛載)。

之所以叫做 K3S 是因為希望安裝的 K8S 在內存占用方面只是一半的大小,而一半大的東西就是一個 5 個字母的單詞,簡寫為 K3S

  • 生命周期

    • 同時支持 3K8s 版本,支持的生命周期與 K8s 相同

    • 可以參考: Kubernetes 版本及版本偏差支持策略 進行學習

  • 更新周期

    • K8s 更新新版本后,一般 K3s 在一周內同步更新

    • 可以通過 這個鏈接 獲取 latest/stable/testing 版本

    • 我們默認安裝的是 stable 版本,可以運行通過命令進行查看

  • 命名規范

    • v1.20.4+k3s1: v1.20.4K8s 版本,k3s1 為補丁版本

#?K3s軟件包需要的依賴項
containerd??#?容器運行時(可以使用docker替代)
Flannel?????#?網絡
CoreDNS?????#?DNS
CNI?????????#?CNI
Traefik?????#?默認的controller服務(apisix/ingress-controller)
iptables????#?主機實用程序
service?load?balancer?????#?嵌入式服務負載均衡器
network?policy?controller?#?嵌入式網絡策略控制器#?K3s適用于以下場景
CI
Development
ARM
嵌入?K8s
物聯網-IoT
邊緣計算-Edge

與此同時,Rancher 中國團隊推出了一款針對 K3s 的效率提升工具:AutoK3s。只需要輸入一行命令,即可快速創建 K3s 集群并添加指定數量的 master 節點和 worker 節點。

2. K3S 快速入門

原理就是,將 K8S 的相關組件封裝到 K3S 的二進制文件中去!

原理就是,將 K8S 的相關組件封裝到 K3S 的二進制文件中去,然后啟動這二進制文件就可以啟動一個成熟的 K8S 集群。我們可以看到 K3SK8S 的架構基本差不多,其中 k3s-server 對應這個 control-plane,而 k3s-agent 對應著 node 節點。

可以看到 k3s 中使用的默認存儲是 SQLite(自帶),且默認的網絡使用的是 Flannel(自帶)。當服務端和客戶端都啟動之后,通過 Tunnel-Proxy 這個組件進行通信,通過這個通道去管理網絡流量。在 agent 節點中,通過 kubelet 操作 contaninerd 來創建對應 Pod。

  • K3s 架構

K3S工具進階指南
  • K8s 架構

K3S工具進階指南

國內的話,建議使用官方提供的 鏡像地址,這樣不但可以加速本地 K3s 的時候,而且方便部署和更新服務。這也是為什么建議國內使用 k3s-install.sh 部署服務的原因,因為其內部使用的地址都是從國內去獲取的。

3. K3S 安裝事項

3.1 安裝指南

理解 Server 節點的安裝,以及注冊 Agent 節點的步驟!

雖然可以通過下載二進制文件進行服務端和工作節點的運行(./k3s server),但是一旦我們退出進程,之前創建的節點也就立即銷毀了,所以還是建議使用腳本進行安裝。

#?主節點
$?./k3s?server#?工作節點
$?./k3s?agent?K3S_URL=xxx?K3S_TOKEN=xxx#?清除垃圾文件
$?rm?-rf?/etc/rancher?/var/lib/rancher
  • 鏡像加速

#?添加配置
$?cat?>>?/etc/rancher/k3s/registries.yaml?<<EOF
mirrors:"docker.io":endpoint:-?"https://fogjl973.mirror.aliyuncs.com"-?"https://registry-1.docker.io"
EOF#?重啟服務
$?sudo?systemctl?restart?k3s#?是否生效
$?sudo?crictl?info?|?grep?-A?2?"endpoint"

K3s 提供了一個安裝腳本,可以方便的在 systemdopenrc 的系統上將其作為服務安裝。運行此安裝后,K3s 服務將被配置為在節點重啟后或進程崩潰或被殺死時自動重啟。

  • 安裝內容

    • kubectlcrictl、ctr

    • k3s-killall.sh、k3s-uninstall.sh

  • 執行操作

    • kubeconfig 文件寫入到 /etc/rancher/k3s/k3s.yaml 里面

    • K3s 安裝的 kubectl 工具將自動使用該文件的配置來運行

    • 其他機器可以通過復制這個配置文件并修改 server 地址來操作 K3s 集群

  • 主節點 - 192.168.100.100

#?安裝腳本
#?https://get.k3s.io
$?curl?-sfL?https://get.k3s.io?|?sh?-#?建議使用這個安裝腳本(國內化了)
$?curl?-sfL?https://rancher-mirror.rancher.cn/k3s/k3s-install.sh?|?\INSTALL_K3S_MIRROR=cn?K3S_NODE_NAME=k3s1?\K3S_KUBECONFIG_OUTPUT=/home/escape/.kube/config?\INSTALL_K3S_EXEC="--docker"?sh?-
#?查找stable分支版本信息
[INFO]??Finding?release?for?channel?stable
[INFO]??Using?v1.23.6+k3s1?as?release#?獲取國內鏡像版本地址
[INFO]??Downloading?hash?https://rancher-mirror.rancher.cn/k3s/v1.23.6-k3s1/sha256sum-amd64.txt
[INFO]??Downloading?binary?https://rancher-mirror.rancher.cn/k3s/v1.23.6-k3s1/k3s
[INFO]??Verifying?binary?download#?安裝k3s二進制工具并鏈接相關工具(內置)
[INFO]??Installing?k3s?to?/usr/local/bin/k3s
[INFO]??Skipping?installation?of?SELinux?RPM
[INFO]??Creating?/usr/local/bin/kubectl?symlink?to?k3s
[INFO]??Creating?/usr/local/bin/crictl?symlink?to?k3s
[INFO]??Skipping?/usr/local/bin/ctr?symlink?to?k3s,?command?exists?in?PATH?at?/usr/bin/ctr#?安裝清除和卸載k3s生成的配置和工具
[INFO]??Creating?killall?script?/usr/local/bin/k3s-killall.sh
[INFO]??Creating?uninstall?script?/usr/local/bin/k3s-uninstall.sh#?常見了兩個systemd的配置
[INFO]??env:?Creating?environment?file?/etc/systemd/system/k3s.service.env
[INFO]??systemd:?Creating?service?file?/etc/systemd/system/k3s.service
[INFO]??systemd:?Enabling?k3s?unit
Created?symlink?/etc/systemd/system/multi-user.target.wants/k3s.service?→?/etc/systemd/system/k3s.service.#?啟動k3s服務
[INFO]??systemd:?Starting?k3s
  • 工作節點 - 192.168.100.101

#?工作節點上安裝并將它們添加到集群
#?https://docs.rancher.cn/docs/k3s/architecture/_index#注冊-agent-節點
$?curl?-sfL?https://get.k3s.io?|?\K3S_URL=https://myserver:6443?\K3S_TOKEN=mynodetoken?sh?-#?建議使用這個安裝命令(國內化了)
#?K3S_URL:?會使K3s以worker模式運行
#?K3S_TOKEN:?使用的值存儲在你的服務器節點上
#?K3S_NODE_NAME:?為每個節點提供一個有效且唯一的主機名
$?curl?-sfL?https://rancher-mirror.rancher.cn/k3s/k3s-install.sh?|?\INSTALL_K3S_MIRROR=cn?K3S_NODE_NAME=k3s2?\K3S_KUBECONFIG_OUTPUT=/home/escape/.kube/config?\K3S_URL=https://192.168.100.100:6443?\K3S_TOKEN=mynodetoken?sh?-#?mynodetoken
$?sudo?cat?/var/lib/rancher/k3s/server/token
#?查找stable分支版本信息
[INFO]??Finding?release?for?channel?stable
[INFO]??Using?v1.23.6+k3s1?as?release#?獲取國內鏡像版本地址
[INFO]??Downloading?hash?https://rancher-mirror.rancher.cn/k3s/v1.23.6-k3s1/sha256sum-amd64.txt
[INFO]??Downloading?binary?https://rancher-mirror.rancher.cn/k3s/v1.23.6-k3s1/k3s
[INFO]??Verifying?binary?download#?安裝k3s二進制工具并鏈接相關工具(內置)
[INFO]??Installing?k3s?to?/usr/local/bin/k3s
[INFO]??Creating?/usr/local/bin/kubectl?symlink?to?k3s
[INFO]??Creating?/usr/local/bin/crictl?symlink?to?k3s
[INFO]??Skipping?/usr/local/bin/ctr?symlink?to?k3s#?安裝清除和卸載k3s生成的配置和工具
[INFO]??Creating?killall?script?/usr/local/bin/k3s-agent-killall.sh
[INFO]??Creating?uninstall?script?/usr/local/bin/k3s-agent-uninstall.sh#?常見了兩個systemd的配置
[INFO]??env:?Creating?environment?file?/etc/systemd/system/k3s-agent.service.env
[INFO]??systemd:?Creating?service?file?/etc/systemd/system/k3s-agent.service
[INFO]??systemd:?Enabling?k3s-agent?unit
Created?symlink?/etc/systemd/system/multi-user.target.wants/k3s-agent.service?→?/etc/systemd/system/k3s-agent.service.#?啟動k3s服務
[INFO]??systemd:?Starting?k3s-agent

3.2 配置要求

理解 Server 節點的安裝,以及注冊 Agent 節點的步驟!

  • [1] 先決條件

    • 選擇上,兩個節點不能有相同的主機名

    • 不修改主機名可以通過添加隨機后綴或指定主機名

#?為每個節點添加隨機后綴
$?curl?-sfL?http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh?|?\INSTALL_K3S_MIRROR=cn?K3S_URL=https://192.168.100.100:6443?\K3S_TOKEN=xxx?sh?-s?-?--with-node-id#?為每個節點指定主機名
$?curl?-sfL?http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh?|?\K3S_NODE_NAME="k3s2"?INSTALL_K3S_MIRROR=cn?\K3S_URL=https://192.168.64.3:6443?K3S_TOKEN=xxx?sh?-#?為每個節點指定主機名
$?curl?-sfL?http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh?|?\INSTALL_K3S_MIRROR=cn?K3S_URL=https://192.168.64.3:6443?\K3S_TOKEN=xxx?sh?-s?-?--node-name?k3s2
  • [2] 硬件信息

    • 操作系統:可以在大多數現代 Linux 系統上運行

    • 磁盤設備:K3s 的性能取決于數據庫的性能(建議使用 SSD 硬盤)

    • 網絡相關:K3s Server 節點的入站規則,所有出站流量都是允許的

協議 端口 描述
TCP 6443 K3s agent 節點 Kubernetes API Server
UDP 8472 K3s server 和 agent 節點 僅對 Flannel VXLAN 需要
TCP 10250 K3s server 和 agent 節點 Kubelet metrics
TCP 2379-2380 K3s server 節點 只有嵌入式 etcd 高可用才需要
  • [3] 安裝選項

    • 官方安裝參數文檔

    • 安裝選項示例演示

Environment Variable Description
INSTALL_K3S_EXEC 用于在服務中啟動 K3s 的后續子命令
K3S_CONFIG_FILE 指定配置文件的位置
K3S_TOKEN 用于將 server/agent 加入集群的共享 secret
K3S_TOKEN_FILE 用于將 server/agent 加入集群的共享 secret 文件
INSTALL_K3S_VERSION 指定下載 K3s 的版本
K3S_TOKEN_FILE 指定 ?cluster-secret/token 的文件目錄
INSTALL_K3S_SKIP_START 將不會啟動 K3s 服務
INSTALL_K3S_SKIP_DOWNLOAD 用于離線安裝;設置之后不會下載遠程工具
#?其實就把對應參數加到systemd配置文件里面去了
$?curl?-sfL?http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh?|?\INSTALL_K3S_MIRROR=cn?\INSTALL_K3S_EXEC="--docker"?sh?-#?自動化部署(不用獲取token值了)
#?主節點和工作節點使用我們指定的key來通信
$?curl?-sfL?http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh?|?\INSTALL_K3S_MIRROR=cn?\K3S_TOKEN=rancher-k3s?sh?-
$?sudo?cat?/var/lib/rancher/k3s/server/token
  • [4] 其他說明

    • 運行 agent 時還必須設置 K3S_TOKEN

    • K3S_ 開頭的環境變量將被保留,供 systemd/openrc 使用

    • 沒有明確設置 exec 并設置 K3S_URL 的話會將命令默認為工作節點

3.3 命令參數

理解 Server 節點的安裝,以及注冊 Agent 節點的步驟!

在整個 K3s 文檔中,你會看到一些選項可以作為命令標志和環境變量傳遞進來,那該如何使用標志和環境變量呢?

  • [1] 使用標志和環境變量

#?使用標志
$?curl?-sfL?https://get.k3s.io?|?K3S_KUBECONFIG_MODE="644"?sh?-s?-
$?curl?-sfL?https://get.k3s.io?|?sh?-s?-?--write-kubeconfig-mode?644#?環境變量
$?curl?-sfL?https://get.k3s.io?|?\INSTALL_K3S_EXEC="--flannel-backend?none"?sh?-s?-
$?curl?-sfL?https://get.k3s.io?|?\sh?-s?-?server?--flannel-backend?none
  • [2] K3s Server/Agent - 常用配置

#?write-kubeconfig
#?將管理客戶端的kubeconfig寫入這個文件
$?curl?-sfL?http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh?|?\INSTALL_K3S_MIRROR=cn?\K3S_KUBECONFIG_OUTPUT=/root/.kube/config?\sh?-
#?使用docker作為容器運行時
$?curl?-sfL?http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh?|?\INSTALL_K3S_MIRROR=cn?\INSTALL_K3S_EXEC="--docker"?sh?-#?指定運行時工具
$?curl?-sfL?http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh?|?\INSTALL_K3S_MIRROR=cn?\INSTALL_K3S_EXEC="--container-runtime-endpoint?containerd"?\sh?-#?設置私有鏡像倉庫配置文件
#?默認配置文件:?/etc/rancher/k3s/registries.yaml
$?curl?-sfL?http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh?|?\INSTALL_K3S_MIRROR=cn?\INSTALL_K3S_EXEC="--private-registry?xxx"?\sh?-
#?針對多網卡主機安裝K3s集群
#?默認多網卡會使用默認網關的那個卡
$?rout?-n#?K3s?server
$?curl?-sfL?http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh?|?\INSTALL_K3S_MIRROR=cn?\INSTALL_K3S_EXEC="--node-ip=192.168.100.100"?\sh?-#?K3s?agent
$?curl?-sfL?http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh?|?\INSTALL_K3S_MIRROR=cn?\K3S_URL=https://192.168.99.211:6443?K3S_TOKEN=xxx?\INSTALL_K3S_EXEC="--node-ip=192.168.100.100"?\sh?-
#?--tls-san
#?在TLS證書中添加其他主機名或IP作為主機備用名稱
#?即在公網環境下允許通過公網IP訪問控制、操作遠程集群
#?或者部署多個Server并使用LB進行負責,就需要保留公網地址
$?curl?-sfL?http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh?|?\INSTALL_K3S_MIRROR=cn?\INSTALL_K3S_EXEC="--tls-san?1.1.1.1"??\sh?-#?獲取配置
$?kubectl?get?secret?k3s-serving?-n?kube-system?-o?yaml#?然后本機復制公網主節點對應的yaml文件即可本地操作了
$?scp?ci@1.1.1.1:/etc/rancher/k3s/k3s.yaml?~/.kube/config
#?修改啟動的服務對應配置(調整節點的啟動的最大Pod數量)
$?curl?-sfL?http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh?|?\INSTALL_K3S_MIRROR=cn?\INSTALL_K3S_EXEC='--kubelet-arg=max-pods=200'?\sh?-#?修改啟動的服務對應配置(使用ipvs作為服務調度工具)
$?curl?-sfL?http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh?|?\INSTALL_K3S_MIRROR=cn?\INSTALL_K3S_EXEC='--kube-proxy-arg=proxy-mode=ipvs'?\sh?-#?修改啟動的服務對應配置(調整服務啟動的端口范圍)
$?curl?-sfL?http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh?|?\INSTALL_K3S_MIRROR=cn?\INSTALL_K3S_EXEC='--kube-apiserver-arg=service-node-port-range=40000-50000'?\sh?-#?kubelet-arg?????--kubelet-arg
#?kube-apiserver??--kube-apiserver-arg
#?kube-proxy-arg??--kube-proxy-arg
#?kube-proxy-arg??--kube-proxy-arg=proxy-mode=ipvs
#?--data-dir
#?修改K3s數據存儲目錄
$?curl?-sfL?http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh?|?\INSTALL_K3S_MIRROR=cn?\INSTALL_K3S_EXEC='--data-dir=/opt/k3s-data'?\sh?-
#?禁用組件
$?curl?-sfL?http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh?|?\INSTALL_K3S_MIRROR=cn?\INSTALL_K3S_EXEC='--disable?traefik'?\sh?-#?自己加自己需要的服務
$?ls?/var/lib/rancher/k3s/server/manifests
$?kubectl?get?pods?-A?|?grep?traefik
#?添加label和taint標識
$?curl?-sfL?http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh?|?\INSTALL_K3S_MIRROR=cn?\INSTALL_K3S_EXEC='--node-label?foo=bar,hello=world?\--node-taint?key1=value1:NoExecute'sh?-#?查看一下
$?kubectl?describe?nodes
  • [3] K3s Server/Agent - 數據庫選項

#?指定數據源名稱
#?標志位:?--datastore-endpoint&nbsp;value
#?環境變量:?K3S_DATASTORE_ENDPOINT
$?curl?-sfL?http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh?|?\INSTALL_K3S_MIRROR=cn?\INSTALL_K3S_EXEC='--datastore-endpoint&nbsp;etcd'?\sh?-
#?cron規范中的快照間隔時間
#?--etcd-snapshot-schedule-cron&nbsp;value
$?curl?-sfL?http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh?|?\INSTALL_K3S_MIRROR=cn?\INSTALL_K3S_EXEC='--etcd-snapshot-schedule-cron?*&nbsp;*/5&nbsp;*&nbsp;*&nbsp;*'?\sh?-

3.4 網絡選項

理解 Server 節點的安裝,以及注冊 Agent 節點的步驟!

默認情況下,K3s 將以 flannel 作為 CNI 運行,使用 VXLAN 作為默認后端,CNI 和默認后端都可以通過參數修改。要啟用加密,請使用下面的 IPSecWireGuard 選項。

#?默認安裝K3s之后的網絡配置
$?sudo?cat?/var/lib/rancher/k3s/agent/etc/flannel/net-conf.json
{"Network":?"10.42.0.0/16","EnableIPv6":?false,"EnableIPv4":?true,"IPv6Network":?"::/0","Backend":?{"Type":?"vxlan"}
}
CLI Flag 和 Value 描述
--flannel-backend=vxlan 使用 VXLAN 后端(默認)
--flannel-backend=host-gw 使用 host-gw 后端
--flannel-backend=ipsec 使用 IPSEC 后端;對網絡流量進行加密
--flannel-backend=wireguard 使用 WireGuard 后端;對網絡流量進行加密
  • 配置 Flannel 選項

這樣,我就可以在安裝 K3s 或者之后修改對應配置文件,來修改 Flannel 默認的后端網絡配置選項(重啟會覆蓋不生效)了。下面,我們演示下,如何修改為 host-gw 模式。

#?主節點
#?flannel-backend使用host-gw
#?該模式會把對端主機的IP當做默認網管(多Server情況)
$?curl?-sfL?http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh?|?\INSTALL_K3S_MIRROR=cn?\INSTALL_K3S_EXEC='--flannel-backend=host-gw'?\sh?-#?工作節點
$?curl?-sfL?http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh?|?\INSTALL_K3S_MIRROR=cn?K3S_URL=https://192.168.100.100:6443?\K3S_TOKEN=xxx?sh?-
#?默認的路由信息
$?route?-n
0.0.0.0?????????172.16.64.1?????0.0.0.0?????????UG????100????0????????0?enp0s2
10.42.1.0???????172.16.64.9?????255.255.255.0???UG????0??????0????????0?enp0s2#?查看配置之后的網絡配置
$?sudo?cat?/var/lib/rancher/k3s/agent/etc/flannel/net-conf.json
{"Network":?"10.42.0.0/16","Backend":?{"Type":?"host-gw"}
}
  • 啟用 Directrouting 特性

Flannel 自身的特性:當主機在同一子網時,啟用 direct routes(如 host-gw)。vxlan 只用于將數據包封裝到不同子網的主機上,同子網的主機之間使用 ?host-gw,默認值為 ?false

要添加我們就不能修改其對應的網絡配置文件,因為重新安裝或者重啟都會把這個配置沖掉(變成默認配置),所以需要折中下。我們自建一個網絡配置文件,然后在啟動的時候執行從哪個配置文件里面加載對應配置。

#?k3s的master和agent
$?sudo?cat?/etc/flannel/net-conf.json
{"Network":?"10.42.0.0/16","Backend":?{"Type":?"vxlan","Directrouting":?true}
}#?k3s?master
$?curl?-sfL?http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh?|?\INSTALL_K3S_MIRROR=cn?\INSTALL_K3S_EXEC='--flannel-backend=host-gw'?\sh?-
  • 自定義 CNI

使用 ?--flannel-backend=none(禁用) 運行 K3s,然后在安裝你選擇的 CNI。按照 Calico CNI 插件指南 來修改 CalicoYAML 配置文件,在 container_settings 部分中允許 IP 轉發。

#?加到Calico的YAML文件中
#?允許IP轉發(這個是K3s的一個限制;需要開啟)
"container_settings":?{"allow_ip_forwarding":?true
}-?name:?CALICO_IPV4POOL_CIDRvalue:?"192.168.200.0/24"
#?通過在主機上運行以下命令,確保設置已被應用(true)
$?sudo?cat?/etc/cni/net.d/10-canal.conflist#?calico
#?其中--cluster-cidr可不設置
$?curl?-sfL?http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh?|?\INSTALL_K3S_MIRROR=cn?\INSTALL_K3S_EXEC='--flannel-backend=none?\--cluster-cidr=192.168.200.0/24"'?\sh?-#?啟動網絡服務
$?kubectl?apply?-f?./calico.yaml

3.5 外部數據庫

理解 Server 節點的安裝,以及注冊 Agent 節點的步驟!

  • [1] 使用外部數據庫實現高可用安裝

    • 兩個或多個server 節點

    • 零個或多個agent 節點

    • 外部數據存儲(Etcd/MySQL/PostgRES)

    • 固定的注冊地址(LB)

    • 這應該是最適合國內用戶的 K3s HA 方案

雖然單節點 k3s server 集群可以滿足各種用例,但是對于需要穩定運行的重要環境,可以在 HA 配置中運行 K3s,如何使用外部數據庫安裝一個高可用的 K3s 集群?

K3S安裝事項 - 外部數據庫
主機名 角色 IP
k3s-server-1 k3s master 172.31.2.134
k3s-server-2 k3s master 172.31.2.42
k3s-db DB 172.31.10.251
k3s-lb LB 172.31.13.97
k3s-agent k3s agent 172.31.15.130
#?1.創建一個外部數據存儲
$?docker?run?--name?some-mysql?\--restart=unless-stopped?-p?3306:3306?\-e?MYSQL_ROOT_PASSWORD=password?-d?mysql:5.7#?2.啟動k3s-server節點(有讀寫權限不用加庫名)
#?mysql://username:password@tcp(hostname:3306)/database-name
#?可加污點?--node-taint?CriticalAddonsOnly=true:NoExecute
$?curl?-sfL?http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh?|?\INSTALL_K3S_MIRROR=cn?sh?-?server?\--datastore-endpoint="mysql://root:password@ip:3306/k3s"?\--tls-san?172.31.13.97
#?3.配置固定的注冊地址(k3s-lb節點)
#?Agent節點需要一個URL來注冊(LB)
$?cat?>>?/etc/nginx.conf?<<EOF
worker_processes?4;
worker_rlimit_nofile?40000;events?{worker_connections?8192;
}stream?{upstream?k3s_api?{least_conn;server?172.31.2.134:6443?max_fails=3?fail_timeout=5s;server?172.31.2.42:6443?max_fails=3?fail_timeout=5s;}server?{listen?????6443;proxy_pass?k3s_api;}
}
EOF#?啟動服務
$?docker?run?-d?--restart=unless-stopped?\-p?6443:6443?\-v?/etc/nginx.conf:/etc/nginx/nginx.conf?\nginx:1.14
#?4.加入Agent節點
#?Agent會保存LB節點和每個Server節點的IP信息
#?cat?/var/lib/rancher/k3s/agent/etc/k3s-agent-load-balancer.json
$?curl?-sfL?http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh?|?\INSTALL_K3S_MIRROR=cnK3S_URL=https://172.31.13.97:6443?K3S_TOKEN=mynodetoken?\sh?-#?5.通過kubeconfig訪問K3s集群
$?kubectl?get?nodes
NAME???????????STATUS???ROLES??????????????????AGE???VERSION
k3s-server-1???Ready????control-plane,master???68s???v1.20.7+k3s1
k3s-server-2???Ready????control-plane,master???66s???v1.20.7+k3s1
  • [2] 嵌入式 DB 的高可用

要在這種模式下運行 K3s,你必須有奇數的服務器節點,建議從三個節點開始。在嵌入式中,默認使用 Etcd 作為高可用的數據庫。

#?服務器節點(啟動etcd集群)
#?SECRET我們預定一個key值
#?使用cluster-init標志來啟用集群
#?并使用一個標記作為共享的密鑰來加入其他服務器到集群中
$?curl?-sfL?http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh?|?\INSTALL_K3S_MIRROR=cn?K3S_TOKEN=SECRET?\sh?-s?-?--cluster-init#?查看類型
$?sudo??kubectl?get?nodes
NAME????STATUS??ROLES??????????????????????AGE??VERSION
ip-xxx??Ready???control-plane,etcd,master??19h??v1.23.6+k3s1#?其他服務器節點(2/3)
$?curl?-sfL?http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh?|?\INSTALL_K3S_MIRROR=cn?K3S_TOKEN=SECRET?\sh?-s?-?--server?https://<ip-or-host-server>:6443#?查詢ETCD集群狀態
# etcd證書默認目錄:/var/lib/rancher/k3s/server/tls/etcd
# etcd數據默認目錄:/var/lib/rancher/k3s/server/db/etcd
$?ETCDCTL_ENDPOINTS='https://172.31.12.136:2379,\https://172.31.4.43:2379,\https://172.31.4.190:2379'?\
ETCDCTL_CACERT='/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt'?\
ETCDCTL_CERT='/var/lib/rancher/k3s/server/tls/etcd/server-client.crt'\
ETCDCTL_KEY='/var/lib/rancher/k3s/server/tls/etcd/server-client.key'?\
ETCDCTL_API=3?etcdctl?endpoint?status?--write-out=table
  • [3] 集群數據存儲選項

使用 etcd 以外的數據存儲運行 K8S 的能力使 K3s 區別于其他 K8S 發行版。該功能為 K8S 操作者提供了靈活性,可用的數據存儲選項允許你選擇一個最適合用例的數據存儲。

如果你的團隊沒有操作 etcd 的專業知識,可以選擇 MySQLPostgreSQL 等企業級 SQL 數據庫。如果您需要在 CI/CD 環境中運行一個簡單的、短暫的集群,可以使用嵌入式 SQLite 數據庫

如果你想使用外部數據存儲,如 PostgreSQL、MySQLetcd,你必須設置 datastore-endpoint 參數,以便 K3s 知道如何連接到它,也可以指定參數來配置連接的認證和加密。下表總結了這些參數,它們可以作為 CLI 標志或環境變量傳遞。

CLI Flag 環境變量 描述
--datastore-endpoint K3S_DATASTORE_ENDPOINT 指定一個 PostgresSQL、MySQL 或 etcd 連接字符串。用于描述與數據存儲的連接。這個字符串的結構是特定于每個后端的,詳情如下。
--datastore-cafile K3S_DATASTORE_CAFILE TLS 證書頒發機構(CA)文件,用于幫助確保與數據存儲的通信安全。如果你的數據存儲通過 TLS 服務請求,使用由自定義證書頒發機構簽署的證書,你可以使用這個參數指定該 CA,這樣 K3s 客戶端就可以正確驗證證書。
--datastore-certfile K3S_DATASTORE_CERTFILE TLS 證書文件,用于對數據存儲進行基于客戶端證書的驗證。要使用這個功能,你的數據存儲必須被配置為支持基于客戶端證書的認證。如果你指定了這個參數,你還必須指定datastore-keyfile參數。
--datastore-keyfile K3S_DATASTORE_KEYFILE TLS 密鑰文件,用于對數據存儲進行基于客戶端證書的認證。更多細節請參見前面的datastore-certfile參數。

作為最佳實踐,我們建議將這些參數設置為環境變量,而不是命令行參數,這樣你的數據庫證書或其他敏感信息就不會作為進程信息的一部分暴露出來。

3.6 私有鏡像倉庫

理解 Server 節點的安裝,以及注冊 Agent 節點的步驟!

K3s 默認使用 containerd 作為容器運行時,所以在 docker 上配置鏡像倉庫是不生效的。K3s 鏡像倉庫配置文件由兩大部分組成:mirrors 和 ?configs。

  • Mirrors 是一個用于定義專用鏡像倉庫的名稱和 endpoint 的指令

  • Configs 部分定義了每個 mirrorTLS 和證書配置

  • 對于每個 mirror,你可以定義 auth/tls

K3s registry 配置目錄為:/etc/rancher/k3s/registries.yaml。K3s 啟動時會檢查 ?/etc/rancher/k3s/ 中是否存在 ?registries.yaml 文件,并指示 containerd 使用文件中定義的鏡像倉庫。如果你想使用一個私有的鏡像倉庫,那么你需要在每個使用鏡像倉庫的節點上以 root 身份創建這個文件。

請注意,server 節點默認是可以調度的。如果你沒有在 server 節點上設置污點,那么將在它們上運行工作負載,請確保在每個 server 節點上創建 ?registries.yaml 文件。

containerd 使用了類似 K8Ssvcendpoint 的概念,svc 可以理解為訪問名稱,這個名稱會解析到對應的 endpoint 上。也可以理解 mirror 配置就是一個反向代理,它把客戶端的請求代理到 endpoint 配置的后端鏡像倉庫。mirror 名稱可以隨意填寫,但是必須符合 IP 或域名的定義規則。并且可以配置多個 endpoint,默認解析到第一個 endpoint,如果第一個 endpoint 沒有返回數據,則自動切換到第二個 endpoint,以此類推。

#?/etc/rancher/k3s/registries.yaml
#?同時可以設置多個mirrors地址
#?可以對mirrors設置權限和證書
mirrors:"172.31.6.200:5000":endpoint:-?"http://172.31.6.200:5000"-?"http://x.x.x.x:5000"-?"http://y.y.y.y:5000""rancher.ksd.top:5000":endpoint:-?"http://172.31.6.200:5000""docker.io":endpoint:-?"https://fogjl973.mirror.aliyuncs.com"-?"https://registry-1.docker.io"configs:"172.31.6.200:5000":auth:username:?adminpassword:?Harbor@12345tls:cert_file:?/home/ubuntu/harbor2.escapelife.site.certkey_file:?/home/ubuntu/harbor2.escapelife.site.keyca_file:?/home/ubuntu/ca.crt
#?鏡像都是從同一個倉庫獲取到的
$?sudo?systemctl?restart?k3s.service
$?sudo?crictl?pull?172.31.6.200:5000/library/alpine
$?sudo?crictl?pull?rancher.ksd.top:5000/library/alpine

這里我們介紹下,如何使用 TLS 配置。

#?證書頒發機構頒發的證書
$?cat?>>?/etc/rancher/k3s/registries.yaml?<<EOF
mirrors:"harbor.escapelife.site":endpoint:-?"https://harbor.escapelife.site"
configs:"harbor.escapelife.site":auth:username:?adminpassword:?Harbor@12345
EOF$?sudo?systemctl?restart?k3s
#?自簽名證書
$?cat?>>?/etc/rancher/k3s/registries.yaml?<<EOF
mirrors:"harbor2.escapelife.site":endpoint:-?"https://harbor2.escapelife.site"
configs:"harbor2.escapelife.site":auth:username:?adminpassword:?Harbor@12345tls:cert_file:?/home/ubuntu/harbor2.escapelife.site.certkey_file:??/home/ubuntu/harbor2.escapelife.site.keyca_file:???/home/ubuntu/ca.crt
EOF$?sudo?systemctl?restart?k3s
#?不使用TLS證書
$?cat?>>?/etc/rancher/k3s/registries.yaml?<<EOF
mirrors:"docker.io":endpoint:-?"https://fogjl973.mirror.aliyuncs.com"-?"https://registry-1.docker.io"
EOF$?sudo?systemctl?restart?k3s

K3s 將會在 /var/lib/rancher/k3s/agent/etc/containerd/config.toml 中為 containerd 生成 ?config.toml。如果要對這個文件進行高級設置,你可以在同一目錄中創建另一個名為 ?config.toml.tmpl 的文件,此文件將會代替默認設置。

#?完整示例
$?cat?>>?/etc/rancher/k3s/registries.yaml
mirrors:"harbor.escapelife.site":endpoint:-?"https://harbor.escapelife.site""harbor2.escapelife.site":endpoint:-?"https://harbor2.escapelife.site""172.31.19.227:5000":endpoint:-?"http://172.31.19.227:5000""docker.io":endpoint:-?"https://fogjl973.mirror.aliyuncs.com"-?"https://registry-1.docker.io"configs:"harbor.escapelife.site":auth:username:?adminpassword:?Harbor@12345"harbor2.escapelife.site":auth:username:?adminpassword:?Harbor@12345tls:cert_file:?/home/ubuntu/harbor2.escapelife.site.certkey_file:??/home/ubuntu/harbor2.escapelife.site.keyca_file:???/home/ubuntu/ca.crt

3.7 離線安裝

理解 Server 節點的安裝,以及注冊 Agent 節點的步驟!

離線安裝的過程主要分為以下兩個步驟:

  • 步驟 1:部署鏡像

    • 部署私有鏡像倉庫

    • 手動部署鏡像

  • 步驟 2:安裝 K3s 工具

    • 單節點安裝

    • 高可用安裝

  • 通過私有鏡像倉庫安裝 K3s

    • k3s-images.txt 包含對于版本依賴的鏡像文件

    • k3s-airgap-images-amd64.tar 包含對于版本的鏡像文件

#?將所需鏡像上傳到私有鏡像倉庫
#?https://github.com/k3s-io/k3s/releases
可以從K3s鏡像列表獲取到版本,下載上傳到私有鏡像倉庫#?創建鏡像倉庫(YAML)
#?按照私有鏡像倉庫配置指南創建并配置registry.yaml文件
$?mkdir?-p?/etc/rancher/k3s/
cat?>>?/etc/rancher/k3s/registries.yaml?<<EOF
mirrors:"docker.io":endpoint:-?"https://harbor.escapelife.site"
configs:"docker.io":auth:username:?adminpassword:?Harbor@12345
EOF
#?安裝單節點K3s集群
#?https://github.com/k3s-io/k3s/releases
可以從K3s倉庫獲取到版本(二進制文件)#?獲取K3s安裝腳本
$?wget?https://get.k3s.io?-o?./install.sh
$?wget?http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh#?安裝K3s-server
$?INSTALL_K3S_SKIP_DOWNLOAD=true?./install.sh#?將agent加入到K3s集群
$?INSTALL_K3S_SKIP_DOWNLOAD=true?\K3S_URL=https://myserver:6443?K3S_TOKEN=mynodetoken?\./install.sh
  • 通過手動部署鏡像安裝 K3s

#?從Github頁面獲取你所運行的K3s版本及文件
#?https://github.com/rancher/k3s/releases
k3s二進制文件+鏡像tar文件#?將tar文件放在images目錄下
$?sudo?mkdir?-p?/var/lib/rancher/k3s/agent/images/
$?sudo?cp?./k3s-airgap-images-$ARCH.tar?/var/lib/rancher/k3s/agent/images/#?將k3s二進制文件放在/usr/local/bin/k3s路徑上
$?mv?./k3s?/usr/local/bin/
$?chmod?755?/usr/local/bin/k3s#?安裝K3s-server
$?INSTALL_K3S_SKIP_DOWNLOAD=true?./install.sh#?將agent加入到K3s集群
$?INSTALL_K3S_SKIP_DOWNLOAD=true?\K3S_URL=https://myserver:6443?K3S_TOKEN=mynodetoken?\./install.sh

離線升級 K3s 版本,完成離線安裝 K3s 后,還可以通過腳本升級 K3s 版本,或啟用自動升級功能,以保持離線環境中的 K3s 版本與最新的 K3s 版本同步。

  • 升級 K3s 版本

#?通過腳本升級
#?https://github.com/rancher/k3s/releases
從Github頁面下載要升級到的K3s版本#?替換
#?復制并替換每個節點上/usr/local/bin中的舊K3s二進制文件
$?mv?./k3s?/usr/local/bin/
$?chmod?755?/usr/local/bin/k3s
$?wget?http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh#?重啟K3s服務
$?sudo?systemctl?restart?k3s.service

3.8 儀表盤及卸載

理解 Server 節點的安裝,以及注冊 Agent 節點的步驟!

推薦使用三種儀表盤工具,分別是對應是 Kubernetes Dashboard、kube-explorerRancher UI,其各自各有優劣。

  • [1] Kubernetes Dashboard

#?部署Kubernetes儀表盤
$?GITHUB_URL=https://github.com/kubernetes/dashboard/releases
$?VERSION_KUBE_DASHBOARD=$(curl?-w?'%{url_effective}'?-I?-L?-s?-S?\${GITHUB_URL}/latest?-o?/dev/null?|?sed?-e?'s|.*/||')
$?sudo?k3s?kubectl?create?-f?https://raw.githubusercontent.com/kubernetes/dashboard/${VERSION_KUBE_DASHBOARD}/aio/deploy/recommended.yaml
#?儀表盤RBAC配置
#?本指南中創建的admin-user將在儀表盤中擁有管理權限
$?sudo?k3s?kubectl?create?\-f?dashboard.admin-user.yml?\-f?dashboard.admin-user-role.yml#?dashboard.admin-user.yml
apiVersion:?v1
kind:?ServiceAccount
metadata:name:?admin-usernamespace:?kubernetes-dashboard#?dashboard.admin-user-role.yml
apiVersion:?rbac.authorization.k8s.io/v1
kind:?ClusterRoleBinding
metadata:name:?admin-user
roleRef:apiGroup:?rbac.authorization.k8s.iokind:?ClusterRolename:?cluster-admin
subjects:-?kind:?ServiceAccountname:?admin-usernamespace:?kubernetes-dashboard
#?獲得Bearer-Token
$?sudo?k3s?kubectl?-n?kubernetes-dashboard?\describe?secret?admin-user-token?|?grep?'^token'#?本地訪問儀表盤
#?https://192.168.100.100:8443
#?https://www.escapelife.site/posts/180e93f1.html
#?https://www.escapelife.site/posts/538ec6b1.html
$?sudo?k3s?kubectl?proxy
$?sudo?kubectl?-n?kubernetes-dashboard?port-forward?\--address?0.0.0.0?svc/kubernets-dashboard?8443:443
#?升級儀表盤
$?sudo?k3s?kubectl?delete?ns?kubernetes-dashboard
$?GITHUB_URL=https://github.com/kubernetes/dashboard/releases
$?VERSION_KUBE_DASHBOARD=$(curl?-w?'%{url_effective}'?-I?-L?-s?-S?${GITHUB_URL}/latest?-o?/dev/null?|?sed?-e?'s|.*/||')
$?sudo?k3s?kubectl?apply?-f?https://raw.githubusercontent.com/kubernetes/dashboard/${VERSION_KUBE_DASHBOARD}/aio/deploy/recommended.yaml?-f?dashboard.admin-user.yml?-f?dashboard.admin-user-role.yml#?##?刪除儀表盤和admin-user配置
$?sudo?k3s?kubectl?delete?ns?kubernetes-dashboard
$?sudo?k3s?kubectl?delete?clusterrolebinding?kubernetes-dashboard
$?sudo?k3s?kubectl?delete?clusterrole?kubernetes-dashboard
  • [2] kube-explorer

    • kube-explorerK8S 的便攜式資源管理器,沒有任何依賴

    • 并提供了一個幾乎完全無狀態的 K8S 資源管理器

#?從發布頁面下載二進制文件
#?https://github.com/cnrancher/kube-explorer#?運行
#?--kubeconfig?可以不配置(自己可以找到)
$?./kube-explorer?--kubeconfig=/etc/rancher/k3s/kube.yaml?\--http-listen-port=9898?\--https-listen-port=0#?打開瀏覽器訪問
http://192.168.100.100:9898
  • [3] Rancher UI

    • 可以將 K3s 導入到 Rancher UI 中去管理

    • 官網 導入 K3s 集群 指導文檔

#?導入K3s集群時,Rancher會將其識別為K3s類型,并且附件額外功能
#?1.能夠升級K3s版本
#?2.可配置升級集群時升級的最大節點數
#?3.在主機詳情頁能夠查看啟動K3s集群時每個節點的配置參數和環境變量#?配置K3s集群以允許導入到Rancher
$?curl?-sfL?https://rancher-mirror.rancher.cn/k3s/k3s-install.sh?|?\INSTALL_K3S_MIRROR=cn?sh?-s?-?\--write-kubeconfig-mode?644
  • [4] 卸載 K3s 服務

#?主節點
$?/usr/local/bin/k3s-uninstall.sh#?工作節點
$?/usr/local/bin/k3s-agent-uninstall.sh
#?包括docker等信息一并清理#!/bin/bashKUBE_SVC='
kubelet
kube-scheduler
kube-proxy
kube-controller-manager
kube-apiserver
'for?kube_svc?in?${KUBE_SVC};
do#?停止服務if?[[?`systemctl?is-active?${kube_svc}`?==?'active'?]];?thensystemctl?stop?${kube_svc}fi#?禁止服務開機啟動if?[[?`systemctl?is-enabled?${kube_svc}`?==?'enabled'?]];?thensystemctl?disable?${kube_svc}fi
done#?停止所有容器
docker?stop?$(docker?ps?-aq)#?刪除所有容器
docker?rm?-f?$(docker?ps?-qa)#?刪除所有容器卷
docker?volume?rm?$(docker?volume?ls?-q)#?卸載mount目錄
for?mount?in?$(mount?|?grep?tmpfs?|?grep?'/var/lib/kubelet'?|?awk?'{?print?$3?}')?/var/lib/kubelet?/var/lib/rancher;
doumount?$mount;
done#?備份目錄
mv?/etc/kubernetes?/etc/kubernetes-bak-$(date?+"%Y%m%d%H%M")
mv?/var/lib/etcd?/var/lib/etcd-bak-$(date?+"%Y%m%d%H%M")
mv?/var/lib/rancher?/var/lib/rancher-bak-$(date?+"%Y%m%d%H%M")
mv?/opt/rke?/opt/rke-bak-$(date?+"%Y%m%d%H%M")#?刪除殘留路徑
rm?-rf?/etc/ceph?\/etc/cni?\/opt/cni?\/run/secrets/kubernetes.io?\/run/calico?\/run/flannel?\/var/lib/calico?\/var/lib/cni?\/var/lib/kubelet?\/var/log/containers?\/var/log/kube-audit?\/var/log/pods?\/var/run/calico?\/usr/libexec/kubernetes#?清理網絡接口
no_del_net_inter='
lo
docker0
eth
ens
bond
'network_interface=`ls?/sys/class/net`for?net_inter?in?$network_interface;
doif?!?echo?"${no_del_net_inter}"?|?grep?-qE?${net_inter:0:3};?thenip?link?delete?$net_interfi
done#?清理殘留進程
port_list='
80
443
6443
2376
2379
2380
8472
9099
10250
10254
'for?port?in?$port_list;
dopid=`netstat?-atlnup?|?grep?$port?|?awk?'{print?$7}'?|?awk?-F?'/'?'{print?$1}'?|?grep?-v?-?|?sort?-rnk2?|?uniq`if?[[?-n?$pid?]];?thenkill?-9?$pidfi
donekube_pid=`ps?-ef?|?grep?-v?grep?|?grep?kube?|?awk?'{print?$2}'`if?[[?-n?$kube_pid?]];?thenkill?-9?$kube_pid
fi#?清理Iptables表
##?注意:如果節點Iptables有特殊配置,以下命令請謹慎操作
sudo?iptables?--flush
sudo?iptables?--flush?--table?nat
sudo?iptables?--flush?--table?filter
sudo?iptables?--table?nat?--delete-chain
sudo?iptables?--table?filter?--delete-chain
systemctl?restart?docker

3.9 注意事項

理解 Server 節點的安裝,以及注冊 Agent 節點的步驟!

  • Helm

    • 如果需要使用 helm 操作 K3s 集群,需要創建 ~/.kube/conf 目錄

    • 需要執行 cp /etc/rancher/k3s/k3s.yaml ~/.kube/config 命令

  • 自動部署的清單

    • 將由 rancher/helm-controller 在運行時安裝

    • 目錄路徑:/var/lib/rancher/k3s/server/manifests

    • 目錄下面的每個 yaml 就代表這個一個需要啟動的服務

對于我們希望使用的組件,可以在啟動的時候禁用默認組件,在手動部署你需要的一些組件(通常是放到一個指定目錄下面,隨著服務啟動自動拉起),從而達到靈活使用的目的。

#?查看所有Pod服務
#?比如helm/coredns也不是自帶的就是通過這個方式創建的
$?sudo?kubectl?get?pods?-A
  • 注冊 Agent 節點

    • 工作節點密碼存儲:/etc/rancher/node/password

    • 主節點的密碼存儲:/var/lib/rancher/k3s/server/cred/node-passwd

agent 節點運行注冊命令,會和 server 節點發起 websocket 連接,然后會在工作節點上面創建一個隨機的密碼。然后會拿著這個密碼和工作節點的主機名,發送給主節點。然后主節點會將這個信息在保存(k8s secrets)起來,隨后的任何嘗試都必須使用相同的密碼。

#?工作節點的密碼信息(password+hostname)
$?sudo?cat?/etc/rancher/node/password#?查看主節點的密碼信息
#?https://docs.rancher.cn/docs/k3s/architecture/_index#注冊-agent-節點
$?sudo?kubectl?get?secret?k3s2.node-password.k3s?-o?yaml?-n?kube-system#?可以查看日志信息驗證這個信息的存在
$?sudo?tail?-f?200?/var/log/syslog?|?grep?k3s
#?發現節點信息提示NotReady狀態
#?可以嘗試刪除節點的密碼存儲信息,之后會自動獲取新的
$?sudo?kubectl?delete?secret?k3s2.node-password.k3s?-n?kube-system
  • 自定義存儲類型

集群啟動之后,默認會啟動一個 local-path 的組件,用于提供服務掛載存儲使用,其默認以 PVC 的形式。之后,將其存儲在 /var/lib/rancher/k3s/server/storageclass 目錄下面。

#?查看組件
$?sudo?kubectl?get?pods?-A#?查看對應存儲
$?sudo?kubectl?get?storageclass#?可以使用參數修改默認存儲地址
#?--default-local-storage-path&nbsp;value
$?curl?-sfL?http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh?|?\INSTALL_K3S_MIRROR=cn?\INSTALL_K3S_EXEC='--etcd-snapshot-schedule-cron?*&nbsp;*/5&nbsp;*&nbsp;*&nbsp;*'?\sh?-

4. K3S 集群升級

手動升級 + 自動升級

當升級 K3s 時,K3s 服務會重啟或停止,但 K3s 容器會繼續運行。要停止所有的 K3s 容器并重置容器的狀態,可以使用 ?k3s-killall.sh 腳本。killall 腳本清理容器、K3s 目錄和網絡組件,同時也刪除了 iptables 鏈和所有相關規則。集群數據不會被刪除。

  • [1] 手動升級 - 使用安裝腳本升級 K3s

你可以通過使用安裝腳本升級 K3s,或者手動安裝所需版本的二進制文件。

#?升級到最新stable版本
$?curl?-sfL?https://get.k3s.io?|?sh?-#?升級到latest版本
$?curl?-sfL?https://get.k3s.io?|?INSTALL_K3S_CHANNEL=latest?sh?-#?升級到v1.20的最新版本
$?curl?-sfL?https://get.k3s.io?|?INSTALL_K3S_CHANNEL="v1.20"?sh?-#?升級到指定版本
$?curl?-sfL?https://get.k3s.io?|?INSTALL_K3S_VERSION=vX.Y.Z-rc1?sh?-
  • [2] 手動升級 - 使用二進制文件手動升級 K3s

你可以通過使用安裝腳本升級 K3s,或者手動安裝所需版本的二進制文件。

#?從發布下載所需版本的K3s二進制文件
https://github.com/rancher/k3s/releases#?將下載的二進制文件復制到/usr/local/bin/k3s
$?mv?./k3s?/usr/local/bin/k3s#?停止舊的K3s二進制文件
$?curl?-sfL?https://get.k3s.io?|?INSTALL_K3S_CHANNEL="v1.20"?sh?-#?啟動新的K3s二進制文件
$?curl?-sfL?https://get.k3s.io?|?INSTALL_K3S_VERSION=vX.Y.Z-rc1?sh?-

你可以使用 Ranchersystem-upgrad-controller 來管理 K3s 集群升級。這是一種 Kubernetes 原生的集群升級方法。它利用自定義資源定義(CRD)、計劃和控制器,根據配置的計劃安排升級。

控制器通過監控計劃和選擇要在其上運行升級 job 的節點來調度升級,計劃通過標簽選擇器定義哪些節點應該升級。當一個 job 成功運行完成后,控制器會給它運行的節點打上相應的標簽。

  • [3] 自動升級 - 使用二進制文件手動升級 K3s

    • k3s-upgrade

    • system-upgrade-controller

#?將system-upgrade-controller安裝到您的集群中
$?kubectl?apply?-f?https://github.com/rancher/system-upgrade-controller/releases/download/v0.6.2/system-upgrade-controller.yaml
#?配置計劃
#?建議您最少創建兩個計劃
#?升級server節點的計劃和升級agent節點的計劃#?Server?plan
apiVersion:?upgrade.cattle.io/v1
kind:?Plan
metadata:name:?server-plannamespace:?system-upgrade
spec:concurrency:?1cordon:?truenodeSelector:matchExpressions:-?key:?node-role.kubernetes.io/master?#?選擇主節點operator:?Invalues:-?"true"serviceAccountName:?system-upgradeupgrade:image:?rancher/k3s-upgradeversion:?v1.20.4+k3s1#?Agent?plan
apiVersion:?upgrade.cattle.io/v1
kind:?Plan
metadata:name:?agent-plannamespace:?system-upgrade
spec:concurrency:?1cordon:?truenodeSelector:matchExpressions:-?key:?node-role.kubernetes.io/master?#?選擇工作節點operator:?DoesNotExistprepare:args:-?prepare-?server-planimage:?rancher/k3s-upgradeserviceAccountName:?system-upgradeupgrade:image:?rancher/k3s-upgradeversion:?v1.20.4+k3s1
#?自動升級到最新版本(不指定版本)
apiVersion:?upgrade.cattle.io/v1
kind:?Plan
...
spec:...upgrade:image:?rancher/k3s-upgradechannel:?https://update.k3s.io/v1-release/channels/stable

K3S集群升級

5. K3S 備份恢復

SQLite + etcd + 外部數據存儲

  • [1] 使用嵌入式 SQLite 數據存儲進行備份和恢復

#?方式1:備份/恢復數據目錄#?備份
$?cp?-rf?/var/lib/rancher/k3s/server/db?/opt/db#?恢復
$?systemctl?stop?k3s
$?rm?-rf?/var/lib/rancher/k3s/server/db
$?cp?-rf?/opt/db?/var/lib/rancher/k3s/server/db
$?systemctl?start?k3s
#?方式2:通過 SQLite cli#?備份
sqlite3?/var/lib/rancher/k3s/server/db/state.db
SQLite?version?3.22.0?2018-01-22?18:45:57
Enter?".help"?for?usage?hints.
sqlite>?.backup?"/opt/kine.db"
sqlite>?.exit#?恢復
$?sudo?systemctl?stop?k3ssqlite3?/var/lib/rancher/k3s/server/db/state.db
SQLite?version?3.22.0?2018-01-22?18:45:57
Enter?".help"?for?usage?hints.
sqlite>?.restore?'/opt/kine.db'
sqlite>?.exit$?sudo?systemctl?start?k3s

當使用外部數據存儲時,備份和恢復操作是在 K3s 之外處理的。數據庫管理員需要對外部數據庫進行備份,或者從快照或轉儲中進行恢復。我們建議將數據庫配置為執行定期快照。

  • [2] 使用外部數據存儲進行備份和恢復

#?備份
$?mysqldump?-uroot?-p?--all-databases?--master-data?>?k3s-dbdump.db#?恢復
$?systemctl?stop?k3s
$?mysql?-uroot?-p??<?k3s-dbdump.db
$?systemctl?start?k3s
  • [3] 使用嵌入式 etcd 數據存儲進行備份和恢復

#?創建快照(K3s默認啟用快照)
#?快照目錄默認:?/var/lib/rancher/k3s/server/db/snapshots#?要配置快照間隔或保留的快照數量
--etcd-disable-snapshots???????禁用自動etcd快照
--etcd-snapshot-schedule-cron ?定時快照的時間點;認值為每12小時觸發一次
--etcd-snapshot-retention ?????保留的快照數量;默認值為5
--etcd-snapshot-dir????????????保存數據庫快照的目錄路徑
--cluster-reset ???????????????忘記所有的對等體;成為新集群的唯一成員
--cluster-reset-restore-path???要恢復的快照文件的路徑

K3s 從備份中恢復時,舊的數據目錄將被移動到/var/lib/rancher/k3s/server/db/etcd-old/。然后 K3s 會嘗試通過創建一個新的數據目錄來恢復快照,然后從一個帶有一個 etcd 成員的新 K3s 集群啟動 etcd。

#?從快照恢復集群
#?使用--cluster-reset選項運行K3s
#?同時給出--cluster-reset-restore-path
$?./k3s?server?\--cluster-reset?\--cluster-reset-restore-path=<PATH-TO-SNAPSHOT>

6. K3S 卷和存儲

介紹了如何通過 local storage provider 或 Longhorn 來設置持久存儲。

當部署一個需要保留數據的應用程序時,你需要創建持久存儲。持久存儲允許您從運行應用程序的 pod 外部存儲應用程序數據。即使應用程序的 pod 發生故障,這種存儲方式也可以使您維護應用程序數據。

  • [1] 設置 Local Storage Provider 支持

K3s 自帶 RancherLocal Path Provisioner(LPP),這使得能夠使用各自節點上的本地存儲來開箱即用地創建 pvc。根據用戶配置,LPP 將自動在節點上創建基于 hostPath 的持久卷。它利用了 K8sLocal Persistent Volume 特性引入的特性,但它比 K8s 中內置的 ?local pv 特性更簡單的解決方案。

#?pvc.yaml
apiVersion:?v1
kind:?PersistentVolumeClaim
metadata:name:?local-path-pvcnamespace:?default
spec:accessModes:-?ReadWriteOncestorageClassName:?local-pathresources:requests:storage:?2Gi#?pod.yaml
apiVersion:?v1
kind:?Pod
metadata:name:?volume-testnamespace:?default
spec:containers:-?name:?volume-testimage:?nginx:stable-alpineimagePullPolicy:?IfNotPresentvolumeMounts:-?name:?volvmountPath:?/dataports:-?containerPort:?80volumes:-?name:?volvpersistentVolumeClaim:claimName:?local-path-pvc
#?應用yaml服務
$?kubectl?create?-f?pvc.yaml?pod.yaml#?確認PV和PVC已創建
$?kubectl?get?pv
$?kubectl?get?pvc
  • [2] 設置 Longhorn 支持

K3s 支持 Longhorn(是 K8s 的一個開源分布式塊存儲系統)。

#?安裝Longhorn
#?將被安裝在命名空間longhorn-system中
$?kubectl?apply?-f?https://raw.githubusercontent.com/longhorn/longhorn/master/deploy/longhorn.yaml#?pvc.yaml
apiVersion:?v1
kind:?PersistentVolumeClaim
metadata:name:?longhorn-volv-pvc
spec:accessModes:-?ReadWriteOncestorageClassName:?longhornresources:requests:storage:?2Gi#?pod.yaml
apiVersion:?v1
kind:?Pod
metadata:name:?volume-testnamespace:?default
spec:containers:-?name:?volume-testimage:?nginx:stable-alpineimagePullPolicy:?IfNotPresentvolumeMounts:-?name:?volvmountPath:?/dataports:-?containerPort:?80volumes:-?name:?volvpersistentVolumeClaim:claimName:?longhorn-volv-pvc
#?應用yaml服務
$?kubectl?create?-f?pvc.yaml?pod.yaml#?確認PV和PVC已創建
$?kubectl?get?pv
$?kubectl?get?pvc

7. K3S 網絡相關

簡單介紹下 K3s 相關的網絡配置組件!

  • CoreDNS

CoreDNS 是在 agent 節點啟動時部署的。要禁用,請在每臺服務器上運行 --disable coredns 選項。如果你不安裝 CoreDNS,你將需要自己安裝一個集群 DNS 提供商。

#?如何修改coredns參數
#?/var/lib/rancher/k3s/server/manifests/coredns.yaml
#?該文件重啟K3s服務的話會導致coredns配置重新初始化
1.將coredns.yaml保存到其他目錄
2.通過?--disable?coredns?禁用coredns
3.復制coredns.yaml到/var/lib/rancher/k3s/server/manifests/目錄并修改參數
  • Traefik Ingress Controller

啟動 server 時,默認情況下會部署 Traefik,對該文件的任何修改都會以類似 kubectl apply 的方式自動部署到 Kubernetes 中,將使用主機上的 80443 端口。

#?操作和上面基本是一致的
#?請使用?--disable?traefik?選項啟動每個server
#?/var/lib/rancher/k3s/server/manifests/traefik.yaml
#?如何啟用?treafik2?dashboard
#?http://traefik.example.com/dashboard#?Note:?in?a?kubernetes?secret?the?string?(e.g.?generated?by?htpasswd)?must?be?base64-encoded?first.
#?To?create?an?encoded?user:password?pair,?the?following?command?can?be?used:
#?htpasswd?-nb?admin?admin?|?openssl?base64apiVersion:?v1
kind:?Secret
metadata:name:?authsecretnamespace:?default
data:users:?|2YWRtaW46JGFwcjEkLkUweHd1Z0EkUjBmLi85WndJNXZWRFMyR2F2LmtELwoK---
apiVersion:?traefik.containo.us/v1alpha1
kind:?IngressRoute
metadata:name:?traefik-dashboard
spec:routes:-?match:?Host(`traefik.example.com`)?&&?(PathPrefix(`/api`)?||?PathPrefix(`/dashboard`))kind:?Ruleservices:-?name:?api@internalkind:?TraefikServicemiddlewares:-?name:?auth---
apiVersion:?traefik.containo.us/v1alpha1
kind:?Middleware
metadata:name:?auth
spec:basicAuth:secret:?authsecret?#?Kubernetes?secret?named?"secretName"
  • Service Load Balancer

K3s 提供了一個名為 Klipper Load Balancer 的負載均衡器,它可以使用可用的主機端口。允許創建 LoadBalancer 類型的 Service,但不包括 LB 的實現。某些 LB 服務需要云提供商,例如 Amazon EC2。相比之下,K3s service LB 使得可以在沒有云提供商的情況下使用 LB 服務。

8. K3S 與 Helm

HelmKubernetes 的包管理工具。Helm ChartKubernetes YAML 清單文件提供了模板化語法,可以通過 Helm 安裝對應的 chart。K3s 不需要任何特殊的配置就可以使用 Helm 命令行工具。

  • 自動部署 Helm charts

/var/lib/rancher/k3s/server/manifests 中找到的任何 Kubernetes 清單將以類似 kubectl apply 的方式自動部署到 K3s。以這種方式部署的 manifests 是作為 AddOn 自定義資源來管理的。你會發現打包組件的 AddOns,如 CoreDNS、Local-Storage 等。AddOns 是由部署控制器自動創建的,并根據它們在 manifests 目錄下的文件名命名。

#?查看運行AddOn資源
$?kubectl?get?addon?-A#?也可以將Helm-Chart作為AddOns部署
https://github.com/rancher/helm-controller/
  • 使用 Helm CRD

HelmChart CRD 捕獲了大多數你通常會傳遞給 helm 命令行工具的選項。下面是一個例子,說明如何從默認的 Chart 資源庫中部署 Grafana,覆蓋一些默認的 Chart 值。請注意,HelmChart 資源本身在 kube-system 命名空間,但 Chart 資源將被部署到 monitoring 命名空間。

apiVersion:?helm.cattle.io/v1
kind:?HelmChart
metadata:name:?grafananamespace:?kube-system
spec:chart:?stable/grafanatargetNamespace:?monitoringset:adminPassword:?"NotVerySafePassword"valuesContent:?|-image:tag:?masterenv:GF_EXPLORE_ENABLED:?trueadminUser:?adminsidecar:datasources:enabled:?true

9. K3S 高級選項

包含高級選項和配置

  • 證書輪換

默認情況下,K3s 的證書在 12 個月內過期。如果證書已經過期或剩余的時間不足 90 天,則在 K3s 重啟時輪換證書。

#?查詢K3s證書過期時間
$?for?i?in?`ls?/var/lib/rancher/k3s/server/tls/*.crt`;?\do?\echo?$i;\openssl?x509?-enddate?-noout?-in?$i;?\done#?修改系統時間為證書過期前90天或證書過期后
$?timedatectl?set-ntp?no
$?date?-s?20220807#?重啟K3s服務
$?service?k3s?restart
  • Red Hat 和 CentOS 的額外準備

建議運行以下命令,關閉 firewalld 防火墻。

$?sudo?systemctl?disable?firewalld?--now

10. 參考鏈接

送人玫瑰,手有余香!

  • [1] 文檔教程

    • K3s 中文文檔 - 國外

    • K3s 中文文檔 - 國內

    • K3s 國內鏡像站 - 加速

    • K3s 系列教程 - 官方制作

  • [2] 代碼地址

    • K3s 倉庫地址 - Github

  • [3] 周邊項目

    • K3s 周邊項目 - k3os

? ? ?完全基于?K8S?管理的輕量級操作系統

  • K3s 周邊項目 - autok3s

? ? 用于簡化?K3s?集群部署和管理的輕量級工具

? ? 即在阿里云和?aws?等云服務器上面部署?k3s

  • K3s 周邊項目 - k3d

    可以在?k3d?創建容器化的?k3s?集群

    可以使用容器在單臺計算機上啟動多節點?k3s?集群

  • K3s 周邊項目 - harvester

    基于?K8S?構建的開源超融合基礎架構(HCI)軟件

    旨在替換?vSphere?和?Nutanix?的開源替代方案

  • K3s 周邊項目 - octopus

    主要用于邊緣計算相關

    用于?K8S?和?k3s?的輕量級云原生設備管理系統

    集群可以將邊緣設備作為自定義?k8s?資源進行管理

本文轉載自:「 Escape 的博客 」,原文:https://url.hi-linux.com/ytP71 ,版權歸原作者所有。歡迎投稿,投稿郵箱: editor@hi-linux.com。

最近,我們建立了一個技術交流微信群。目前群里已加入了不少行業內的大神,有興趣的同學可以加入和我們一起交流技術,在 「奇妙的 Linux 世界」 公眾號直接回復 「加群」 邀請你入群。

你可能還喜歡

點擊下方圖片即可閱讀

超贊,又一 Markdown 神器!可直接畫思維導圖,還支持 VSCode 和 Vim


點擊上方圖片,『美團|餓了么』外賣紅包天天免費領

更多有趣的互聯網新鮮事,關注「奇妙的互聯網」視頻號全了解!

總結

以上是生活随笔為你收集整理的轻量级 Kubernetes 集群发行版 K3s 完全进阶指南的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

91午夜精品| 日本精品久久久一区二区三区 | 欧美日韩久久 | 手机在线观看国产精品 | 免费日韩 | 国产精品第三页 | 亚洲一区久久 | 96久久精品| 欧美日韩精品区 | 涩五月婷婷| 中文字幕一区二区三区乱码不卡 | 欧美影片 | 91色在线观看 | 激情婷婷色 | 精品一二三区视频 | 天天爽夜夜爽人人爽一区二区 | 99视频精品视频高清免费 | 蜜桃av人人夜夜澡人人爽 | 亚洲精品自拍 | 久久久久久久久久久网站 | 久久成人国产精品免费软件 | 亚洲伦理电影在线 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 欧美日韩免费视频 | 狠狠干狠狠久久 | 中文字幕免费看 | 免费成人黄色片 | 99久久精品免费一区 | 精品亚洲免费 | 久久久久久久久影院 | av永久网址 | 黄色特级毛片 | 91成人精品观看 | 久久精品国产成人 | 久久婷综合 | 97成人在线观看视频 | 99精品免费在线 | 日韩在线观看视频一区二区三区 | 成人免费网站在线观看 | 日韩av成人在线观看 | 狠狠88综合久久久久综合网 | 国产精品久久久久久久久久免费看 | 国产一区二区在线观看视频 | 国产不卡在线观看视频 | 欧美日韩精品在线一区二区 | 精品久久久久久久久久 | 91视频亚洲 | 91av在线视频播放 | 日日夜夜天天干 | 丁香色综合 | a成人在线| 日韩精品短视频 | 激情网色 | 国产视频精选 | 激情综合色图 | 公与妇乱理三级xxx 在线观看视频在线观看 | 丁香午夜 | 久久热首页 | 国产福利在线免费观看 | 精品久久久久久国产91 | a久久免费视频 | 久久久久久福利 | 97超级碰碰碰碰久久久久 | 国产欧美综合视频 | 国产区第一页 | 日韩视频中文字幕在线观看 | 人人揉人人揉人人揉人人揉97 | 免费激情网| 中国一区二区视频 | 日韩中文在线播放 | 日韩成人xxxx | 国产精品美女久久久久久久网站 | 九九av| 欧美黄色免费 | 超碰资源在线 | 五月婷婷操 | 国产一二三区在线观看 | 国产精品久久久久国产精品日日 | www.成人久久| 操夜夜操| 国产精品999久久久 久产久精国产品 | 97超级碰碰碰视频在线观看 | 亚洲第一区在线观看 | 日韩欧美一区二区不卡 | 青春草免费在线视频 | 97伊人网 | 91色国产在线 | 日韩免费三区 | 色在线视频网 | 成人黄色中文字幕 | 日韩天堂在线观看 | 91亚瑟视频| 午夜av大片 | 又黄又爽又湿又无遮挡的在线视频 | 人人干人人做 | 青青草国产成人99久久 | 激情久久婷婷 | 中文字幕一区二区三区在线观看 | 中文字幕欧美日韩va免费视频 | 久久久免费看片 | 国产精品专区一 | 色先锋资源网 | 欧美日韩aaaa | 日韩三级免费观看 | 高清中文字幕 | 亚洲国产欧美一区二区三区丁香婷 | 成人午夜影院 | 日韩电影一区二区在线观看 | 精品亚洲成a人在线观看 | 久久爱资源网 | 国产成人精品亚洲日本在线观看 | www.久久色| 久久久噜噜噜久久久 | 国产999精品久久久久久麻豆 | 国产成人777777 | 国产精品黄色影片导航在线观看 | 99精品免费久久久久久日本 | 天天干,天天射,天天操,天天摸 | 久久国产精品99久久人人澡 | 亚洲欧美视频在线播放 | 国产午夜三级一区二区三 | 超薄丝袜一二三区 | 欧美一区二区三区在线播放 | 国产一区欧美在线 | 免费在线色| 在线不卡a | 国产精品自产拍在线观看中文 | 日韩精品无 | 在线观看免费福利 | 欧美日韩高清 | 很污的网站 | 天天综合色网 | 免费在线观看一区二区三区 | 日韩精品欧美专区 | 波多野结衣电影一区二区三区 | 一区二区不卡视频在线观看 | 在线免费观看国产 | 波多野结衣在线播放视频 | 精品久久一 | 午夜久久久久久久久久久 | 激情婷婷在线 | 91女人18片女毛片60分钟 | 国产小视频在线 | 亚洲欧洲精品一区二区精品久久久 | 天天干天天做天天操 | 国产91丝袜在线播放动漫 | 国产精品18久久久久久久久 | 999毛片| 久久久久一区二区三区四区 | 99c视频高清免费观看 | 久草网视频在线观看 | 日韩在线观看小视频 | 久久精品视频网站 | 91日韩在线 | 制服丝袜成人在线 | 一区二区视频网站 | 国产一级视频在线 | 国产午夜三级 | 久草在线观看视频免费 | 高清av网站 | 又黄又爽又色无遮挡免费 | 国产小视频在线看 | 九九视频在线播放 | 成人在线视频一区 | 久久不卡免费视频 | 亚洲激情五月 | www在线观看视频 | av日韩精品 | 伊人色综合久久天天网 | 国产一区精品在线 | 欧美日韩国产二区 | 99久久综合精品五月天 | 国产高清视频在线 | 精品久久久久久国产91 | 亚洲成av人片在线观看香蕉 | av网站地址 | 黄色亚洲免费 | 黄色大片av | 久久9999久久| 免费在线观看污网站 | 中文字幕久久精品 | 97超碰成人 | 91欧美视频网站 | 国产一区成人在线 | 在线观看黄网 | 国产精品成人久久久久久久 | 性色视频在线 | 日本黄色免费电影网站 | 国产一区二区在线看 | av网站手机在线观看 | 99久久婷婷国产综合精品 | 91新人在线观看 | 欧美一级特黄aaaaaa大片在线观看 | 国产精品一区二区你懂的 | 国产精品久久久久久久久久妇女 | 久久久免费 | 久久国产精品免费一区二区三区 | 在线免费观看一区二区三区 | av在线之家电影网站 | 色狠狠综合| 国产一区二区综合 | 香蕉视频在线免费 | 永久av免费在线观看 | 国产毛片久久 | 国产九九九视频 | 国内精品视频在线 | 久久精品视频3 | 夜夜夜影院 | 欧美va在线观看 | 午夜av免费在线观看 | 91精品福利在线 | 婷婷激情网站 | 欧美一性一交一乱 | 日韩天天操| 狠狠躁夜夜躁人人爽视频 | 国产亚洲精品无 | 久久深爱网 | 超碰在线免费97 | 香蕉久久久久久av成人 | 亚洲国产美女精品久久久久∴ | 国产精品一区二 | 少妇精品久久久一区二区免费 | 99精品视频精品精品视频 | 97成人精品视频在线播放 | 欧美日韩精品在线观看视频 | 日韩欧美一区二区不卡 | 亚洲久久视频 | av福利电影 | 91av亚洲 | 色网免费观看 | 色婷婷激情四射 | 国产丝袜 | 日韩免费一级a毛片在线播放一级 | 国产在线97 | av线上免费看 | 久久一精品| 美女精品久久久 | 一区二区三区在线播放 | 伊人超碰在线 | 国产精品va在线播放 | 丁香影院在线 | 国产不卡精品 | 草久久影院 | 色网站视频 | www.国产精品| 最近更新好看的中文字幕 | 人人干人人添 | 人人艹人人 | 免费高清av在线看 | 天天爽夜夜爽精品视频婷婷 | 日韩理论在线视频 | 国产一二三区在线观看 | 亚洲精品乱码久久久一二三 | 97福利视频| 中文字幕久久网 | 精品一区二区三区在线播放 | 久久草| 看国产黄色大片 | 九九热在线精品视频 | 亚洲久草在线 | 久久午夜电影网 | 亚洲乱码精品久久久 | 麻豆传媒视频在线播放 | 欧美地下肉体性派对 | av成年人电影 | 国产淫片免费看 | 在线成人国产 | h视频在线看 | 99在线观看免费视频精品观看 | 97在线观看视频国产 | 精品久久美女 | 最近最新中文字幕视频 | 九色91视频 | 夜夜操天天摸 | 国产123av| 天天爽人人爽夜夜爽 | 园产精品久久久久久久7电影 | 99热这里只有精品久久 | 亚洲在线a | 麻豆视频www| 国产精品黄色影片导航在线观看 | 久久综合久久88 | 日韩成人黄色av | 一级片观看 | 三级黄色片子 | 国产一区二区在线视频观看 | 久久艹国产视频 | 欧美日韩亚洲在线观看 | 毛片久久久 | 国产v在线 | 丝袜少妇在线 | 亚洲a网 | 香蕉色综合 | 久久精品视频网站 | 国产在线观看免费 | 国产破处精品 | 五月婷久久 | 国产精品二区在线观看 | 欧美另类一二三四区 | av电影久久 | 在线观看黄色免费视频 | 中文字幕在线免费观看视频 | 欧美亚洲成人免费 | 国产精品完整版 | 欧美不卡视频在线 | 日本精品在线 | 99r在线精品 | 超碰av在线免费观看 | 久久夜色电影 | 亚洲精品视频国产 | 96av麻豆蜜桃一区二区 | 日韩精品免费一区二区在线观看 | 热九九精品 | 黄色aaa级片 | 免费视频一级片 | 国产福利一区二区三区在线观看 | 免费观看一级成人毛片 | 久久午夜免费观看 | 亚洲国产97在线精品一区 | 天天综合区 | 久久99精品视频 | av综合网址| 一区二区三区四区免费视频 | 91探花在线| 人人精品| 九热在线 | 日韩毛片久久久 | 欧美a性| 91成人看片| 欧美性粗大hdvideo | 91黄色小视频 | 在线免费av电影 | 中文字幕中文中文字幕 | 天天干,天天操 | 国产精品九九九九九 | 成人国产精品免费观看 | av+在线播放在线播放 | 国产精品网红直播 | 在线观看黄a | 天堂网一区 | 亚洲欧洲中文日韩久久av乱码 | 国产精品福利久久久 | 国产我不卡 | 久久免费黄色大片 | 欧美精彩视频在线观看 | 久久中文字幕在线视频 | 国产精品久久久久免费a∨ 欧美一级性生活片 | 久久成人国产精品 | 日韩av不卡在线 | 日韩欧美有码在线 | 成人福利在线播放 | 国产黄在线 | 中文字幕视频一区二区 | 国产裸体视频网站 | 97综合视频 | 手机av在线网站 | 国产一区二区三精品久久久无广告 | 国产视频999 | 九色91在线 | 日韩欧美视频在线观看免费 | 日韩欧美在线中文字幕 | 免费亚洲黄色 | 91漂亮少妇露脸在线播放 | 日韩视频免费在线观看 | 一区二区三区四区在线 | 性色av一区二区三区在线观看 | 韩国av免费观看 | 久久精品99国产精品亚洲最刺激 | 精品国产精品久久一区免费式 | 在线观看亚洲国产 | 欧美最猛性xxxxx(亚洲精品) | 免费看污的网站 | www.夜夜爽| 久久99精品视频 | 国产亚洲欧美日韩高清 | 天天干天天色2020 | 欧美一区日韩精品 | 粉嫩av一区二区三区四区在线观看 | 在线视频日韩一区 | 日韩视频精品在线 | 国产精品久久久免费 | 在线观看一区 | 黄色毛片视频免费 | 麻豆成人网 | 国产一级淫片免费看 | 中文av网 | 色综合天天爱 | 天天操天天弄 | 伊人小视频 | 亚洲一区二区高潮无套美女 | 国精产品999国精产品视频 | 国产高清视频在线播放一区 | 精品色综合 | 国产1级视频 | 操综合| 国产精品日韩在线观看 | 国产精品国产三级国产专区53 | 国产精品久久婷婷六月丁香 | 天天综合五月天 | 欧美日韩国产网站 | 西西www4444大胆在线 | 97人人爽人人| 久久久久久久久久免费视频 | 精品久久久久久亚洲综合网 | 久草在线视频中文 | 午夜视频在线观看网站 | 久久,天天综合 | 欧美最新大片在线看 | av免费看网站 | 超碰97免费在线 | 国产精品成人免费精品自在线观看 | 国产欧美精品xxxx另类 | 青青河边草免费直播 | 国产精品女 | 国产在线精品视频 | 午夜精品久久久久久久99无限制 | 色99导航| 亚洲aⅴ久久精品 | av在线免费网| 激情久久小说 | 九九免费精品视频 | 亚洲精品视频偷拍 | 亚洲精品五月天 | 91最新在线 | 在线国产小视频 | 久久观看| 成人在线免费看视频 | 中文字幕国语官网在线视频 | 久久精品亚洲精品国产欧美 | 园产精品久久久久久久7电影 | 午夜电影中文字幕 | 久久免费视频在线观看6 | 精品一二三区 | 在线观看第一页 | 国产一级在线观看视频 | 久久久久久草 | 日韩在线观看小视频 | 国产一级高清 | 欧美aaa一级 | 色综合天天干 | 国产精品福利在线 | 久久久久久久久久免费 | av不卡免费看 | 91精品国自产在线偷拍蜜桃 | 黄色免费网站下载 | 亚洲国产日韩一区 | 人人超碰人人 | www激情com| 欧美性免费 | 国产黄网站在线观看 | 9在线观看免费高清完整版在线观看明 | 日本久久片 | 久久国产影院 | 成人影视片 | 日韩电影在线观看一区二区三区 | 国产美女视频黄a视频免费 久久综合九色欧美综合狠狠 | 丁香六月在线观看 | 亚洲精品男人的天堂 | 色婷婷视频在线 | 在线观看色视频 | 精品美女在线观看 | 91色吧| 中文字幕欧美激情 | 欧美成年人在线视频 | 精品日韩中文字幕 | 欧美日韩精品国产 | 91丨九色丨国产丨porny精品 | 久久色视频 | 欧美 日韩 久久 | 久久99国产精品视频 | 最新久久免费视频 | 毛片99| 国内精品美女在线观看 | 视频福利在线 | 精品久久国产一区 | 日本在线观看一区二区三区 | 精品国产一区在线观看 | 亚洲欧美视频网站 | 98精品国产自产在线观看 | 亚洲精品视频在线观看免费视频 | 国产精品免费久久久 | 中文字幕第一页在线视频 | 久草国产精品 | 天天色天天射综合网 | 在线观看国产日韩欧美 | 日韩精品中文字幕在线观看 | 超碰精品在线观看 | 精品视频国产 | 深爱婷婷激情 | 日韩免费一区 | 91精品国产亚洲 | 成人免费视频视频在线观看 免费 | 久久成熟 | 99久久99久久免费精品蜜臀 | 中文在线最新版天堂 | 日韩中字在线观看 | 99久久er热在这里只有精品15 | 国产精品视频大全 | 91看片在线播放 | 激情偷乱人伦小说视频在线观看 | 久久激情电影 | 美女网站久久 | 日韩免费成人 | 夜夜澡人模人人添人人看 | 视频一区二区视频 | 高清免费在线视频 | 三级黄色a | 午夜国产福利在线 | av黄色av| 日韩理论电影网 | 日韩影视精品 | 麻豆传媒在线免费看 | 久久激情影院 | 91免费版成人| 超碰99在线| 精品96久久久久久中文字幕无 | 久草网在线观看 | 91探花系列在线播放 | 日韩在线观看一区二区 | 亚洲视屏| 激情网第四色 | 天天鲁一鲁摸一摸爽一爽 | 免费高清在线视频一区· | 亚色视频在线观看 | 男女激情麻豆 | 久久免费国产电影 | 97精品国产aⅴ | 国产精选在线 | 日韩大片免费在线观看 | 欧美日韩免费一区二区三区 | 女人高潮特级毛片 | 中文字幕一区二区在线观看 | 成人激情开心网 | 国产精品成 | 久久久久亚洲国产精品 | 亚洲国产精品久久久久久 | a天堂最新版中文在线地址 久久99久久精品国产 | 狠狠操狠狠干天天操 | 男女激情麻豆 | 国产精品精品久久久久久 | 成人免费视频播放 | 亚洲精品视频在线观看网站 | 欧美日一级片 | av片中文字幕 | 丁香五婷 | 最新99热 | 国产理论免费 | 亚洲国产视频在线 | 日韩网站在线免费观看 | 香蕉97视频观看在线观看 | 成人黄在线观看 | 97在线观 | 久久大片 | 国产日产高清dvd碟片 | 婷婷五天天在线视频 | 国产成人一区二区三区久久精品 | 欧美精品资源 | 毛片区 | 中文字幕丰满人伦在线 | v片在线看| 国内精品小视频 | 中文字幕在线观看完整版电影 | 国产精品成人自产拍在线观看 | 亚洲作爱 | 久久一区91| 成人久久18免费网站 | 国产原创中文在线 | 精品亚洲欧美无人区乱码 | 国产在线不卡 | 99久热| 天天爱天天操天天射 | 久久久资源 | 午夜12点 | 天天av在线播放 | 91网页版在线观看 | 久久精品福利视频 | 日本在线中文 | 欧美a级在线免费观看 | 五月婷视频 | 久久激情电影 | 欧美日本国产在线观看 | 黄色毛片视频 | 夜夜爽天天爽 | 九九久久婷婷 | 国产成人精品久久 | 又爽又黄又无遮挡网站动态图 | 天天干天天操天天干 | av福利在线 | 免费久草视频 | 激情开心色 | 午夜精品剧场 | 奇米网444| 日韩欧美在线高清 | 97色婷婷成人综合在线观看 | 欧美 另类 交 | 韩国三级在线一区 | 91亚色免费视频 | 久草精品在线播放 | 国产视频精选 | 黄色aaa毛片 | 亚洲在线综合 | 国产精品免费小视频 | av成人免费在线观看 | 国产精品va在线播放 | 精品综合久久久 | 国产精品视频地址 | 日本在线中文 | 黄p在线播放 | 一区二区三区在线免费播放 | 国产精品日韩精品 | 精品一区电影 | 91在线91| av在线播放快速免费阴 | 在线视频久久 | 超碰97公开 | 最新午夜| 欧美色精品天天在线观看视频 | 一本一本久久a久久精品综合 | 97视频亚洲 | 九九色视频 | 香蕉视频免费在线播放 | 国产一区二区三区在线免费观看 | 久久一久久| 四虎在线免费视频 | 丁香婷婷基地 | 久久久久久久久久电影 | 日韩天堂在线观看 | 中文字幕在线专区 | 免费在线观看av的网站 | 国模一二三区 | 久久久久黄 | 不卡av免费在线观看 | 看av在线| 久久国产电影 | 色噜噜在线观看视频 | 国产在线资源 | 狠狠色综合欧美激情 | 在线精品亚洲一区二区 | 国内精品中文字幕 | 中文字幕国产亚洲 | 国产小视频网站 | www免费看 | 黄色一级大片在线免费看国产一 | 国产一区二区在线视频观看 | 精品国产一区二区三区久久久蜜月 | 亚洲国产精品久久久 | 国产精品乱码在线 | 在线看毛片网站 | 日韩一区二区三区观看 | 丁香婷婷成人 | 欧美一区二区三区免费观看 | 啪啪激情网 | 日韩在线免费视频 | 国产福利一区二区三区在线观看 | 2023亚洲精品国偷拍自产在线 | 久久综合九九 | 亚洲免费av在线播放 | 五月天中文在线 | 视频一区二区国产 | 日韩一级片观看 | 91视频免费网址 | 激情开心网站 | 日韩伦理片hd | 成人黄大片视频在线观看 | 国产97视频 | 欧美性色xo影院 | av在线播放一区二区三区 | 免费在线播放视频 | 激情婷婷久久 | 中文字幕一二三区 | 久久久私人影院 | 国产高清av免费在线观看 | 亚洲每日更新 | 在线看毛片网站 | 最新av中文字幕 | 六月丁香六月婷婷 | 国产精品入口a级 | 久久不射电影院 | 欧美激情精品久久久久久变态 | 日韩美视频 | 欧美性生交大片免网 | 亚洲一区精品人人爽人人躁 | 久草在线资源网 | 国产精品高清免费在线观看 | 亚洲国产色一区 | 在线免费观看av网站 | 久久男女视频 | 精品嫩模福利一区二区蜜臀 | www.伊人网 | 成人av片免费看 | 五月婷婷久 | 国产又粗又猛又爽又黄的视频先 | 久久精品视频免费播放 | 久久国产片 | 玖玖爱免费视频 | 日韩爱爱网站 | 人人爽人人乐 | 国产喷水在线 | 亚洲精品国产精品国自产在线 | 亚洲精品1区2区3区 超碰成人网 | 97精品在线视频 | 国产一级特黄毛片在线毛片 | 免费合欢视频成人app | 亚洲精品色 | 成人国产亚洲 | 在线观看中文 | 福利一区视频 | 五月天激情婷婷 | 日日干天夜夜 | 超碰97在线资源 | 中文字幕网站视频在线 | 色婷婷狠狠操 | 国产人成在线视频 | 99久久久久久国产精品 | 日韩欧美在线高清 | 国产黄色片免费观看 | 91在线观看视频网站 | 天天综合狠狠精品 | 精品亚洲午夜久久久久91 | 99久久精品费精品 | 日韩在线高清免费视频 | 最新国产一区二区三区 | 国产69久久精品成人看 | 美女视频免费一区二区 | 久久久免费高清视频 | 亚洲视频中文 | 精品黄色片 | 欧美狠狠色| 成片免费观看视频999 | 久久久久免费网站 | 99久热在线精品视频观看 | 久久久久久久久网站 | 婷婷色六月天 | 国产美女搞久久 | 中文字幕一区二区三区四区久久 | 免费一级片在线观看 | 亚洲春色综合另类校园电影 | 日本精品久久 | 久久久久久97三级 | 国产色区 | 夜夜嗨av色一区二区不卡 | 欧美日韩国产精品一区二区亚洲 | 偷拍久久久| 久久天天躁 | 日韩免费一级a毛片在线播放一级 | 免费av片在线| 黄色小说视频网站 | 国产经典av | 久久久国产一区二区三区四区小说 | 很黄很污的视频网站 | 2018亚洲男人天堂 | 五月婷婷一级片 | 国产99久久九九精品免费 | 日本性久久 | 亚洲aaa级| 91九色最新| 国产专区免费 | 日日夜夜精品视频 | 日韩资源视频 | 伊人狠狠色 | 91豆花在线观看 | 久久久久久美女 | 婷婷色视频 | 狠狠色丁香九九婷婷综合五月 | 成人黄大片视频在线观看 | 91chinesexxx| 日日爱999 | 国产精品资源网 | 国产精品二区三区 | 久久久久国产成人精品亚洲午夜 | 免费激情网 | 精品国产一区二区三区av性色 | 国产男男gay做爰 | 国产成人久久精品77777综合 | 日本久久免费视频 | 啪啪免费观看网站 | 精品一区二区三区香蕉蜜桃 | 中文字幕欧美日韩va免费视频 | 黄色国产高清 | a天堂一码二码专区 | 欧美日韩精品区 | 欧美一区,二区 | 日韩一区二区三区高清免费看看 | 四虎免费在线观看 | 在线看岛国av | 天堂在线免费视频 | 99免费在线视频观看 | 国产一区视频在线播放 | 久久伊人免费视频 | 播五月婷婷 | 日韩欧美电影在线观看 | 中文字幕在线免费97 | 亚洲成年人在线播放 | 91资源在线观看 | 亚洲最大av网| 日韩av高清 | 狠狠色综合网站久久久久久久 | 综合色影院 | 在线免费91 | 最新色视频 | 91福利视频久久久久 | 欧美性极品xxxx做受 | 久久婷婷久久 | 日韩理论影院 | av免费在线看网站 | av网址在线播放 | 波多野结衣精品视频 | 国产精品毛片完整版 | 欧美成人精品在线 | 日本久久综合网 | 在线观看91精品视频 | 国产精品高清一区二区三区 | 亚洲夜夜爽| 国产成人99av超碰超爽 | 免费在线观看国产黄 | 在线成人国产 | 午夜美女wwww | 免费看特级毛片 | 六月婷操 | 久草精品国产 | 91污在线| 国产视频欧美视频 | 精品一区二区久久久久久久网站 | 韩国视频一区二区三区 | 中文字幕在线字幕中文 | 国产综合小视频 | 亚洲国产一区在线观看 | 日本精品久久久久中文字幕5 | 久久久久久久久久久影院 | 日韩精品综合在线 | 蜜臀精品久久久久久蜜臀 | 人人插人人射 | 久久综合毛片 | 视频三区 | 免费午夜av| 在线小视频你懂的 | 天天干天天拍天天操天天拍 | 中文国产成人精品久久一 | 日韩欧美一区二区三区黑寡妇 | 韩国一区二区三区在线观看 | 国产一区二区在线免费播放 | 毛片激情永久免费 | 五月婷婷导航 | 中文字幕在线免费观看视频 | 最新国产在线视频 | 欧美九九九 | 九色自拍视频 | 日韩精品久久久久久 | av一二三区| 国产老太婆免费交性大片 | 国产日本高清 | 日韩精品专区在线影院重磅 | 四虎在线免费观看视频 | 麻豆精品在线 | 97电院网手机版 | 日韩精品一区二区三区免费观看 | 日韩一区二区三区视频在线 | 日韩电影在线看 | 国产亚洲精品女人久久久久久 | 在线a视频 | 亚洲精品美女久久久久 | 欧美综合色在线图区 | 亚洲视频在线免费观看 | 久久国产精品视频免费看 | 国内精品久久久久久久 | 私人av| 国产视频色 | 色爱区综合激月婷婷 | 婷色| 久久久99精品免费观看app | 亚洲国产成人久久综合 | 日韩精品中文字幕一区二区 | 国产在线观看一 | 亚洲精品综合在线观看 | 久久久久久激情 | 亚洲精品麻豆视频 | 国产精品一区二区三区观看 | 射射色 | 成人午夜免费福利 | 欧美日产一区 | 国产精品一区二区在线观看 | 91久久黄色 | 欧美黑人性爽 | 日韩欧美国产视频 | 欧美激情视频一二三区 | 国产精品久久久久久久午夜 | 成年人毛片在线观看 | www.人人干| 爱av在线网 | 亚洲播播 | 久久精品国产久精国产 | 国产精品久久久久久影院 | 91日韩在线专区 | 国产一区福利在线 | 日本韩国精品一区二区在线观看 | 国产成人一区在线 | 日日干干| 欧美不卡视频在线 | 午夜丁香视频在线观看 | 中文字幕在线播放日韩 | 亚洲无吗天堂 | 四虎伊人| 亚洲国产剧情av | 国产成人三级 | 黄色三级免费看 | 97免费中文视频在线观看 | 亚洲永久精品在线观看 | 欧美日韩免费在线观看视频 | 色av男人的天堂免费在线 | 精品国产色 | 在线一区观看 | 欧美日在线观看 | 亚洲资源在线观看 | 亚洲开心激情 | 久草精品在线播放 | 麻豆果冻剧传媒在线播放 | 免费国产在线精品 | 99久高清在线观看视频99精品热在线观看视频 | 麻豆视频免费观看 | 狠狠操.com | 天天草网站 | 国产成人性色生活片 | 国产精品a成v人在线播放 | 日韩女同一区二区三区在线观看 | 久草在线官网 | 免费涩涩网站 | 99视频 | 免费a v观看 | 五月天激情开心 | 成人丝袜 | 欧美色一色 | 国产精品久久久久久久久久久久久 | 91成年人视频 | 天天干,天天操 | 欧美成年黄网站色视频 | 久久艹久久 | 日韩爱爱网站 | 又大又硬又黄又爽视频在线观看 | 久久精品2| 97av在线视频免费播放 | 国产香蕉久久 | 欧美成人黄色片 | 夜夜操天天操 | 欧美大荫蒂xxx | 日韩av成人免费看 | 日日夜夜噜 | 四虎在线观看网址 | 麻豆视频一区二区 | 久久免费在线视频 | 亚洲国产电影在线观看 | 中文字幕在线电影 | 国产一级二级在线播放 | 伊色综合久久之综合久久 | 久久国产品 | 国内三级在线观看 | 免费观看完整版无人区 | 精品国产一区二区在线 | 免费三级av | 人人干在线 | av中文字幕网 | 在线中文字幕视频 | 婷婷色网视频在线播放 | www.久久爱.cn | 日本女人的性生活视频 | 日韩黄色在线观看 | 国产传媒中文字幕 | 久久九九久久九九 | 亚洲精品理论片 | 欧美在线观看小视频 | 91成年人网站 | 日韩欧美视频一区二区三区 | 日韩专区中文字幕 | 国产不卡在线视频 | 久久影视中文字幕 | 国产视频久久久久 | 欧美日韩一区二区三区在线免费观看 | 国内精品久久久久国产 | 欧美一级片免费观看 | 亚洲精品美女视频 | 久久婷婷亚洲 | 久久久午夜电影 | 国产理论片在线观看 | 日韩欧美国产精品 | 五月婷婷六月丁香在线观看 | www.91成人| 一级黄色片在线免费观看 | 国产视频一级 | 中文字幕一区二区三区在线观看 | 91精品在线免费视频 | 久久久国产精品免费 | 国产麻豆精品95视频 | 69xx视频 | 国产一级在线观看视频 | 中文av免费| av免费电影在线 | 91手机在线看片 | 日韩在线观看一区二区三区 | 久久人人添人人爽添人人88v |