欢迎来到 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 正常工作,您必须禁用交换分区。2.2 确保每个节点上 MAC 地址和 product_uuid 的唯一性
- 使用命令 ip link 或 ifconfig -a 来获取网络接口的 MAC 地址
- 使用 sudo cat /sys/class/dmi/id/product_uuid 命令来校验 product_uuid
一般来讲,硬件设备拥有唯一的地址,但是有些虚拟机的地址可能会重复。Kubernetes 使用 MAC 地址和 product_uuid 来确定集群中的唯一节点。如果这些值在每个节点上不唯一,可能会导致安装失败 。安装失败:
https://github.com/kubernetes/kubeadm/issues/312.3 检查网络适配器
如果您有一个以上的网络适配器,同时您的 Kubernetes 组件通过默认路由不可达,我们建议您预先添加 IP 路由规则,这样 Kubernetes 集群就可以通过对应的适配器完成连接。2.4 允许 iptables 检查桥接流量
确保 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
更多细节请查阅网络插件需求页面。网络插件需求:
https://kubernetes.io/zh/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/#network-plugin-requirements2.5 检查所需端口
控制平面节点
工作节点
以上是 NodePort 服务的默认端口范围。NodePort 服务:
https://kubernetes.io/zh/docs/concepts/services-networking/service/
使用 * 标记的任意端口号都可以被覆盖,所以您需要保证定制的端口是开放的。
虽然控制平面节点已经包含了 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
如果需要永久关闭,请编辑 /etc/sysconfig/selinux 将 SELINUX=enforcing 替换为 SELINUX=disabled。2.9 安装 runtime
为了在 Pod 中运行容器,Kubernetes 使用容器运行时(Container Runtime)。
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
参阅容器运行时以了解更多信息。容器运行时:
https://kubernetes.io/zh/docs/setup/production-environment/container-runtimes/
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 还设有双周会议,通常会涉及功能、问题的讨论。如:上次周会的 Action Item 进展追踪,是否有新的发布和 Pending 事项,新增 CVE 和 Issue 讨论,以及其他议题。有任何想法、需求、试用反馈,都可以积极在 github、slack 周会上,提问和提出建议。会议时间是周三下午 2 点,相关讨论的议题会提前添加到周会链接。周会链接:
https://meeting.tencent.com/dm/PkJXF9cytpxe合抱之木生于毫末,KLTS 方兴未艾,期待秉持自由软件精神、怀揣浪漫主义思想的广大开发者们,加入 KLTS 开源社区,一起贡献,共同培育,结出硕果。
- 加入 KLTS 社区https://github.com/klts-io/
- 加入 KLTS Slack 聊天频道https://join.slack.com/t/klts/shared_invite/zt-za36806q-6PWB_yRRY9rP78orYVonig
当然您也可以加入DaoCloud道客云原生交流群参与交流互动:
DaoCloud 公司简介:「DaoCloud 道客」云原生领域的创新领导者,成立于 2014 年底,拥有自主知识产权的核心技术,致力于打造开放的云原生操作系统为企业数字化转型赋能。产品能力覆盖云原生应用的开发、交付、运维全生命周期,并提供公有云、私有云和混合云等多种交付方式。成立迄今,公司已在金融科技、先进制造、智能汽车、零售网点、城市大脑等多个领域深耕,标杆客户包括交通银行、浦发银行、上汽集团、东风汽车、海尔集团、屈臣氏、金拱门(麦当劳)等。目前,公司已完成了 D 轮超亿元融资,被誉为科技领域准独角兽企业。公司在北京、武汉、深圳、成都设立多家分公司及合资公司,总员工人数超过 350 人,是上海市高新技术企业、上海市“科技小巨人”企业和上海市“专精特新”企业,并入选了科创板培育企业名单。