K3s 是轻量级的、完全兼容的 Kubernetes 发行版。K3s 易于安装,仅需要 Kubernetes 内存的一半,所有组件都在一个小于 100 MB 的二进制文件中。
第一步: 准备服务器
此处示例的 K3s 集群包含四个节点,其中一个管理节点、三个工作节点,实际的测试和生产环境,建议配置多个管理节点,以提高容错率。
示例节点:
IP | CPU | 内存 | 操作系统 | 类型 |
---|---|---|---|---|
192.168.10.100 | 2 | 4GB | openSUSE Leap 15.5 | 管理节点(Server) |
192.168.10.101 | 2 | 8GB | openSUSE Leap 15.5 | 工作节点(Agent) |
192.168.10.102 | 2 | 8GB | openSUSE Leap 15.5 | 工作节点(Agent) |
192.168.10.103 | 2 | 8GB | openSUSE Leap 15.5 | 工作节点(Agent) |
第二步:更新系统并安装补丁
zypper update -y
zypper patch -y
第三步:关闭 SWAP
sysctl -w vm.swappiness=0
vim /etc/sysctl.d/99-swappiness.conf
vm.swappiness=0
sysctl vm.swappiness
若显示 vm.swappiness = 0
,则表示关闭成功
第四步: 配置主机名
K3s 集群每个节点的主机名必须不同
IP | HOSTNAME |
---|---|
192.168.10.100 | k3s-master |
192.168.10.101 | k3s-worker-1 |
192.168.10.102 | k3s-worker-2 |
192.168.10.103 | k3s-worker-3 |
命令示例:
hostname -b k3s-master
echo "k3s-master" > /etc/hostname
hostname -b k3s-worker-1
echo "k3s-worker-1" > /etc/hostname
hostname -b k3s-worker-2
echo "k3s-worker-2" > /etc/hostname
hostname -b k3s-worker-3
echo "k3s-worker-3" > /etc/hostname
第五步: 配置主机 hosts 文件
vim /etc/hosts
k3s-master 192.168.10.100
k3s-worker-1 192.168.10.101
k3s-worker-2 192.168.10.102
k3s-worker-3 192.168.10.103
第六步: 开放端口
K3s 各节点直接需要保证如下端口正常访问:
关闭防火墙指令:
systemctl stop firewalld.service
systemctl status firewalld.service
开放防火墙端口指令:
firewall-cmd --permanent --add-port=6443/tcp --add-port=2379-2380/tcp --add-port=10250/tcp --add-port=8472/udp --add-port=51820/udp --add-port=51821/udp
firewall-cmd --reload
firewall-cmd --zone=public --list-ports
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn INSTALL_K3S_VERSION=v1.29.0+k3s1 sh -
curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=v1.29.0+k3s1 sh -
参数说明:
INSTALL_K3S_MIRROR
: 国内安装时使用镜像,加速下载INSTALL_K3S_VERSION
: 指定安装版本,此处使用 v1.29.0+k3s1
,具体版本可查看官方文档( https://docs.k3s.io/zh/release-notes/v1.29.X )curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn INSTALL_K3S_VERSION=v1.29.0+k3s1 K3S_URL=https://k3s-master:6443 K3S_TOKEN=123456 sh -
curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=v1.29.0+k3s1 K3S_URL=https://k3s-master:6443 K3S_TOKEN=123456 sh -
参数说明:
INSTALL_K3S_MIRROR=cn
: 国内安装时使用镜像,加速下载INSTALL_K3S_VERSION
: 指定安装版本,此处使用 v1.29.0+k3s1
,具体版本可查看官方文档( https://docs.k3s.io/zh/release-notes/v1.29.X )K3S_URL
: 指定 Server 节点的地址,此处为 https://k3s-master:6443
K3S_TOKEN
: 指定 Server 节点的 Token,可查看 Server 节点的 /var/lib/rancher/k3s/server/node-token
文件获取systemctl status k3s.service
systemctl status k3s-agent.service
k3s kubectl get nodes
返回示例:
NAME STATUS ROLES AGE VERSION
k3s-master Ready control-plane,master 13h v1.29.0+k3s1
k3s-worker-1 Ready <none> 12h v1.29.0+k3s1
k3s-worker-2 Ready <none> 12h v1.29.0+k3s1
k3s-worker-3 Ready <none> 12h v1.29.0+k3s1
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn INSTALL_K3S_VERSION=需要安装的K3s版本 sh -
示例:
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn INSTALL_K3S_VERSION=v1.29.0+k3s1 sh -
url -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn INSTALL_K3S_VERSION=需要安装的K3s版本 K3S_CLUSTER_INIT sh -
示例:
url -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn INSTALL_K3S_VERSION=v1.29.0+k3s1 K3S_CLUSTER_INIT sh -
url -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn INSTALL_K3S_VERSION=需要安装的K3s版本 K3S_DATASTORE_ENDPOINT="mysql://MySQL或MariaDB用户名:MySQL或MariaDB密码@tcp(MySQL或MariaDB主机IP:MySQ或MariaDB端口号)/MySQL或MariaDB数据库名称" sh -
示例:
url -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn INSTALL_K3S_VERSION=v1.29.0+k3s1 K3S_DATASTORE_ENDPOINT="mysql://k3s:123456@tcp(192.168.10.100:3306)/k3s" sh -
url -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn INSTALL_K3S_VERSION=需要安装的K3s版本 K3S_DATASTORE_ENDPOINT="postgres://PostgreSQL用户名:PostgreSQL密码@PostgreSQL主机IP:PostgreSQL端口号/PostgreSQL数据库名称" sh -
示例:
url -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn INSTALL_K3S_VERSION=v1.29.0+k3s1 K3S_DATASTORE_ENDPOINT="postgres://k3s:123456@192.168.10.100:3306/k3s" sh -
默认情况下,K3s 安装时使用 /etc/rancher/k3s/config.yaml
和 /etc/rancher/k3s/config.yaml.d/*.yaml
的配置文件,如需自定义安装参数,可编辑以上文件。
zypper install -y bash-completion
k3s completion bash > /etc/bash_completion.d/k3s.sh
脚本内容示例:
#! /bin/bash
_cli_bash_autocomplete() {
if [[ "${COMP_WORDS[0]}" != "source" ]]; then
local cur opts base
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
if [[ "$cur" == "-"* ]]; then
opts=$( ${COMP_WORDS[@]:0:$COMP_CWORD} ${cur} --generate-bash-completion )
else
opts=$( ${COMP_WORDS[@]:0:$COMP_CWORD} --generate-bash-completion )
fi
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
return 0
fi
}
complete -o bashdefault -o default -o nospace -F _cli_bash_autocomplete k3s
source /etc/bash_completion.d/k3s.sh
K3s 启动时,会加载 /etc/rancher/k3s/registries.yaml
文件作为镜像仓库地址,因此可将自定义镜像仓库配置于此处。
文件说明:
mirrors:
镜像仓库名称:
endpoint:
- "镜像仓库URL"
configs:
"镜像仓库URL":
auth:
username: 私有镜像仓库基本身份验证的用户名
password: 私有镜像仓库基本身份验证的用户密码
tls:
cert_file: 客户端证书路径,用于向镜像仓库进行身份验证
key_file: 客户端密钥路径,用于向镜像仓库进行身份验证
ca_file: 定义用于验证镜像仓库服务器证书文件的 CA 证书路径
内容示例:
vim /etc/rancher/k3s/registries.yaml
mirrors:
docker.io:
endpoint:
- "https://dockerproxy.com"
- "https://registry.docker-cn.com"
- "https://m.daocloud.io"
- "https://hub-mirror.c.163.com"
myhub:
endpoint:
- "https://hub.hty1024.com"
configs:
"hub.hty1024.com":
auth:
username: test
password: 123456
k3s --help
k3s completion shell类型( bash 或 zsh )
k3s --version
k3s --data-dir 目录绝对路径
k3s token --help
k3s certificate help
k3s server --help
k3s agent --help
k3s ctr help
或
ctr help
k3s kubectl --help
或
kubectl --help
k3s crictl help
或
crictl help
INSTALL_K3S_MIRROR=cn
: 指定镜像地址,加速下载INSTALL_K3S_VERSION=版本号
: 指定需要安装的 K3s 版本,不指定时默认为最新版本INSTALL_K3S_BIN_DIR=目录
: 指定k3s二进制文件保存目录,不指定时默认为 /usr/local/bin
目录INSTALL_K3S_EXEC=命令
: 指定安装时需要执行的命令如在安装时指定则可使用
INSTALL_K3S_EXEC='server 参数'
形式 ,如INSTALL_K3S_EXEC='server --cluster-init'
--datastore-endpoint 数据库地址
或 K3S_DATASTORE_ENDPOINT=数据库地址
: 指定数据库地址,可使用 Sqlite
、etcd
、Mysql
、Postgres
,不配置时默认为Sqlite
--cluster-init
或 K3S_CLUSTER_INIT
: 指定使用嵌入式 Etcd 数据库,不配置默认使用嵌入式 SQLite 数据库--etcd-disable-snapshots
: 禁用 etcd 快照--etcd-snapshot-name 名称
: 设置 etcd 快照基础名称,默认值为 etcd-snapshot
(此时生成的快照名称为 etcd-snapshot-<unix-timestamp>
)--etcd-snapshot-schedule-cron cron表达式
: 设置快照间隔时间,默认为 0 */12 * * *
(即每12小时生成一次快照)--etcd-snapshot-retention 数量
: 设置需要保留的快照数量,默认值为 5
(即保留最近5份快照)--etcd-snapshot-dir 目录的绝对路径
: 设置快照的保留路径,默认值为 ${data-dir}/db/snapshots
--data-dir 目录
或 -d 目录
: 指定保存数据的文件夹,默认为 /var/lib/rancher/k3s
(root用户) 或 ${HOME}/.rancher/k3s
(普通用户)--token Token值
或 -t Token值
或 K3S_TOKEN=Token值` : 指定 Token,用于将 Server 或 Agent 加入集群--agent-token Token值
或 K3S_AGENT_TOKEN=Token值` : 指定 Token,用于将 Agent 加入集群--server Server节点的URL
或 K3S_URL=URL
: 指定 Server 节点的地址,运行 Agent 节点时需要指定--cluster-init
或 K3S_CLUSTER_INIT
: 使用嵌入式 Etcd 初始化新集群--secrets-encryption
: 启用 secret 静态加密备份 /var/lib/rancher/k3s/server/token
文件即可
zip -r k3s_backup_token.zip /var/lib/rancher/k3s/server/token
备份 /var/lib/rancher/k3s/server/db/
目录即可
zip -r k3s_backup_db.zip /var/lib/rancher/k3s/server/db
默认情况下,K3s 会在每天 00 点和 12 点保存快照至 /var/lib/rancher/k3s/db/snapshots
目录,最多保留五份快照
创建集群时,可通过配置文件或命令行参数指定快照保存相关参数。
--etcd-disable-snapshots
: 禁用快照--etcd-snapshot-schedule-cron cron字符串
: 快照间隔时间,默认为 0 */12 * * *
(即每 12 小时保存一份快照)--etcd-snapshot-retention 数量
: 指定需要保留的快照数量,默认为 5
(即保留最新5份快照)--etcd-snapshot-dir 目录
: 指定快照保存目录,默认为 ${data-dir}/db/snapshots
(即 /var/lib/rancher/k3s/db/snapshots
)根据实际使用的数据库进行备份,比如备份 MySQL 数据库
/usr/local/bin/k3s-uninstall.sh
/usr/local/bin/k3s-agent-uninstall.sh
/usr/local/bin/k3s-killall.sh
curl -sfL https://get.k3s.io | <EXISTING_K3S_ENV> sh -s - <EXISTING_K3S_ARGS>
示例:
curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=v1.30.0+k3s1 sh -s -
kubectl version
示例:
wget https://github.com/rancher/system-upgrade-controller/releases/download/v0.13.4/system-upgrade-controller.yaml
kubectl apply -f system-upgrade-controller.yaml
示例:
wget https://github.com/rancher/system-upgrade-controller/releases/download/v0.13.4/crd.yaml
kubectl apply -f crd.yaml
此处以升级到 v1.29.2+k3s1 版本为例,升级其他版本时替换指定版本号即可
vim server-plan.yaml
# Server plan
apiVersion: upgrade.cattle.io/v1
kind: Plan
metadata:
name: server-plan
namespace: system-upgrade
spec:
concurrency: 1
cordon: true
nodeSelector:
matchExpressions:
- key: node-role.kubernetes.io/control-plane
operator: In
values:
- "true"
serviceAccountName: system-upgrade
upgrade:
image: rancher/k3s-upgrade
version: v1.29.2+k3s1
---
# Agent plan
apiVersion: upgrade.cattle.io/v1
kind: Plan
metadata:
name: agent-plan
namespace: system-upgrade
spec:
concurrency: 1
cordon: true
nodeSelector:
matchExpressions:
- key: node-role.kubernetes.io/control-plane
operator: DoesNotExist
prepare:
args:
- prepare
- server-plan
image: rancher/k3s-upgrade
serviceAccountName: system-upgrade
upgrade:
image: rancher/k3s-upgrade
version: v1.29.2+k3s1
kubectl apply -f server-plan.yaml
kubectl -n system-upgrade get plans -o yaml
kubectl -n system-upgrade get jobs -o yaml