深度解析:Kubernetes 1.28.2集群安装过程中的关键步骤

🐇明明跟你说过:个人主页

🏅个人专栏:《Kubernetes航线图:从船长到K8s掌舵者》 🏅

🔖行路有良友,便是天堂🔖

目录

一、引言

1、Kubernetes简介

2、Kubernetes 1.28版本特性介绍

3、安装前的准备工作

二、环境准备

1、禁用防火墙和SELinux

2、设置时间同步 

3、关闭swap交换分区 

4、修改hosts文件

5、修改机器内核参数

三、安装Docker与containerd

1、配置阿里repo源

2、安装container

3、修改containerd配置文件

4、设置container开机自启动

5、设置服务的端点地址

6、安装docker

7、添加docker镜像加速器

四、安装kubeadm、kubelet和kubectl

1、配置软件源

2、安装kubeadm、kubelet、kubectl

3、设置kubelet开机自启动

五、初始化Master节点

1、上传离线镜像包

2、导入镜像

3、设置容器运行时

4、初始化Master节点

六、添加Work节点 

1、设置容器运行时

2、导入镜像

3、将Work节点加入到集群

4、查看集群状态 

5、为Work节点设置标签

七、安装网络插件calico

1、calico介绍

2、安装calico

3、查看Pod状态

八、总结


一、引言

1、Kubernetes简介

Kubernetes(通常简称为K8s)是一个开源的容器编排平台,最初由Google开发,并于2014年发布为开源项目。它提供了一种自动化容器化应用程序部署、扩展和管理的方法。

Borg 的诞生:
谷歌的工程师们在面对大规模、分布式、可扩展应用的挑战时,创建了 Borg 系统,用于管理和运行谷歌的内部服务和应用。Borg 采用了容器化的思想,将应用程序打包成容器并在集群中运行。

Omega 的演进:
Borg 的经验在谷歌内部得到了积累和总结。在 Borg 的基础上,谷歌发展出了 Omega 系统,这是 Borg 的下一代版本,继续探索分布式系统管理的更高级别的抽象。

Kubernetes 的诞生:
2014年,Google 将 Borg 的一部分经验开源,推出了 Kubernetes 项目。Kubernetes 最初是由 Google、Red Hat、Microsoft 等公司共同推动的,旨在为云原生应用提供一个开源的容器编排和管理平台。可以说,k8s是站在Borg这个巨人的肩膀上而开发出的容器编排管理系统

推出后,Kubernetes 很快得到了开源社区的广泛关注和参与。云服务提供商、软件公司以及大量的开发者纷纷加入到 Kubernetes 的开发和维护中,形成了庞大的开源社区。

2、Kubernetes 1.28版本特性介绍

Kubernetes 1.28版本作为2023年的第二个主要版本更新,引入了一系列重要的新功能和改进。

非正常节点关闭恢复:

  • Kubernetes 1.28版本中,节点非体面关闭(non-graceful shutdown)特性达到GA阶段,意味着kubelet能够更加稳定地检测到节点即将关闭的事件,并确保在节点实际下线前正确、有序地终止节点上的Pod,从而避免数据丢失和资源占用问题。

内置Sidecar容器支持:

  • 此版本增强了对Sidecar容器的内置支持,包括更方便的配置管理、生命周期管理和资源隔离等方面,以更好地支持微服务架构中的辅助容器。

Job优化:

  • 对Kubernetes Job对象进行了优化,涉及到更快的完成状态判定、更灵活的调度策略以及作业清理机制的改进等。

Proxy改进:

  • Kubernetes代理组件(kube-proxy)的功能得到了增强,涉及性能提升、资源利用率改进或新增网络策略特性等。

调度框架优化:

  • 调度框架在Kubernetes 1.28版本中进行了调整,减少了不必要的重试操作,从而提升了整体调度性能,这对于集群规模较大或者工作负载较为复杂的场景尤其重要。

3、安装前的准备工作

准备至少2台服务器,虚拟机或服务器都可以,资源配置如下

※ 安装k8s至少需要2G或以上内存

二、环境准备

1、禁用防火墙和SELinux

在两台机器上都要执行

关闭防火墙并禁止开机自启动

[root@master ~]# systemctl stop firewalld && systemctl disable firewalld

[root@node ~]# systemctl stop firewalld && systemctl disable firewalld 

 关闭SELinux

