配置Kubernetes从节点与集群Calico网络

在上一篇博客中,我们成功安装并初始化了Kubernetes的主节点,并且看到了集群初始化成功的标志信息。接下来,我们将继续安装从节点(worker nodes),以构建一个完整的Kubernetes集群。

步骤回顾

在上一步中,主节点初始化成功后,我们得到了加入控制平面节点和从节点的命令。这些命令包含了集群的加入端点(cluster-endpoint)、token以及CA证书哈希值。请确保这些信息在加入新节点时是有效的,因为token有默认的有效期(通常是24小时)。如果token过期,你需要在主节点上生成新的token。

# token过期时执行
kubeadm token create --print-join-command

查看node状态

kubectl get nodes

在这里插入图片描述
Kubernetes集群中的k8s-master节点处于NotReady状态。这时需要安装网络插件并且Pod网络已经就绪。本篇文章主要介绍从节点安装Kubernetes和集群配置网络插件。

步骤详解

步骤1: 设置主机名和hosts文件

#查看本机hostname
hostname 

若有重复的主机名使用下面命令进行修改
假设我们有以下三台机器:

  • k8s-master: 172.16.196.23
  • k8s-node1: 172.16.196.24
  • k8s-node2: 172.16.196.25
    在每台机器上修改主机名,并更新/etc/hosts文件,使各节点可以相互通信。
# 在k8s-master上执行
hostnamectl set-hostname k8s-master
# 在k8s-node1上执行
hostnamectl set-hostname k8s-node1
# 在k8s-node2上执行
hostnamectl set-hostname k8s-node2

步骤2: 关闭swap分区

Kubernetes不支持开启swap分区的系统。关闭swap并注释掉/etc/fstab中的swap条目以防止重启后swap重新启用。

swapoff -a  # 临时禁用
sed -ri 's/.*swap.*/#&/' /etc/fstab  # 永久禁用

步骤3: 添加Kubernetes仓库

创建一个名为 kubernetes.repo 的文件在 /etc/yum.repos.d/ 目录下,并添加官方的Kubernetes YUM仓库。

cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/rpm/repodata/repomd.xml.key
EOF

步骤4: 安装Kubernetes三大件:kubeadm、kubelet 和 kubectl

在每台机器上安装以下的软件包:

sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
sudo systemctl enable --now kubelet

如果要安装以前的版本,可以直接指定版本号,例如

sudo yum install -y kubelet-1.20.9 kubeadm-1.20.9 kubectl-1.20.9 --disableexcludes=kubernetes
  • kubeadm:用来初始化集群的指令。
  • kubelet:在集群中的每个节点上用来启动 Pod 和容器等。
  • kubectl:用来与集群通信的命令行工具。
    具体描述,本篇不再赘述,需要了解请阅读上篇文章

步骤5: 添加master域名映射

#查看master节点ip地址
ifconfig
#所有机器添加master域名映射
echo "10.211.55.5  cluster-endpoint" >> /etc/hosts

测试通信

# 执行看是否能联通
ping cluster-endpoint

在这里插入图片描述
在这里插入图片描述

步骤6: 启用 IPv4 数据包转发

默认情况下,Linux 内核不允许 IPv4 数据包在接口之间路由。 大多数 Kubernetes 集群网络实现都会更改此设置(如果需要),但有些人可能希望管理员为他们执行此操作。 (有些人可能还期望设置其他 sysctl 参数、加载内核模块等;请参阅你的特定网络实施的文档。)

手动启用 IPv4 数据包转发:

# 设置所需的 sysctl 参数,参数在重新启动后保持不变
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
EOF# 应用 sysctl 参数而不重新启动
sudo sysctl --system

使用以下命令验证 net.ipv4.ip_forward 是否设置为 1:

sysctl net.ipv4.ip_forward

在这里插入图片描述

步骤7: 安装containerd

