欢迎来到 KLTS新手攻略,相信通过上期《DaoCloud道客云原生开源项目KLTS,全称为Kubernetes Long Term Support,为Kubernetes早期版本提供长期免费的维护支持》,大家对 KLTS 开源项目都有了一定的了解。
KLTS 持续维护 Kubernetes 早期发行的版本,定期修复常见的 CVE 漏洞和 bug,可直接用于生产,完全开源,包含了完整的 Kubernetes 运行时环境及其依赖。KLTS 提供的维护版本,可以说是 Kubernetes 早期发行的版本的超级补丁。
如何使用?如何可持续的发展和培育 KLTS ?接下来就为大家详细介绍一下, KLTS 现有成果、如何使用、RoadMap 规划,以及如何参与到 KLTS 项目贡献中来。
01 KLTS 现有成果
KLTS 已经正式上线一段时间了,目前 KLTS 的维护者包括 Kubernetes 社区 Member、Reviewer、Approver 各个层级的成员,涉及到社区中多个 SIG。与之对应的,他们也是 KLTS 的 Member、Reviewer、Maintainer。
目前,在 KLTS 成员的辛勤维护下,目前 KLTS 发布了 Its.1 的版本内容,支持 Kubernetes 1.10~1.19 的 10 个版本。修复了一些中高优先级的 CVE 和严重问题,还提供了国内镜像加速,支持 CentOS 和 Ubuntu 操作系统,定制了一键安装脚本,目前共计 76 个 PRs。
如下图所示,V1.16.15 是 Kubernetes 的社区发行版本号,而 lts.0 是 KLTS 提供的补丁版本号。
一键安装即可尽享 KLTS 维护版本
为方便广大开发者进入社区后,更便捷安装和使用版本内容,KLTS 提供了以下脚本,可以自动完成安装流程,一键到位,方便快捷。
wget https://github.com/klts-io/klts/raw/main/install.sh
chmod +x install.sh
./install.sh
Usage: ./install.sh [OPTIONS] -h, --help : Display this help and exit --kubernetes-container-registry=ghcr.io/klts-io/kubernetes-lts : Kubernetes container registry --kubernetes-version=1.18.20-lts.1 : Kubernetes version to install --containerd-version=1.3.10-lts.0 : Containerd version to install --runc-version=1.0.2-lts.0 : Runc version to install --kubernetes-rpm-source=https://github.com/klts-io/kubernetes-lts/raw/rpm-v1.18.20-lts.0 : Kubernetes RPM source --containerd-rpm-source=https://github.com/klts-io/containerd-lts/raw/rpm-v1.3.10-lts.0 : Containerd RPM source --runc-rpm-source=https://github.com/klts-io/runc-lts/raw/rpm-v1.0.2-lts.0 : Runc RPM source --others-rpm-source=https://github.com/klts-io/others/raw/rpm : Other RPM source --kubernetes-deb-source=https://github.com/klts-io/kubernetes-lts/raw/deb-v1.18.20-lts.0 : Kubernetes DEB source --containerd-deb-source=https://github.com/klts-io/containerd-lts/raw/deb-v1.3.10-lts.0 : Containerd DEB source --runc-deb-source=https://github.com/klts-io/runc-lts/raw/deb-v1.0.2-lts.0 : Runc DEB source --others-deb-source=https://github.com/klts-io/others/raw/deb : Other DEB source --focus=enable-iptables-discover-bridged-traffic,disable-swap,disable-selinux,setup-source,install-kubernetes,install-containerd,install-runc,install-crictl,install-cniplugins,setup-crictl-config,setup-containerd-cni-config,setup-kubelet-config,setup-containerd-config,daemon-reload,start-containerd,status-containerd,enable-containerd,start-kubelet,status-kubelet,enable-kubelet,images-pull,control-plane-init,status-nodes,show-join-command : Focus on specific step --skip='' : Skip on specific step
此外,对于想要了解安装细节和准备工作流程的伙伴,我们准备了下列比较详细的安装介绍。
2.1 准备工作
1) 准备一台兼容的 Linux 主机。Kubernetes 项目为基于 Debian 和 Red Hat 的 Linux 发行版以及一些不提供包管理器的发行版提供通用的指令。
2) 每台主机至少 2 GB 或更多的内存 (如果内存太少将影响应用的运行) CPU 2 核或更多
3) 集群中所有主机的网络连通 (公网和内网)
4) 单个节点上不能有重复的主机名、MAC 地址或 product_uuid,请参阅确保每个节点上 MAC 地址和 product_uuid 的唯一性。
5) 开启主机上的某些端口,请参阅检查所需端口。
6) 禁用交换分区。为了保证 kubelet 正常工作,您必须禁用交换分区。
- 使用命令 ip link 或 ifconfig -a 来获取网络接口的 MAC 地址
- 使用 sudo cat /sys/class/dmi/id/product_uuid 命令来校验 product_uuid
如果您有一个以上的网络适配器,同时您的 Kubernetes 组件通过默认路由不可达,我们建议您预先添加 IP 路由规则,这样 Kubernetes 集群就可以通过对应的适配器完成连接。
确保 br_netfilter 模块被加载。这一操作可以通过运行 lsmod | grep br_netfilter 来完成。若要显式加载该模块,可执行命令 sudo modprobe br_netfilter。
为了让您的 Linux 节点上的 iptables 能够正确地查看桥接流量,您需要确保在 sysctl 配置中将 net.bridge.bridge-nf-call-iptables 设置为 1。例如:
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf br_netfilter EOF cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sudo sysctl --system
控制平面节点
工作节点
使用 * 标记的任意端口号都可以被覆盖,所以您需要保证定制的端口是开放的。
虽然控制平面节点已经包含了 etcd 的端口,您也可以使用自定义的外部 etcd 集群,或指定自定义端口。
您使用的 Pod 网络插件 (见下) 也可能需要某些特定端口开启。由于各个 Pod 网络插件都有所不同,请参阅相应文档中的端口要求。
2.6 设置节点名字
命令的语法格式如下:
hostnamectl set-hostname your-new-host-name
echo "127.0.0.1 $(hostname)" >> /etc/hosts
echo "::1 $(hostname)" >> /etc/hosts
2.7 关闭 Swap
执行以下命令关闭 Swap:
swapoff -a
如果需要永久关闭,请编辑 /etc/fstab 文件,将 swap 的挂载路径改为注释。
2.8 关闭 Selinux
执行以下命令关闭 Selinux:
setenforce 0
如果需要永久关闭,请编辑
Linux 节点
默认情况下,Kubernetes 使用容器运行时接口 (Container Runtime Interface,CRI) 来与您所选择的容器运行时交互。
如果您不指定运行时,则 kubeadm 会自动尝试检测系统上已经安装的运行时,方法是扫描一组众所周知的 Unix 域套接字。
下面的表格列举了一些容器运行时及其对应的套接字路径:
如果同时检测到 Docker 和 Containerd,则优先选择 Docker。这是必然的,即使您仅安装了 Docker,因为 Docker 18.09 附带了 Containerd,所以两者都是可以检测到的。如果检测到其他两个或多个运行时,则 kubeadm 输出错误信息并退出。
kubelet 通过内置的 dockershim CRI 实现与 Docker 集成。
其它操作系统
默认情况下, kubeadm 使用 docker 作为容器运行时。kubelet 通过内置的 dockershim CRI 实现与 Docker 集成。
Docker
基于 Red Hat 的发行版
执行以下命令安装基于 Red Hat 发行版的 Docker:
yum install docker
基于 Debian 的发行版
执行以下命令安装基于 Debian 发行版的 Docker:
apt-get install docker.io
Containerd
Containerd 官方默认只提供 amd64 架构的下载包,如果您采用的是其他基础架构,可以从 Docker 官方仓库安装 containerd.io 软件包。在安装 Docker 引擎中找到为各自的 Linux 发行版设置 Docker 存储库和安装 containerd.io 软件包的有关说明。
也可以使用以下源代码构建:
VERSION=1.5.4 wget -c https://github.com/containerd/containerd/releases/download/v${VERSION}/containerd-${VERSION}-linux-amd64.tar.gz tar xvf containerd-${VERSION}-linux-amd64.tar.gz -C /usr/local/ mkdir /etc/containerd/ && containerd config default > /etc/containerd/config.toml wget -c -O /etc/systemd/system/containerd.service https://raw.githubusercontent.com/containerd/containerd/main/containerd.service systemctl start containerd && systemctl enable containerd
03 KLTS 未来可期
目前 KLTS 发布的一个版本中,已经包含了比较重要的 kernel memory 泄漏问题的规避方案和几个高危漏洞的修复。为了方便用户使用,一键安装脚本已经可以支持最常用的 Centos 和 Ubuntu ,另外就是国内镜像加速做了配置。
KLTS 的路线图制定主要针对目前项目的完整性、易用性和信创场景的覆盖,此外还会结合各种不同的升级的需求,包括跨版本平滑升级等。
完整性方面,我们计划加入 containerd 和 runc 的 LTS 项目,这是因为 containerd 的版本和 kuberentes 版本也有兼容性问题,比如 containerd 1.4 版本需要 kuberentes 版本 1.19+。具体可以参考 https://github.com/klts-io/containerd-lts 的项目介绍,会有这方面的介绍。
易用性层面,我们客户有很多是离线环境,因此离线环境安装升级是急需要解决的问题。
信创层面,随着国内信创云的不断发展,这个方向的需求也是越来越多,未来我们也会逐步完成对各类信创场景的支持。
此外,KLTS 也会根据新用户的需求,更新和完善我们的路线图。
快来参与贡献 KLTS 的明天就在你手中
加入社区的伙伴,在首页点击项目 (project) 的一栏,页面底部任务看板可以查看现有的任务内容。通过参与 PR Review/问题回复/文档,维护 CI 健康,使用新版本并给出反馈等,参与社区贡献。
- 加入 KLTS 社区https://github.com/klts-io/
- 加入 KLTS Slack 聊天频道https://join.slack.com/t/klts/shared_invite/zt-za36806q-6PWB_yRRY9rP78orYVonig
当然您也可以加入我们的企业微信交流群和我们交流互动:

(企业)微信扫码加入
未经允许不得转载:DaoCloud道客博客 » 【K8s超级补丁】KLTS新手攻略:KLTS现有成果、如何使用、RoadMap规划,如何参与到KLTS项目贡献中来?