配置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,一经查实,立即删除!

相关文章

【数据库】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 系统展示 租客注册 添加租客界面 租客管理 房屋类型管理 房屋信息管理 系统管理 摘要 本文首…

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

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

PE文件:节表-添加节

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

图论的起点——七桥问题

普瑞格尔河从古堡哥尼斯堡市中心流过&#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效果演示提供资料进行效果演…

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

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

GPU 硬件原理架构(一)

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

CSS布局与响应式

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

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

近日&#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…

Nmap入门

- 在已有的参数上加上哄骗或是使用文件 nmap -iL data.txt ------- nmap -PS -PA -O -ttl 200 -F -D dcay1, dcay2,dcay3... -vv -P 3306 1.1.1.0/24 -oN data.txtNmap端口的6个状态 open 应用程序正在该端口接收TCP或UDP报文 closed 关闭的端口对于Nmap也是可访问的(它接受…

ubuntu18.04开发环境下samba服务器的搭建

嵌入式linux的发展很快&#xff0c;最近准备在一个新项目上采用新一代的linux核心板&#xff0c;发现linux内核的版本已经更新到5.4以上甚至6.0以上&#xff1b;之前常用的linux内核版本是2.6.4&#xff0c;虽然在某些项目上还能用但是明显跟不上时代的步伐了&#xff0c;所以要…

计算机网络速成

前言&#xff1a;最近在做一些动态的crypto&#xff0c;但是配置总搞不好&#xff0c;正好也有学web的想法&#xff0c;就先学学web再回去做密码&#xff0c;速成视频推荐b站建模老哥 目录 计算机网络概述网络的范围分级电路交换网络&#xff08;电路交换&#xff09;报文交换网…

【React】静态组件动态组件

目录 静态组件动态组件创建一个构造函数(类)使用 class 实现组件**使用 function 实现类组件** 静态组件 函数组件是静态组件&#xff1a; 组件第一次渲染完毕后&#xff0c;无法基于内部的某些操作让组件更新「无法实现自更新」&#xff1b;但是&#xff0c;如果调用它的父组…

Qt/C++ 基于 QGraphicsView 的绘图软件 (附源码下载链接)

基于 Qt 的 QGraphicsView 绘图软件项目进行深入讲解&#xff0c;分析其核心代码与功能实现&#xff0c;帮助开发者理解 QGraphicsView 的用法。 项目概览 该项目实现了一个简单的绘图应用&#xff0c;用户可以在界面中创建和编辑矩形、椭圆、直线、多边形和文本等图形对象。功…

Vue2+OpenLayers给2个标点Feature分别添加独立的点击事件(提供Gitee源码)

前言&#xff1a;之前开发都是将所有的点位存放在一个图层上面&#xff0c;并统一赋予它们相同的点击事件&#xff0c;如果其中某些点的点击事件不一样呢&#xff0c;这种问题如何解决呢&#xff0c;本篇博客就是解决这个通点。 目录 一、案例截图 二、安装OpenLayers库 三…

李宏毅机器学习课程笔记03 | 类神经网络优化技巧

文章目录 类神经网络优化技巧局部最小值local minima 与 鞍点saddle pointSaddle Point 的情况更常见 Tips for training&#xff1a;Batch and MomentumSmall Batch vs Large Batch回顾&#xff1a;optimization优化 找到参数使L最小问题&#xff1a;为什么要用Batch&#xff…