在这里插入图片描述

  1. 添加 containerd 的官方仓库
    首先,确保你有一个稳定的软件包源。你可以使用阿里云的镜像源来加快下载速度:

    wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
    #查看yum源中containerd软件
    yum list | grep containerd
    

    在这里插入图片描述

  2. 安装 containerd
    使用 yum 安装 containerd:

    sudo yum install -y containerd.io
    
  3. 启用并启动 containerd 服务
    安装完成后,启用并启动 containerd 服务:

    sudo systemctl enable --now containerd
    
  4. 检查 containerd 状态
    确认 containerd 已成功启动并正在运行:

    sudo systemctl status containerd
    

在这里插入图片描述
5. 配置 containerd
重新生成一个默认配置,修改下面4处:

# sudo mkdir -p /etc/containerd
sudo containerd config default | sudo tee /etc/containerd/config.toml
# sudo mkdir -p /etc/containerd
vim /etc/containerd/config.toml
  • SystemdCgroup:此配置改为 SystemdCgroup = true
  • disabled_plugins:此配置不能存在cri,如果用此配置,需要删除。
  • sandbox_image 改为 "registry.aliyuncs.com/google_containers/pause:3.6
  • plugins."io.containerd.grpc.v1.cri".registry.mirrors: 添加镜像加速地址,国内的一些镜像地址,包括阿里云、腾讯云以及各大高校提供的镜像源,已经全部关闭。可用镜像地址需要自行搜索,找到两篇文章:2025年1月国内可用Docker镜像源汇总、DockerHub 国内加速镜像列表,里面镜像地址是否可用自行测试!
[plugins."io.containerd.grpc.v1.cri".registry.mirrors][plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]endpoint = ["https://1ms.run"][plugins."io.containerd.grpc.v1.cri".registry.mirrors."registry.k8s.io"]endpoint = ["https://1ms.run"]

修改完成,重启containerd

sudo systemctl restart containerd

在这里插入图片描述
SystemdCgroup:此配置改为 SystemdCgroup = true
 disabled_plugins:此配置不能存在cri

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

步骤8: 主节点安装 Calico

下载 Calico 的 YAML 文件
根据k8s的版本,找到支持的Calico,calico归档版本在这里插入图片描述
使用以下命令下载 Calico 的 YAML 配置文件:

wget https://raw.githubusercontent.com/projectcalico/calico/v3.29.1/manifests/calico.yaml

或者,你也可以下载 Calico 的 Operator 和自定义资源 YAML 文件,以便进行更精细的控制:

wget https://raw.githubusercontent.com/projectcalico/calico/v3.29.1/manifests/tigera-operator.yaml
wget https://raw.githubusercontent.com/projectcalico/calico/v3.29.1/manifests/custom-resources.yaml

部署 Calico

使用 kubectl 命令将下载的 YAML 文件应用到 Kubernetes 集群中:

kubectl apply -f calico.yaml

或者,如果你下载了 Operator 和自定义资源文件,则分别应用它们:

kubectl create -f tigera-operator.yaml
kubectl apply -f custom-resources.yaml

验证 Calico 是否成功安装并正常运行

使用以下命令检查 Calico 组件的部署情况:

kubectl get pods --all-namespaces

可能出现下载失败

Warning  Failed     20s (x2 over 77s)    kubelet            
Failed to pull image "docker.io/calico/cni:v3.25.0": rpc error: code = DeadlineExceeded 
desc = failed to pull and unpack image "docker.io/calico/cni:v3.25.0": 
failed to resolve reference "docker.io/calico/cni:v3.25.0": 
failed to do request: Head "https://registry-1.docker.io/v2/calico/cni/manifests/v3.25.0": 
dial tcp 202.160.129.37:443: i/o timeout

在这里插入图片描述

将文件中的镜像地址改为可以访问到的镜像地址,实例中的镜像地址随时可能失效,可以参考上篇文章里的镜像地址进行配置。

sed -i 's|docker.io/calico|docker.1ms.run/calico|g' calico.yaml
kubectl delete -f calico.yaml
kubectl apply -f calico.yaml

你应该能看到 Calico 相关的 Pod(如 calico-nodecalico-kube-controllers 等)都处于 Running 状态。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

