背景
k3s是经过CNCF认证的由Rancher公司开发维护的一个轻量级的 Kubernetes 发行版,内核机制还是和 k8s 一样,但是剔除了很多外部依赖以及 K8s 的 alpha、beta 特性,同时改变了部署方式和运行方式,目的是轻量化 K8s。
k3s优点
1)安装简单,占用资源少,只需要512M内存就可以运行起来;
2)apiserver 、schedule 等组件全部简化,并以进程的形式运行在节点上,把程序都打包为单个二进制文件,每个程序只需要占用100M内存;
3)使用基于sqlite3的轻量级存储后端作为默认存储机制。同时支持使用etcd3、MySQL 和PostgreSQL作为存储机制;
4)默认使用 local-path-provisioner 提供本地存储卷;
5)默认安装了Helm controller 和 Traefik Ingress controller;
6)所有 Kubernetes control-plane 组件的操作都封装在单个二进制文件和进程中,使 K3s 具有自动化和管理包括证书分发在内的复杂集群操作的能力。
7)减少外部依赖,操作系统只需要安装较新的内核(centos7.6就可以,不需要升级内核)以及支持cgroup即可,k3s安装包已经包含了containerd、Flannel、CoreDNS,非常方便地一键式安装,不需要额外安装Docker、Flannel等组件。
k3s架构
单节点架构
- k3s server节点是运行k3s server命令的机器(裸机或者虚拟机),而k3s Agent 节点是运行k3s agent命令的机器。
- 单点架构只有一个控制节点(在 K3s 里叫做server node,相当于 K8s 的 master node),而且K3s的数据存储使用 sqlite 并内置在了控制节点上
- 在这种配置中,每个 agent 节点都注册到同一个 server 节点。K3s 用户可以通过调用server节点上的K3s API来操作Kubernetes资源。
高可用架构
虽然单节点 k3s 集群可以满足各种用例,但对于 Kubernetes control-plane 的正常运行至关重要的环境,您可以在高可用配置中运行 K3s。一个高可用 K3s 集群由以下几个部分组成:
- K3s Server 节点:两个或更多的server节点将为 Kubernetes API 提供服务并运行其他 control-plane 服务
- 外部数据库:与单节点 k3s 设置中使用的嵌入式 SQLite 数据存储相反,高可用 K3s 需要挂载一个external database外部数据库作为数据存储的媒介。
k3s部署
集群角色 | IP 配置 |
---|---|
k3s server | 192.168.170.31 2C4G |
k3s agent | 192.168.170.32 2C4G |
k3s agent | 192.168.170.33 2C4G |
前期部署
查看内核参数
root@k3s-01:~# cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.6 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.6 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
配置yum源
https://developer.aliyun.com/mirror/ 阿里源
root@k3s-01:~# cp /etc/apt/sources.list /etc/apt/sources.list.bak
root@k3s-01:~# cat /etc/apt/sources.list
deb http://mirrors.cloud.aliyuncs.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.cloud.aliyuncs.com/ubuntu/ focal main restricted universe multiverse
eb-src http://mirrors.cloud.aliyuncs.com/ubuntu/ focal-backports main restricted universe multiverse
......
非阿里云用户替换
root@k3s-01:~# sed -i 's/https:\/\/mirrors.aliyun.com/http:\/\/mirrors.cloud.aliyuncs.com/g' /etc/apt/sources.list
root@k3s-01:~# apt update
关闭防火墙
root@k3s-01:~# ufw status
Status: active
root@k3s-01:~# ufw disable
关闭selinux,默认是不安装selinux
root@k3s-01:~# getenforce
Command 'getenforce' not found, but can be installed with:
apt install selinux-utils
优化内核参数
root@k3s-01:~# vim /etc/sysctl.conf 或者 nano /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.conf.all.proxy_arp = 1
root@k3s-01:~# sysctl -p /etc/sysctl.conf
关闭swap分区
root@k3s-01:~# cat /etc/fstab
#/swap.img none swap sw 0 0
root@k3s-01:~# reboot
root@k3s-01:~# swapoff /swap.img 临时关闭
后期部署
k3s 集群默认安装最新版本 默认集成containerd、Flannel、CoreDNS等组件
国内脚本部署安装,如需二进制安装参考官网安装手册
root@k3s-01:~# curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh
查看是否安装成功
root@k3s-01:~# k3s -v
k3s version v1.29.3+k3s1 (8aecc26b)
go version go1.21.8
root@k3s-01:~# kubectl get nodes
k3s-01 Ready control-plane,master 18h v1.29.3+k3s1
提取join token
root@k3s-01:~# cat /var/lib/rancher/k3s/server/node-token
K10af51222ff2cf3bac742104b414a61ad637e032643ced48565a19c42721e0993e::server:edge
agent加入k3s节点
root@k3s-02 ~# curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn K3S_URL=https://192.168.170.31:6443 K3S_TOKEN=K10af51222ff2cf3bac742104b414a61ad637e032643ced48565a19c42721e0993e::server:edge sh -
root@k3s-03 ~# curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn K3S_URL=https://192.168.170.31:6443 K3S_TOKEN=K10af51222ff2cf3bac742104b414a61ad637e032643ced48565a19c42721e0993e::server:edge sh -
查看集群状态
root@k3s-01:~# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k3s-03 Ready worker 18h v1.29.3+k3s1
k3s-02 Ready worker 18h v1.29.3+k3s1
k3s-01 Ready control-plane,master 18h v1.29.3+k3s1
k3s也是systemd起的也可以查看
root@k3s-01:~# systemctl status k3s
● k3s.service - Lightweight Kubernetes
Loaded: loaded (/etc/systemd/system/k3s.service; enabled; vendor preset: enabled)