基于Ubuntu22.04部署生产级K8S集群v1.27(规划和核心组件部署篇)

本文档主要根据k8s官网文档和其插件的官网文档,参考部分他人优秀经验,在实际操作中逐渐完成,比较详尽,适合在境内学习者和实践者参考。
实操环境基于VMware Workstation 17 pro,采用ubuntu22.04操作系统(有时也提到rhel系列系统),采用kubeadm1.27.4(部分地方提到了1.28)部署和初始化集群,采用IPVS做为负载均衡和网络转发,采用containerd1.7.3做为容器运行时,选择calico作为k8s的Pod网络组件,采用插件Dashboard做为Web控制台界面,采用Prometheus+Grafana做为监控组件。
文档涉及面广,虽反复斟酌,也难免疏漏甚至错误,欢迎指正。

[基于Ubuntu22.04部署生产级K8S集群v1.27]系列文档(陆续发布中…)
基于Ubuntu22.04部署生产级K8S集群v1.27(规划和核心组件部署篇)
基于Ubuntu22.04部署生产级K8S集群v1.27(包管理器Helm3)
基于Ubuntu22.04部署生产级K8S集群v1.27(网络模型和Calico)
基于Ubuntu22.04部署生产级K8S集群v1.27(集群管理kubectl)
基于Ubuntu22.04部署生产级K8S集群v1.27(日志架构)
基于Ubuntu22.04部署生产级K8S集群v1.27(集群弹性-Master高可用和etcd集群)
基于Ubuntu22.04部署生产级K8S集群v1.27(服务发现CoreDNS)
基于Ubuntu22.04部署生产级K8S集群v1.27(仪表板和Dashboard)
基于Ubuntu22.04部署生产级K8S集群v1.27(持久卷)
基于Ubuntu22.04部署生产级K8S集群v1.27(集群监控Prometheus&Grafana)

Kubernetes生产级集群规划和核心组件部署

一些k8s概念未在本文阐述,官方文档比较详尽,但初学者仍然可能比较迷茫,第三方文档也比较多,主要就靠积累了,将来也准备单独整理一篇通俗易懂的文档。
如果k8s各组件、概念还不清,建议先花上20~40小时以上来熟悉,否则直接部署可能更加云里雾里,徒增烦恼。
本文提到的“生产级”,是相对于开发环境来讲的,可以直接应用于生产环境,考虑到信息安全,规划虽基于生产环境,实操部分则参照模拟环境的部署写作。

参考文档

重点参考官方文档:https://kubernetes.io/zh-cn/docs/home/
也参考了一些其它文档,在本文中均有出处体现。
可以说网上每三方任何文档都无法超越官方文档,本文也只能朝着“尽快规划和部署生产级集群”的目标,大量引用官方文档的内容或地址,做一些更简易直接的说明,官方的部分阐述实在精要,缺之恐误事,就尽量引用,稍加整理,同时提供部署的实践经验。

在哪里使用k8s

你可以下载 Kubernetes,在本地机器、云或你自己的数据中心上部署 Kubernetes 集群。
诸如 kube-apiserver 或 kube-proxy 等某些 Kubernetes 组件可以在集群中以容器镜像部署。
建议尽可能将 Kubernetes 组件作为容器镜像运行,并且让 Kubernetes 管理这些组件。 但是运行容器的相关组件 —— 尤其是 kubelet,不在此列。

如果你不想自己管理 Kubernetes 集群,则可以选择托管服务,包括经过认证的平台。

对于你自己管理的集群,官方支持的用于部署 Kubernetes 的工具是 kubeadm。
安装kubeadm参考:https://kubernetes.io/zh-cn/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

本文部署基于ubuntu22.04,尽可能将 Kubernetes 组件作为容器镜像运行。

生产环境考量

官文:https://kubernetes.io/zh-cn/docs/setup/production-environment/
官文中提到了以下,这里略
可用性
规模
安全性与访问管理

大规模集群的注意事项