步骤9:加入从节点

现在,让我们把工作节点加入到Kubernetes集群中。请记住,在每个工作节点上,你需要以root权限运行下面的命令。如果你之前没有保存下来,可以通过在主节点上运行下面命令来获取最新的kubeadm join命令。

kubeadm token create --print-join-command

以下是加入命令的例子,请用实际的集群端点、token和discovery-token-ca-cert-hash替换示例中的值:

kubeadm join cluster-endpoint:6443 --token emo01i.1k9co48bf6o5end8 \--discovery-token-ca-cert-hash sha256:dbad3d1197b173b2c94ebd6e2f39f38cdbe3fd9fe61f0be8c81256df0768e567

在执行此命令后,工作节点将下载必要的组件并加入集群。一旦所有的工作节点都加入了集群,你应该能够在主节点上看到它们的状态。你可以使用kubectl get nodes命令来检查集群中的节点列表及其状态。

在这里插入图片描述

开启端口和防火墙设置

理论上需要开这些端口:
Master 节点

sudo firewall-cmd --zone=public --permanent --add-port=6443/tcp
sudo firewall-cmd --zone=public --permanent --add-port=2379-2380/tcp
sudo firewall-cmd --zone=public --permanent --add-port=10250/tcp
sudo firewall-cmd --zone=public --permanent --add-port=10251/tcp
sudo firewall-cmd --zone=public --permanent --add-port=10252/tcp
sudo firewall-cmd --reload

Worker 节点

sudo firewall-cmd --zone=public --permanent --add-port=10250/tcp
sudo firewall-cmd --zone=public --permanent --add-port=30000-32767/tcp
sudo firewall-cmd --reload

不过对于测试环境来说,为了以防未知的坑,还是直接关闭掉防火墙比较直接。在部署Dashboard的时候,Pod的状态一直为CrashLoopBackOff或Error。
查看log日志得到了如下的错误信息:

Error from server: Get "https://10.211.55.9:10250/containerLogs/kubernetes-dashboard/kubernetes-dashboard-api-cbbb6644d-szvc5/kubernetes-dashboard-api": dial tcp 10.211.55.9:10250: connect: no route to hos

通过kubectl get svc -n=kube-system 命令查询service,发现kube-dns还需要开启53/UDP,53/TCP,9153/TCP这三个端口。
kubernetes-dashboard也需要443端口。
综上所述,将本步骤修改为:

systemctl stop firewalld
systemctl disable firewalld

Kubernetes 集群安装总结

前置步骤(主从节点均需执行)
  1. 节点设置主机名和hosts文件
    • Node的名字会与主机名相同。
    • 主机的hosts文件必须添加映射,kubeadm join时会用到这些映射。
  2. 关闭swap分区
    • 禁用swap分区,以确保Kubernetes集群的稳定运行。
  3. 启用IPv4数据包转发
    • 启用IPv4转发功能,以便Kubernetes节点之间的网络通信。
  4. 安装并配置containerd
    • 安装容器运行时containerd。
    • 需要修改配置4处。
  5. 添加Kubernetes仓库
    • 将Kubernetes仓库添加到/etc/yum.repos.d/目录下。
    • 由于原始yum源中没有Kubernetes安装包,外网Kubernetes仓库可能无法访问,因此直接添加阿里云的Kubernetes仓库。
  6. 安装三大件
    • 在主从节点上安装Kubernetes的核心组件(kubelet、kubeadm、kubectl)。
主节点专属步骤
  1. 初始化主节点
    • 使用kubeadm init命令初始化Kubernetes主节点。
    • 初始化过程中会生成kubeadm join命令,用于从节点加入集群。
  2. 安装网络插件Calico
    • 安装Calico网络插件,以提供Kubernetes集群的Pod间网络通信。
从节点专属步骤
  1. 从节点加入集群
    • 使用在主节点初始化时生成的kubeadm join命令,将从节点加入Kubernetes集群。

至此我们已经成功搭建完kubernetes集群,下一篇将介绍如何搭建Dashboard。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/67343.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue2:实现上下两栏布局,可拖拽改变高度

