K3S-轻量化的k8s

2021/03/30

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

2.三个master节点部署etcd集群

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

1.三个节点部署etcd集群

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上执行:
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 

四、集群tls证书更新

k3s集群证书到期时间检查、更新证书

k3s server:
for i in `ls /var/lib/rancher/k3s/server/tls/*.crt`; do echo $i; openssl x509 -enddate -noout -in $i; done

重启k3s更新证书:
systemctl restart k3s

k3s agent:
for i in `ls /var/lib/rancher/k3s/agent/*.crt`; do echo $i; openssl x509 -enddate -noout -in $i; done

重启k3s agent更新证书:
systemctl restart k3s-agent

项目tls-secret证书

问题记录

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


4.ERROR: readlink /data/docker/overlay2/l: invalid argument
failed to register layer: lstat /data/docker/overlay2/abe193eb81b0620d8ba479...

原因分析:镜像历史层文件损毁或失效 解决方案:docker stop xx后 docker system prune -a清理历史层依赖文件,重新运行会重新拉取各层文件


5.node主机重启,导致node状态NotReady

a.尝试重启k3s-agent:systemctl restart k3s-agent b.排查节点状态日志journalctl -f -u k3s-agent: “Version from runtime service failed” err=”rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing dial unix ///run/containerd/containerd.sock: connect: no such file or directory"”

  • 正常安装k3s-agent时, 会自动安装k3s版本的containerd-k3s1,主机重启时containerd-k3s1会随k3s-agent一起自启
  • 如果是先自行安装containerd,然后安装k3s-agent指定已安装containerd,这时containerd是独立服务,主机重启时containerd不会随k3s-agent一起自启 可以将containerd.service加入开机自启 systemctl enable containerd.service,防止主机重启k3s-agent自启时找不到containerd容器运行环境 c.尝试问题节点重启containerd服务: systemctl start containerd.service
    d.排查节点nodeName和hostname是否一致,有时主机重启会导致hostname重置,注册master失败或重复注册导致异常 ```

6.在指定已安装containerd作为容器运行时的系统上安装k3s,你可以使用以下命令:

curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--container-runtime-endpoint none --container-runtime containerd" sh -
这个命令会下载k3s的安装脚本并执行它。INSTALL_K3S_EXEC环境变量指定了k3s的安装参数,其中:
--container-runtime-endpoint none 告诉k3s不要使用自带的容器运行时,而是使用系统上已有的containerd。
--container-runtime containerd 指定使用containerd作为容器运行时。
执行上述命令后,k3s将被安装并配置为使用containerd

Post Directory

扫码关注公众号:暂无公众号
发送 290992
即可立即永久解锁本站全部文章