官文:https://kubernetes.io/zh-cn/docs/setup/best-practices/cluster-large/
部分关键信息如下:
Kubernetes v1.28 单个集群支持的最大节点数为 5,000。 更具体地说,Kubernetes 旨在适应满足以下所有标准的配置:
每个节点的 Pod 数量不超过 110
节点数不超过 5,000
Pod 总数不超过 150,000
容器总数不超过 300,000

其它:
增加云资源的配额。
应该在每个故障区域至少应运行一个控制平面实例,以提供容错能力。 Kubernetes 节点不会自动将流量引向相同故障区域中的控制平面端点。 但是,你的云供应商可能有自己的机制来执行此操作。
为了提高大规模集群的性能,你可以将事件对象存储在单独的专用 etcd 实例中。
对插件资源设置CPU和内存等限制。插件的默认限制通常基于从中小规模 Kubernetes 集群上运行每个插件的经验收集的数据。 插件在大规模集群上运行时,某些资源消耗常常比其默认限制更多。 如果在不调整这些值的情况下部署了大规模集群,则插件可能会不断被杀死,因为它们不断达到内存限制。 或者,插件可能会运行,但由于 CPU 时间片的限制而导致性能不佳。

集群资源规划和网络规划

参考:https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/plan-cidr-blocks-for-an-ack-cluster-1 阿里云ACK Kubernetes集群网络规划
一般性业务小于100个节点
Terway Pod独占模式或IPVlan模式的IP分配示例:
专有网络网段 192.168.0.0/16
虚拟交换机网段 192.168.0.0/19
Pod虚拟交换机网段 192.168.32.0/19 最大可分配Pod地址数 8192
Service CIDR网段 172.21.0.0/20 最大可分配Service地址数:4094

可以看出,Service的地址数一般是小于Pod地址数的,而kubeadm.yaml中serviceSubnet默认prefixlen是/12,1048576个,百万多,对一般性业务来讲,这个数字太大了。

参考https://blog.csdn.net/QW_sunny/article/details/122495071 关于PodSubnet在kubeadm初始化时的配置
podSubnet至少要包含14个IP地址。

实践中,参考官文“大规模集群的注意事项”、“阿里云ACK Kubernetes集群网络规划”,以及默认配置,考虑到pod数量,应当做好规划,大部分场景下,单个集群的node数量可规划在100个左右,pod数量1万个,但为了便于记忆,可以直接规划为65536个,prefixlen为/16。
配置可像下面这样:
networking:
podSubnet: 172.28.0.0/16
serviceSubnet: 172.29.0.0/16

Calico插件在初始化时,注意calico.yaml中的CALICO_IPV4POOL_CIDR配置,应该和kubeadm.yaml中podSubnet配置一样

安装集群核心组件

宿主机系统必要的初始配置

这里讲的宿主机是运行k8s集群的操作系统主机,即可以是vmware虚拟机、物理机或云主机,我们这里是vmware虚拟机ubuntu22.04。

宿主机配置

官文中提到了安装kubeadm最低配置是2核2G。
控制平面2核4G,至少1台,
每台节点2核2G,共2台,
每台宿主机磁盘推荐40G以上。

ubuntu安装过程

省略
安装过程建议不要分配swap,它会造成kubelet不能正常工作,即使分配了,也必须删除或关闭。
做好必要的初始配置和安全基线加固(未来将准备一篇专门的文档来做这部分工作)

更换国内镜像源

vi /etc/apt/sources.list

# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://mirrors.aliyun.com/ubuntu jammy main restricted
# deb-src http://mirrors.aliyun.com/ubuntu jammy main restricted