要拖拽改变两栏高度,那么总高度要确定,在拖拽的过程中,实时根据光标位置计算两栏高度,所以: 1、最外层有一个box, 高度是屏幕高度screenHeight; 2、该值在页面挂载时获取初始值(window.innerHeight-100),这里减少100,因为窗口上面有工具栏; 3、监听窗口resize事件…

【数据库】MySQL数据库SQL语句汇总

目录 1.SQL 通用语法 2.SQL 分类 2.1.DDL 2.2.DML 2.3.DQL 2.4.DCL 3.DDL 3.1.数据库操作 3.1.1.查询 3.1.2.创建 3.1.3.删除 3.1.4.使用 3.2.表操作 3.2.1.查询 3.2.2.创建 3.2.3.数据类型 3.2.3.1.数值类型 3.2.3.2.字符串类型 3.2.3.3.日期时间类型 3.2…

做跨境电商服务器用什么宽带好?

做跨境电商服务器用什么宽带好&#xff1f;做跨境电商服务器&#xff0c;推荐选择光纤宽带或高性能的5G网络。光纤宽带高速稳定&#xff0c;适合处理大量数据和实时交互&#xff1b;5G网络则提供超高速移动连接&#xff0c;适合需要灵活性和移动性的卖家。具体选择需根据业务规…

光谱相机的光谱分辨率可以达到多少?

多光谱相机 多光谱相机的光谱分辨率相对较低&#xff0c;波段数一般在 10 到 20 个左右&#xff0c;光谱分辨率通常在几十纳米到几百纳米之间&#xff0c;如常见的多光谱相机光谱分辨率为 100nm 左右。 高光谱相机 一般的高光谱相机光谱分辨率可达 2.5nm 到 10nm 左右&#x…

Python毕业设计选题:基于django+vue的智能租房系统的设计与实现

开发语言&#xff1a;Python框架&#xff1a;djangoPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 租客注册 添加租客界面 租客管理 房屋类型管理 房屋信息管理 系统管理 摘要 本文首…

pytest全局配置文件pytest.ini

pytest.ini 改变 pytest 的默认行为&#xff0c;一般放在项目的根目录&#xff0c;不能包含中文符号。不管是主函数模式运行&#xff0c;命令行模式运行&#xff0c;都会去读取这个全局配置文件。 [pytest] ;配置命令行参数&#xff0c;用空格进行分隔。addopts 中的选项会被命…

[Qualcomm]Qualcomm MDM9607 SDK代码下载操作说明

登录Qualcomm CreatePoing Qualcomm CreatePointhttps://createpoint.qti.qua

用C++实现一个基于模板的观察者设计模式

观察者模式 定义 观察者模式(Observer Pattern)是一种行为型设计模式,用于定义对象间的一对多依赖关系,使得当一个对象状态发生变化时,其所有依赖它的对象都会收到通知并自动更新。 核心概念 角色定义 Subject(被观察者): 持有观察者列表,维护观察者的注册和移除。 …

PE文件:节表-添加节

在所有节的空白区域都不够存放我们想要添加的数据时&#xff0c;这个时候可以通过添加节来扩展我们可操作的空间去存储新的数据&#xff08;如导入表、代码或资源&#xff09;。 过程步骤 1.判断是否有足够的空间添加节表 PE文件的节表紧跟在PE头之后&#xff0c;每个节表的…

【开源宝藏】Jeepay VUE和React构建WebSocket通用模板

WebSocket 服务实现&#xff1a;Spring Boot 示例 在现代应用程序中&#xff0c;WebSocket 是实现双向实时通信的重要技术。本文将介绍如何使用 Spring Boot 创建一个简单的 WebSocket 服务&#xff0c;并提供相关的代码示例。 1. WebSocket 简介 WebSocket 是一种在单个 TC…

图论的起点——七桥问题

