以下是官方对K3S的介绍
轻量级Kubernetes发行版。易于安装,内存减半,所有二进制文件不到40mb。
适用于:
- 边缘计算-Edge
- 物联网-IoT
- CI
- ARM
- Situations where a PhD in k8s clusterology is infeasible
效果演示
1. 集群规划规划
- 数据库,LB,管理端UI单独部署
- 两个master节点,实现最基本的
K3S-SERVER
冗余
- 两个worker节点,通过LB 接入master节点
数据库也需要做HA,不过这个和K3S集群没有什么关系,此处略过。
LB 只需要支持4层负载均衡,此处使用nginx
服务器 |
用途 |
配置 |
IP |
k3s-lb |
LB/管理端UI/数据库 |
2C4G |
10.11.12.201 |
k3s-m1 |
K3S-SERVER(master 节点) |
1C2G |
10.11.12.171 |
k3s-m2 |
K3S-SERVER(master 节点) |
1C2G |
10.11.12.172 |
k3s-worker1 |
K3S-AGENT(worker 节点) |
2C2G |
10.11.12.181 |
k3s-worker2 |
K3S-AGENT(worker 节点) |
2C2G |
10.11.12.182 |
- 操作系统:
CentOS 7.6
- docker 引擎: 19
架构图
对比一下单机版架构图
2. OS 准备
虚拟机模版 : https://tc5.us/file/22536368-427852352 ,已经装好docker
等必要软件,本文按照这个环境进行集群搭建。
如果全新系统,主要是安装docker
,并配置加速镜像,以及一些内核参数优化。
登录每一个服务器,修改对应的机器名
1 2 3 4 5
| sudo hostnamectl --static set-hostname k3s-lb && sudo hostnamectl set-hostname k3s-lb sudo hostnamectl --static set-hostname k3s-m1 && sudo hostnamectl set-hostname k3s-m1 sudo hostnamectl --static set-hostname k3s-m2 && sudo hostnamectl set-hostname k3s-m2 sudo hostnamectl --static set-hostname k3s-worker1 && sudo hostnamectl set-hostname k3s-worker1 sudo hostnamectl --static set-hostname k3s-worker2 && sudo hostnamectl set-hostname k3s-worker2
|
登录每一个服务器,修改对应的IP( /etc/sysconfig/network-scripts/ifcfg-ens33
)
其他可选系统配置
- 创建swap分区
- 开启内核
user_namespace
支持
- 设置docker私服
- SSH空闲连接时间
- 安装
nfs-utils
,没有安装这个会导致无法挂载NFS 类型的PV
3. 节点安装配置
3.1 k3s-lb
安装MySQL
1 2 3 4 5 6 7 8 9
| docker run -d \ --name k3s-mysql \ --restart=always \ -v /opt/k3s-cluster/mysql/conf:/etc/mysql/conf.d \ -v /opt/k3s-cluster/mysql/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=root \ -p 3306:3306 \ mysql:5.7.29 \ --default-time-zone=+8:00
|
安装 rancher ui
1 2 3 4 5 6
| docker run -d \ --restart=unless-stopped \ --name rancher-server \ -v /opt/rancher-server/var/lib/rancher/:/var/lib/rancher/ \ -p 10443:443 \ rancher/rancher:stable
|
你需要记下这个容器的运行参数,升级的时候还会用到(如果忘记,可以docker inspect rancher-server
查看)。
访问地址 http://10.11.12.201:10443
配置nginx(/etc/nginx/nginx.conf
),添加stream配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| events { } http { }
stream { upstream k3s { server 10.11.12.171:6443; server 10.11.12.172:6443; } server { listen 6443; proxy_pass k3s; } }
|
3.2 k3s-m1 & k3s-m2
设置host映射(/etc/hosts
)
1
| 10.11.12.201 k3s-mysql-server
|
安装K3S-SERVER(不要使用root用户执行)
1 2 3 4 5
| # 定义安装参数 export INSTALL_K3S_VERSION=v1.17.3-k3s1 export INSTALL_K3S_EXEC="--datastore-endpoint=mysql://root:root@tcp(k3s-mysql-server:3306)/k3s --docker --kube-apiserver-arg service-node-port-range=1-65000 --no-deploy traefik --write-kubeconfig ~/.kube/config --write-kubeconfig-mode 666" # 安装 curl -sfL https://docs.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -
|
执行命令后,使用kubectl get nodes
查看状态,如果成功能看到两个节点
如需重新安装可以卸载脚本 /usr/local/bin/k3s-uninstall.sh
3.3 k3s-worker1 & k3s-worker2
先登录任意一个master节点,查看node-token
1
| sudo cat /var/lib/rancher/k3s/server/node-token
|
在worker节点上执行(不要使用root用户执行)
1 2 3 4 5 6 7
| export K3S_TOKEN={node-token的内容} export INSTALL_K3S_VERSION=v1.17.3-k3s1 # LB的地址 export K3S_URL=https://10.11.12.201:6443 export INSTALL_K3S_EXEC="--docker --kube-apiserver-arg service-node-port-range=1-65000 --no-deploy traefik --write-kubeconfig ~/.kube/config --write-kubeconfig-mode 666" # 安装 curl -sfL https://docs.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -
|
执行命令后,在master节点使用kubectl get nodes
查看状态,如果成功能看到新的节点
如需重新安装可以卸载脚本 /usr/local/bin/k3s-agent-uninstall.sh
3.4 集群导入
为了方便使用,可用rancher管理面板来简化集群管理工作
打开rancher ui (http://10.11.12.201:10443
),选择导入集群,复制生成的命令,在其中一台master 节点上执行即可
参考资料
文档&视频
Rancher Docs
Spring Cloud & Kubernetes教程
K3S 入门到生产部署
docker 安装脚本
来自 http://pigx.vip/docker_install.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| #!/bin/sh set -e # 在线安装脚本
# 一般不建议安装swap 系统内存小的时候没有swap会卡死 if [ ! -f "/var/swap" ];then echo "create swap" fallocate -l 4G /var/swap mkswap /var/swap mkswap -f /var/swap swapon /var/swap echo "/var/swap swap swap defaults 0 0" >> /etc/fstab fi
# 判断是否安装 docker if [ `command -v docker` ];then echo 'docker has installed' else echo 'install docker' curl https://download.daocloud.io/docker/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo yum -y install https://download.daocloud.io/docker/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm curl -fsSL https://get.daocloud.io/docker | bash -s docker --mirror Aliyun # centos7 的内核经过 k3s 检查都有这个问题 grubby --args="user_namespace.enable=1" --update-kernel="$(grubby --default-kernel)" fi # 添加加速源 sudo mkdir -p /etc/docker tee /etc/docker/daemon.json <<-'EOF' {"registry-mirrors":["https://3wzyb32e.mirror.aliyuncs.com"],"insecure-registries":["172.17.0.111"]} EOF # 启动 sudo systemctl daemon-reload sudo systemctl restart docker sudo systemctl enable docker
echo 'finish'
|
证书过期问题
在证书有效期小于90天时,K3S会自动进行续期。
参考 工单 #1621
升级
节点(K3S-SERVER
,K3S-AGENT
)支持手动升级和自动升级,更换版本号,使用相同的参数再次执行安装脚本即可
参考 https://rancher.com/docs/k3s/latest/en/upgrades/
管理面板升级(就是那个rancher/rancher
的容器),重新拉取新版本镜像版本即可,最好先备份
1 2 3 4 5 6 7 8
| # 停止容器 docker stop rancher-server # 备份数据 docker create --volumes-from rancher-server --name rancher-data rancher/rancher:stable docker run --volumes-from rancher-data -v $PWD:/backup busybox tar zcvf /backup/rancher-data-backup-<RANCHER_VERSION>-<DATE>.tar.gz /var/lib/rancher # 重新拉取镜像 docker pull rancher/rancher:stable # 然后使用之前相同参数,重新 docker run
|
参考 https://rancher.com/docs/rancher/v2.x/en/upgrades/upgrades/single-node/