## Major bug fix updates produced after the final release of the
## distribution.
deb http://mirrors.aliyun.com/ubuntu jammy-updates main restricted
# deb-src http://mirrors.aliyun.com/ubuntu jammy-updates main restricted

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team. Also, please note that software in universe WILL NOT receive any
## review or updates from the Ubuntu security team.
deb http://mirrors.aliyun.com/ubuntu jammy universe
# deb-src http://mirrors.aliyun.com/ubuntu jammy universe
deb http://mirrors.aliyun.com/ubuntu jammy-updates universe
# deb-src http://mirrors.aliyun.com/ubuntu jammy-updates universe

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team, and may not be under a free licence. Please satisfy yourself as to
## your rights to use the software. Also, please note that software in
## multiverse WILL NOT receive any review or updates from the Ubuntu
## security team.
deb http://mirrors.aliyun.com/ubuntu jammy multiverse
# deb-src http://mirrors.aliyun.com/ubuntu jammy multiverse
deb http://mirrors.aliyun.com/ubuntu jammy-updates multiverse
# deb-src http://mirrors.aliyun.com/ubuntu jammy-updates multiverse

## N.B. software from this repository may not have been tested as
## extensively as that contained in the main release, although it includes
## newer versions of some applications which may provide useful features.
## Also, please note that software in backports WILL NOT receive any review
## or updates from the Ubuntu security team.
deb http://mirrors.aliyun.com/ubuntu jammy-backports main restricted universe multiverse
# deb-src http://mirrors.aliyun.com/ubuntu jammy-backports main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu jammy-security main restricted
# deb-src http://mirrors.aliyun.com/ubuntu jammy-security main restricted
deb http://mirrors.aliyun.com/ubuntu jammy-security universe
# deb-src http://mirrors.aliyun.com/ubuntu jammy-security universe
deb http://mirrors.aliyun.com/ubuntu jammy-security multiverse
# deb-src http://mirrors.aliyun.com/ubuntu jammy-security multiverse

sudo apt update

常用软件包安装

sudo apt-get install vim wget netstat curl inetutils-ping telnet lrzsz

暂时关闭防火墙

sudo ufw status # ufw(如果安装了)查看当前的防火墙状态:inactive状态是防火墙关闭状态 active是开启状态。
sudo ufw enable | disable # 启动、关闭防火墙

禁用SELINUX

sudo setenforce 0
sudo vim /etc/selinux/config
修改如下
SELINUX=disabled

时区设置和时间同步

sudo cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
配置好时间同步,vmware虚拟机建议安装好VMwareTools,可设置好时间和宿主机同步,即使宿主机休眠也不影响虚拟机的时间。
其它场景可配置好NTP时间同步
时间不同步会出error

设备主机名

在/etc/hosts中添加下列解析,例:
192.168.130.88 k8smaster.loadbalancer.local
192.168.130.88 k8smaster01
192.168.130.89 k8snode001
192.168.130.90 k8snode002
部署集群前配置好主机名是必要的,部署好之后再来改就很麻烦了。
修改系统主机名,执行下面的命令,包括会自动修改/etc/hostname中的内容,以控制平面的为例:
hostname&

  • 31
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
要在Ubuntu 22.04上搭建Kubernetes集群,可以使用kubeadm工具进行快速部署。首先,需要准备好虚拟机,并确保每个节点的系统配置满足最低要求,如CPU核心不低于2个,RAM不低于2G。\[1\] 在开始之前,需要进行环境配置。可以使用以下命令来安装Docker和containerd作为容器运行时: ``` $ sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/docker.gpg ``` 接下来,可以使用kubeadm工具来部署Kubernetes集群。具体的安装步骤和配置文件可以在文章末尾的网盘中找到。\[1\] 请注意,从Kubernetes 1.24版本开始,Dockershim已从Kubernetes项目中移除,因此我们将使用containerd作为容器运行时。\[3\] 希望这些信息对您有帮助,如果您需要更详细的步骤和配置,请参考提供的引用内容。 #### 引用[.reference_title] - *1* [Ubuntu22.04部署Kubernetes集群(亲测可用)](https://blog.csdn.net/qq_43347021/article/details/129815123)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Ubuntu22.04部署K8S1.27.2版本集群](https://blog.csdn.net/sgj584520/article/details/130954363)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Ubuntu22.04搭建k8s集群,看这一就够啦!](https://blog.csdn.net/m0_43445928/article/details/130524917)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沉思的归零者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值