[root@master ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
[root@master ~]# setenforce 0
[root@master ~]# getenforce
Permissive

[root@node ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
[root@node ~]# setenforce 0
[root@node ~]# getenforce
Permissive 

2、设置时间同步 

[root@master ~]# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 
[root@master ~]# date
Tue Mar 19 14:10:22 CST 2024

[root@node ~]# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 
[root@node ~]# date
Tue Mar 19 14:10:22 CST 2024 

3、关闭swap交换分区 

[root@master ~]# swapoff -a

[root@node ~]# swapoff -a 

4、修改hosts文件

[root@master ~]# vi /etc/hosts

# 添加如下两行内容

192.168.40.110 master
192.16

<think>好的,我现在需要解决用户在Kubernetes中使用自定义镜像仓库拉取镜像时遇到的TLS证书验证失败问题,具体错误是“tls: failed to verify certificate: x509: certificate signed by unknown authority”,使用的Kubernetes版本是v1.28.2。让我先理清这个问题的可能原因和解决方法。 首先,用户提到的是自定义镜像仓库,所以问题很可能与镜像仓库的TLS证书有关。根据引用[1]和[2],证书不被信任或配置错误会导致这类问题。Kubernetes组件(如kubelet)在拉取镜像时,需要信任镜像仓库的CA证书,否则会验证失败。 接下来,我需要考虑如何让Kubernetes节点信任这个自定义仓库的证书。可能的步骤包括将CA证书添加到节点的信任存储中,或者配置Docker/containerd使用该CA。另外,如果是私有仓库,可能需要配置镜像拉取密钥,但这里的问题更可能是证书信任的问题,而不是认证问题。 对于kubeadm config images pull命令,这个命令用于预先拉取控制平面镜像,所以需要确保执行该命令的节点能够正确访问自定义仓库并信任其证书。如果节点没有正确配置信任,就会报错。 可能的解决方案步骤: 1. 将自定义镜像仓库的CA证书添加到每个Kubernetes节点的系统信任证书中,比如在Ubuntu上复制到/usr/local/share/ca-certificates/并运行update-ca-certificates。 2. 配置Docker或containerd信任该CA证书。例如,在Docker中,将CA证书放入/etc/docker/certs.d/<仓库域名>/目录下,并重启Docker服务。 3. 检查kubelet的配置,确保它使用正确的证书。有时候,kubelet可能需要单独配置证书信任链。 4. 如果使用私有仓库,可能需要创建Secret并在Pod定义中引用,但证书信任问题可能需要先解决。 5. 确保自定义仓库的证书是有效的,包括域名匹配和未过期。 另外,根据Kubernetes版本v1.28.2,可能需要检查是否有已知的证书处理变更,但暂时没有相关信息。需要用户确认证书是否正确部署到所有节点,并确保服务重启以应用更改。 用户提到的错误信息与引用[1]中的情况类似,都是证书不被信任,所以解决方案应该围绕添加CA证书到信任链展开。可能需要分步骤指导用户如何添加证书到系统、Docker/containerd,并验证配置是否正确。 最后,生成相关问题,可能涉及其他证书问题、私有仓库配置或kubeadm的其他问题。</think>### 解决方案:Kubernetes自定义镜像仓库TLS证书验证失败问题 #### 问题原因分析 此错误表明Kubernetes节点不信任自定义镜像仓库的TLS证书。主要原因包括: 1. 自定义镜像仓库的证书是自签名的,或未被系统信任的CA签发[^2]; 2. 节点未正确配置信任该证书的CA; 3. Docker/containerd未加载更新后的证书链。 --- ### 解决步骤 #### 1. 将CA证书添加到系统信任链 **操作流程:** - **步骤1**:获取镜像仓库的CA证书文件(通常为`.crt`或`.pem`格式) - **步骤2**:将证书复制到系统证书目录: ```bash # Ubuntu/Debian sudo cp custom-repo-ca.crt /usr/local/share/ca-certificates/ sudo update-ca-certificates # CentOS/RHEL sudo cp custom-repo-ca.crt /etc/pki/ca-trust/source/anchors/ sudo update-ca-trust ``` - **步骤3**:重启容器运行时服务: ```bash # Docker sudo systemctl restart docker # containerd sudo systemctl restart containerd ``` #### 2. 配置Docker/containerd信任证书 **Docker专用配置:** - 创建证书目录并复制证书: ```bash # 格式:/etc/docker/certs.d/<仓库域名>:<端口>/ca.crt sudo mkdir -p /etc/docker/certs.d/custom.repo.com:5000 sudo cp custom-repo-ca.crt /etc/docker/certs.d/custom.repo.com:5000/ca.crt ``` - 重启Docker服务: ```bash sudo systemctl restart docker ``` **containerd配置:** - 修改`/etc/containerd/config.toml`,添加证书路径: ```toml [plugins."io.containerd.grpc.v1.cri".registry.configs] [plugins."io.containerd.grpc.v1.cri".registry.configs."custom.repo.com:5000".tls] ca_file = "/path/to/custom-repo-ca.crt" ``` - 重启containerd: ```bash sudo systemctl restart containerd ``` #### 3. 验证证书加载 - 使用`curl`测试证书是否被信任: ```bash curl https://custom.repo.com:5000/v2/_catalog ``` 若返回镜像列表,则证书信任成功。 #### 4. 针对kubeadm的特殊配置 如果使用`kubeadm config images pull`命令: - 确保执行该命令的节点已完成上述证书配置; - 若仍失败,尝试手动指定镜像仓库地址: ```bash kubeadm config images pull --image-repository=custom.repo.com:5000/k8s ``` --- ### 补充说明 - **证书有效性检查**:使用`openssl x509 -in custom-repo-ca.crt -text -noout`确认证书有效期和域名匹配; - **集群节点同步**:所有节点(包括控制平面和工作节点)均需完成证书配置; - **Kubelet配置**:若kubelet独立配置证书,需检查`/var/lib/kubelet/config.yaml`中的`serverTLSBootstrap`参数[^1]。 ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

明明跟你说过

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

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

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

打赏作者

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

抵扣说明:

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

余额充值