K3S-轻量化的k8s
参考资料
- 官网地址:https://k3s.io/
- 下载地址:https://github.com/k3s-io/k3s/releases/tag/v1.27.4+k3s1
- 文档地址:https://docs.k3s.io/
- https://docs.k3s.io/zh/
- https://docs.rancher.cn/docs/k3s/quick-start/_index
- 部署和访问 Kubernetes 仪表板(Dashboard)https://kubernetes.io/zh-cn/docs/tasks/access-application-cluster/web-ui-dashboard/
- Yaml文件编写 https://kubernetes.io/zh-cn/docs/reference/kubernetes-api/
- 实践 kubernetes轻量级生产部署方案以及基础解决方案 https://zhuanlan.zhihu.com/p/624560065
- K3s快速搭建入门 https://www.yii666.com/blog/372297.html
- 一文搞定全场景K3s离线安装 https://www.sohu.com/a/447244436_120435200
- K3S+Rancher之在线安装 https://code84.com/776934.html
k3s简介
K3s 是一个轻量级的 Kubernetes 发行版,它针对边缘计算、物联网等场景进行了高度优化。具有以下增强功能:
- 打包为单个二进制文件。
- 使用基于 sqlite3 的轻量级存储后端作为默认存储机制。同时支持使用 etcd3、MySQL 和 PostgreSQL 作为存储机制。
- 封装在简单的启动程序中,通过该启动程序处理很多复杂的 TLS 和选项。
- 默认情况下是安全的,对轻量级环境有合理的默认值。
- 添加了简单但功能强大的
batteries-included
功能,例如:本地存储提供程序,服务负载均衡器,Helm controller 和 Traefik Ingress controller。 - 所有 Kubernetes control-plane 组件的操作都封装在单个二进制文件和进程中,使 K3s 具有自动化和管理包括证书分发在内的复杂集群操作的能力。
- 最大程度减轻了外部依赖性,K3s 仅需要 kernel 和 cgroup 挂载。
网络:
- 默认情况下,K3s 将以 flannel 作为 CNI 运行,使用 VXLAN 作为默认后端。
- 启动 server 时,默认情况下会部署 Traefik作为IngressController,接管集群内80和443的流量。
- K3s 提供了一个名为Klipper Load Balancer的负载均衡器,它可以使用可用的主机端口
一、在线部署单点k3s
1.准备工作
1.1关闭防火墙和selinux
1.2检查版本镜像是否可用
登陆http://mirror.cnrancher.com/,打开对应版本的文本文件确认是否正常显示
2.安装
2.1 默认情况下使用内置SQLite数据库作为存储,containerd作为容器运行时。
# 指定国内镜像源INSTALL_K3S_MIRROR和版本INSTALL_K3S_VERSION
curl -sfL https://rancher-mirror.oss-cn-beijing.aliyuncs.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn INSTALL_K3S_VERSION=v1.22.6+k3s1 sh -
# 最小化安装,关闭traefik、servicelb、local storage
curl -sfL https://rancher-mirror.oss-cn-beijing.aliyuncs.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn INSTALL_K3S_VERSION=v1.22.6+k3s1 sh -s - --disable traefik --disable servicelb --disable local-storage
# 使用外部mysql作为存储,添加datastore参数
--datastore-endpoint="mysql://username:password@tcp(x.x.x.x:3306)/database_name"
# 使用docker作为容器运行时
curl -sfL https://rancher-mirror.oss-cn-beijing.aliyuncs.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn INSTALL_K3S_VERSION=v1.22.6+k3s1 sh -s - --docker --disable traefik --disable servicelb --disable local-storage
2.2使用docker作为容器进行时
编辑/usr/lib/systemd/system/docker.service文件,修改驱动为cgroupfs
systemctl daemon-reload && systemctl restart docker
curl -sfL https://rancher-mirror.oss-cn-beijing.aliyuncs.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn INSTALL_K3S_VERSION=v1.22.6+k3s1 sh -s - --docker --disable traefik --disable servicelb --disable local-storage
3.卸载
cd /usr/local/bin
sh k3s-uninstall.sh
4.app用户增加kubectl命令
chmod a+r /etc/rancher/k3s/k3s.yaml
二、在线部署集群k3s
1.申请vip用于高可用主备切换、部署keepalived
- 移动云上参考:https://ecloud.10086.cn/op-help-center/doc/article/24927
- 移动云上参考:https://ecloud.10086.cn/op-help-center/doc/article/52908
3.部署K3S集群master(使用外置的etcd存储部署)
#三个master节点依次执行
curl -sfL http://rancher-mirror.oss-cn-beijing.aliyuncs.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn INSTALL_K3S_VERSION=v1.22.6+k3s1 sh -s - server --disable traefik --disable servicelb --disable local-storage --datastore-endpoint="http://1.1.1.1:2379,http://1.1.1.2:2379,http://1.1.1.3:2379" --tls-san 1.1.1.200 --token secret
#如果历史版本在线无法下载安装,去掉版本,默认装最新release
curl -sfL http://rancher-mirror.oss-cn-beijing.aliyuncs.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -s - server --disable traefik --disable servicelb --disable local-storage --datastore-endpoint="http://1.1.1.1:2379,http://1.1.1.2:2379,http://1.1.1.3:2379" --tls-san 1.1.1.200 --token secret
注:1.1.1.200为haproxy上配置的虚地址
或者使用k3s自带嵌入etcd部署
#第一个master节点执行
curl -sfL http://rancher-mirror.oss-cn-beijing.aliyuncs.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn INSTALL_K3S_VERSION=v1.22.6+k3s1 K3S_TOKEN=SECRET sh -s - server --disable traefik --disable servicelb --disable local-storage --cluster-init
#其他master节点执行
curl -sfL http://rancher-mirror.oss-cn-beijing.aliyuncs.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn INSTALL_K3S_VERSION=v1.22.6+k3s1 K3S_TOKEN=SECRET sh -s - server --server https://x.x.x.x:6443 --disable traefik --disable servicelb --disable local-storage
x.x.x.x为第一个master节点ip
4.部署node节点加入集群
curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn INSTALL_K3S_VERSION=v1.22.6+k3s1 K3S_URL=https://1.1.1.200:6443 K3S_TOKEN=secret sh -s - --kubelet-arg container-log-max-files=5 --kubelet-arg container-log-max-size=100Mi
5.设置系统服务
6.设置开机自启
三、离线部署集群k3s(k3s-airgap-images-amd64.tar、k3s、install.sh)
- 文档:https://docs.k3s.io/zh/installation/airgap#%E6%89%8B%E5%8A%A8%E9%83%A8%E7%BD%B2%E9%95%9C%E5%83%8F
- 下载:https://github.com/k3s-io/k3s/releases/tag/v1.22.6%2Bk3s1
2.申请vip用于高可用主备切换、部署keepalived
- 移动云上参考:https://ecloud.10086.cn/op-help-center/doc/article/24927
- 移动云上参考:https://ecloud.10086.cn/op-help-center/doc/article/52908
3.master节点执行
# 上传k3s-airgap-images-amd64.tar、k3s、install.sh 至/opt
mkdir -p /var/lib/rancher/k3s/agent/images/
cp /opt/k3s-airgap-images-amd64.tar /var/lib/rancher/k3s/agent/images/
cp /opt/k3s /usr/local/bin/
chmod 755 /opt/install.sh
chmod 755 /usr/local/bin/k3s
cd /opt
INSTALL_K3S_SKIP_DOWNLOAD=true INSTALL_K3S_EXEC='server --token=secret --tls-san=1.1.1.200 --disable=traefik --disable=servicelb --disable=local-storage' K3S_DATASTORE_ENDPOINT='http://1.1.1.1:2379,http://1.1.1.2:2379,http://1.1.1.3:2379' ./install.sh
## 查看状态
systemctl status k3s
4.部署node节点加入集群
mkdir -p /var/lib/rancher/k3s/agent/images/
cp /opt/k3s-airgap-images-amd64.tar /var/lib/rancher/k3s/agent/images/
cp /opt/k3s /usr/local/bin/
chmod 755 /opt/install.sh
chmod 755 /usr/local/bin/k3s
cd /opt
INSTALL_K3S_SKIP_DOWNLOAD=true K3S_URL=https://1.1.1.200:6443 K3S_TOKEN=secret ./install.sh
## 查看状态
systemctl status k3s-agent
5.设置系统服务
6.设置开机自启
7.删除node https://www.cnblogs.com/John-2011/p/14984900.html
master上执行:
k3s kubectl delete node nodeName
node上卸载:
/usr/local/bin/k3s-agent-uninstall.sh
8.配置私有镜像仓库
https://forums.rancher.cn/t/k3s-containerd/703
可以将 Containerd 配置为连接到私有镜像仓库,并在节点上使用私有镜像仓库拉取私有镜像
启动时,K3s 会检查 /etc/rancher/k3s/ 中是否存在 registries.yaml 文件,并指示 containerd 使用该文件中定义的镜像仓库。如果你想使用私有的镜像仓库,你需要在每个使用镜像仓库的节点上以 root 身份创建这个文件
## 新增私有仓库配置
vi /etc/rancher/k3s/registries.yaml
mirrors:
hub.wds.com:
endpoint:
- "https://hub.wds.com"
configs:
"hub.wds.com":
auth:
username: name
password: pwd
tls:
insecure_skip_verify: true
## 配置hosts域名解析
vi /etc/hosts
hub_ip hub.wds.com
四、问题记录
1.历史版本v1.22.6+k3s1在线无法下载安装,去掉版本参数,默认安装最新稳定版本 v1.27.4-k3s1
2.Failed to create pod sandbox: rpc error: code = Unknown desc = failed to get sandbox image “rancher/mirrored-pause:3.6”: failed to pull image “rancher/mirrored-pause:3.6”: failed to pull and unpack image “docker.io/rancher/mirrored-pause:3.6”: failed to copy: httpReadSeeker: failed open: failed to do request: Get “https://production.cloudflare.docker.com/registry-v2/docker/registry/v2/blobs/sha256/62/6270bb605e12e581514ada5fd5b3216f727db55dc87d5889c790e4c760683fee/data?verify=1694071334-H3wNn5tn6QRo%2BisJZbghFrQPfkU%3D”: net/http: TLS handshake timeout
k8s 1.26中启用了CRI sandbox(pause) image的配置支持 https://blog.csdn.net/Haskei/article/details/128474534
集群安装成功,coredns创建失败,镜像rancher/mirrored-pause:3.6拉取失败
3.离线安装
preparing server: bootstrap data already found and encrypted with different
部署集群用了etcd,token信息、节点信息存在了etcd里,安装失败后要删etcd数据