普瑞格尔河从古堡哥尼斯堡市中心流过&#xff0c;河中有小岛两座&#xff0c;筑有7座古桥&#xff0c;哥尼斯堡人杰地灵&#xff0c;市民普遍爱好数学。1736年&#xff0c;该市一名市民向大数学家Euler提出如下的所谓“七桥问题”&#xff1a; 从家里出发&#xff0c;7座桥每桥…

Fabric区块链网络搭建:保姆级图文详解

目录 前言1、项目环境部署1.1 基础开发环境1.2 网络部署 2、后台环境2.1、环境配置2.2、运行springboot项目 3、PC端3.1、安装依赖3.2、修改区块链网络连接地址3.3、启动项目 前言 亲爱的家人们&#xff0c;创作很不容易&#xff0c;若对您有帮助的话&#xff0c;请点赞收藏加…

02JavaWeb——JavaScript-Vue(项目实战)

一、JavaScript html完成了架子&#xff0c;css做了美化&#xff0c;但是网页是死的&#xff0c;我们需要给他注入灵魂&#xff0c;所以接下来我们需要学习 JavaScript&#xff0c;这门语言会让我们的页面能够和用户进行交互。 1.1 介绍 通过JS/js效果演示提供资料进行效果演…

MySQL程序之:连接到服务器的命令选项

本节介绍大多数MySQL客户端程序支持的选项&#xff0c;这些选项控制客户端程序如何建立与服务器的连接、连接是否加密以及连接是否压缩。这些选项可以在命令行或选项文件中给出。 连接建立的命令选项 本节介绍控制客户端程序如何建立与服务器的连接的选项。 表6.4连接建立选…

Windows 蓝牙驱动开发-蓝牙设备栈

蓝牙设备栈 蓝牙驱动程序堆栈包含 Microsoft 为蓝牙协议提供支持的核心部分。 有了这个堆栈&#xff0c;已启用蓝牙的设备可以彼此定位并建立连接。 在此类连接中&#xff0c;设备可以通过各种应用程序交换数据并彼此交互。 下图显示了蓝牙驱动程序堆栈中的模块&#xff0c;以…

GPU 硬件原理架构(一)

这张费米管线架构图能看懂了&#xff0c;整个GPU的架构基本就熟了。市面上有很多GPU厂家&#xff0c;他们产品的架构各不相同&#xff0c;但是核心往往差不多&#xff0c;整明白一了个基本上就可以触类旁通了。下面这张图信息量很大&#xff0c;可以结合博客GPU 英伟达GPU架构回…

CSS布局与响应式

学习链接 Grid网格布局 前端五大主流网页布局 flex布局看这一篇就够了 grid布局看这一篇就够了 用六个案例学会响应式布局 伸缩盒响应式页面布局实战 实现响应式布局的五种方式 - csdn 如何完成响应式布局&#xff0c;有几种方法&#xff1f;看这个就够了 响应式布局总…

mysql 如何快速删除表数据

在数据库管理中, 经常会遇到需要删除大量数据的情况. 对于 MySQL 数据库而言, 如何高效快速地删除数据是一个值得深入探讨的问题. 本文将详细介绍几种在 MySQL 中快速删除数据的方法及相关注意事项. delete 语句 delete 语句可以删除符合条件的指定数据, 但是在删除大量数据…

大疆最新款无人机发布,可照亮百米之外目标

近日&#xff0c;DJI 大疆发布全新小型智能多光旗舰 DJI Matrice 4 系列&#xff0c;包含 Matrice 4T 和 Matrice 4E 两款机型。DJI Matrice 4E 价格为27888 元起&#xff0c;DJI Matrice 4T价格为38888元起。 图片来源&#xff1a;大疆官网 DJI Matrice 4E DJI Matrice 4T D…

Haskell语言的网络编程

Haskell语言的网络编程 引言 随着互联网技术的迅猛发展&#xff0c;网络编程已经成为计算机科学和软件开发领域的重要组成部分。网络编程可以让我们构建各种各样的应用程序&#xff0c;从简单的网页到复杂的分布式系统。而在众多编程语言中&#xff0c;Haskell以其独特的函数…