kubeadm安装K8s高可用集群之集群初始化及master/node节点加入calico网络插件安装
系列文章目录
1.kubeadm安装K8s高可用集群之基础环境配置
2.kubeadm安装K8s集群之高可用组件keepalived+nginx及kubeadm部署
3.kubeadm安装K8s高可用集群之集群初始化及master/node节点加入集群calico网络插件安装
kubeadm安装K8s高可用集群之集群初始化及master/node节点加入calico网络插件安装
- 1.设置集群kubeadm-config配置文件
- 2.安装calico网络插件
- 3.其他master节点加入集群
- 4.node节点加入命令
1.设置集群kubeadm-config配置文件
- 输入命令获取默认的kubeadm-config.yaml,然后再做出调整;
kubeadm config print init-defaults > kubeadm-config.yaml
- 输入命令对默认文件的内容进行覆盖,调整后的kubeadm-config.yaml文件的内容如下:
提示:请根据注释和实际情况的需要,对配置中必要的内容进行调整;
cat > kubeadm-config.yaml <<EOF
apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:- system:bootstrappers:kubeadm:default-node-tokentoken: abcdef.0123456789abcdef #设置tokenttl: 24h0m0susages:- signing- authentication
kind: InitConfiguration
localAPIEndpoint:advertiseAddress: 192.168.0.105bindPort: 6443
nodeRegistration:criSocket: /var/run/dockershim.sockname: k8s01-m1 #设置节点名字hoststaints:- effect: NoSchedulekey: node-role.kubernetes.io/master
---
apiServer:certSANs:- k8s01-m1 #设置master节点1的hosts,请根据实际情况调整;- k8s02-m2 #设置master节点2的hosts,请根据实际情况调整;- 192.168.0.105 #设置master节点1的ip,请根据实际情况调整;- 192.168.0.106 #设置master节点2的ip,,请根据实际情况调整;- 192.168.200.18 #设置vip地址,请根据实际情况调整;- 127.0.0.1extraArgs:authorization-mode: Node,RBACtimeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controlPlaneEndpoint: "192.168.200.18:16443" #设置vip地址,即设置的虚拟ip+nginx监听的端口;
controllerManager: {}
dns:type: CoreDNS
etcd:local:dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers #修改为阿里云仓库;
kind: ClusterConfiguration
kubernetesVersion: v1.20.8 #设置需要安装的kubernetes版本;
networking:dnsDomain: cluster.localpodSubnet: 10.244.0.0/16 #设置pod的网段;serviceSubnet: 10.96.0.0/12 #server的网段;
scheduler: {}
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs #开启ipvs模式
---
EOF
可以选择将修改的配置加载为新的配置,执行以下命令,执行命令后会生成一个new.yaml文件;
kubeadm config migrate --old-config kubeadm-config.yaml --new-config new.yaml
- 拉取配置文件中设置的相关镜像
kubeadm config images pull --config kubeadm-config.yaml
可以执行命令查看拉取的镜像:docker images
如图:
注意:以上步骤,所有的节点都需要执行;
- 接下来只需要执行命令初始化集群即可
kubeadm init --config kubeadm-config.yaml --upload-certs
注意:
1.只有主节点master1执行kubeadm init
初始化;
2.其他master、node节点无需执行,待主节点初始化完成后kubeadm join
命令即可;
提示:如果集群初始化失败,可以执行命令,进行重置调整后再次初始化
kubeadm reset -f
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
初始化成功可以看到以下内容:
- 然后根据日志提示进行kubectl进行授权执行以下命令,并将下方的这些内容记录一下后面节点加入集群时需要用到;
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
有时候可能会出现权限、环境变量的问题:
权限问题给文件赋予权限即可:chmod 755 $HOME/.kube/config
;
环境变量问题,配置以下环境变量即可:export KUBECONFIG=$HOME/.kube/config
;
可以输入命令查看po的状态,因为没安装网络插件的原因,有的po是起不来的;
kubectl get po -n kube-system
2.安装calico网络插件
- 主节点安装网络插件即可,其他节点在加入集群后会自动拉取网络插件相关的po;
首先需要在官网下载一个配置文件,执行命令如下:
curl https://docs.projectcalico.org/archive/v3.18/manifests/calico.yaml -O
注意:我这里是安装的3.18版本,calico官网有说明,calico可适用的对应k8s版本,请根据实际版本情况选择版本安装;
- 文件下载好后,我们需要对calico.yaml文件进行修改;
搜索CALICO_IPV4POOL_CIDR
关键字,其中name和value参数默认是注释掉的,将注释放开,并将value的值改成与kubeadm-config.yam
中的networking -- podSubnet
中的ip一致;即与集群设置的pod的虚拟网段ip保持一致;
注意:修改时注意格式;
- name: CALICO_IPV4POOL_CIDRvalue: "10.244.0.0/16" #与集群设置的pod的虚拟网段ip保持一致;
如图我这里的pod网段是10.244.0.0
calico.yaml中同样改为对应的
- 然后执行命令进行部署
kubectl apply -f calico.yaml
如图部署成功!
注意:网络不好镜像可能会拉不下来
可以输入命令查看po的名称:kubectl get po -n kube-system
根据名字查看状态不正确的po报错的原因如:kubectl describe pod -n kube-system calico-node-q6ksq
如果是因为拉取失败的话可以尝试手动拉取对应镜像如:docker pull docker.io/calico/cni:v3.18.6
如图:查找calico对应的node名称
查看报错原因:
3.其他master节点加入集群
- 创建证书存放目录并上传证书
在需要加入集群的新master节点中创建证书存放目录;
mkdir -p /etc/kubernetes/pki/etcd && mkdir -p ~/.kube/
然后把主节点master1节点的证书拷贝到master2上;
scp -r /etc/kubernetes/pki/ca.* root@k8s02-m2:/etc/kubernetes/pki/
scp -r /etc/kubernetes/pki/sa.* root@k8s02-m2:/etc/kubernetes/pki/
scp -r /etc/kubernetes/pki/front-proxy-ca.* root@k8s02-m2:/etc/kubernetes/pki
scp -r /etc/kubernetes/pki/etcd/ca.* root@k8s02-m2:/etc/kubernetes/pki/etcd
scp -r /etc/kubernetes/admin.conf root@k8s02-m2:/etc/kubernetes/
- 验证网络是否畅通
在新节点上验证负载均衡的网络地址是否畅通;
#ip端口修改为实际的ip端口
curl -k https://192.168.200.18:16443
如果网络畅通则可以直接执行第3步,输入命令执行进行加入命令,如果网络连接不通,则需要进行排查;如我这里由于前面设置的 vip地址controlPlaneEndpoint: "192.168.200.18:16443"
与主机不在同一个网络,除了主节点外,其他节点无法直接访问,需要添加路由才行;
临时添加路由:(不推荐,此方法机器重启后就会失效,适合用来临时测试)
首先查看节点是否有vip对应的路由
ip route
不存在则加一条
#192.168.200.0/24,".0/24"后面几位不变前面3位和你的vip地址相同即可
#192.168.0.1是主机实际的默认网关
#ens32是主机、网卡名
ip route add 192.168.200.0/24 dev 192.168.0.1 dev ens32
刷新缓存后,再次查询是否加入成功
ip neigh flush all
ip route
成功添加后,测试一下网络是否正常,正常则可执行第3步加入集群;
#ip端口修改为实际的ip端口
curl -k https://192.168.200.18:16443
永久添加路由:(推荐使用,机器重启后不会失效)
编辑/etc/rc.local文件并添加内容
vim /etc/rc.local
在文件中插入以下内容
#192.168.200.0/24,".0/24"后面几位不变前面3位和你的vip地址相同即可
#192.168.0.1是主机实际的默认网关
#ens32是主机、网卡名
ip route add 192.168.200.0/24 dev 192.168.0.1 dev ens32
给文件添加执行权限,并设置为开机自启,后启动服务;
chmod +x /etc/rc.d/rc.local
systemctl enable rc-local
systemctl start rc-local
将机器重启验证路由是否自动添加了
reboot
#清除缓存
ip neigh flush all
#查看路由表中是否添加
ip route
成功添加后,测试一下网络是否正常,正常则可执行第3步加入集群;
#ip端口修改为实际的ip端口
curl -k https://192.168.200.18:16443
-
加入节点命令
-
首先我们在主节点查看是否存在证书;
kubectl get secret -n kube-system | grep kubeadm-certs
如果不存在则执行命令创建一个证书,并获取新的加入集群的命令;
kubeadm init phase upload-certs --upload-certs
获取新的加入集群的命令
kubeadm token create --print-join-command
- 存在证书则,直接执行,主机节点初始化时给出的命令,进行加入集群;
kubeadm join 192.168.200.18:16443 --token abcdef.0123456789abcdef \--discovery-token-ca-cert-hash sha256:b396cdc01129c9e9d03c072d3b65536164a6a1a23a80bed4305452603012ea3b \--control-plane --certificate-key d9742f79ef7a216dbe2aca5ebf34d0dd12a9ad46fe735dcca199984f2e1408b7
注意:加入集群,master和node的命令是一样的都是
kubeadm join
,区别在于--control-plane
参数,有该参数则是,加入master节点,没有则是加入node节点;
成功加入集群后根据日志提示进行kubectl进行授权执行以下命令
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
加入成功!
可以输入命令查看节点是否加入成功;
kubectl get node
通过命令查看新增主机上的po状态是否正常
kubectl get po -n kube-system
查看某po的详情,日志
kubectl describe pod -n kube-system poNmae
4.node节点加入命令
node节点的加入很简单只需要安装了kubeadm、kubectl、kubelet即可执行kubeadm join
命令;同master差不多,唯一的区别是不需要--control-plane
参数;
注意:node节点加入集群不需要
--control-plane
参数
设置的vip不和主机ip在同一个网段时,需要手动添加路由规则,添加方法参考上文的master节点加入;
- node节点加入集群
建议先测以下网络是否畅通;
#ip端口修改为实际的ip端口
curl -k https://192.168.200.18:16443
网络正常,则直接执行命令加入即可;
kubeadm join 192.168.200.18:16443 --token abcdef.0123456789abcdef \--discovery-token-ca-cert-hash sha256:b396cdc01129c9e9d03c072d3b65536164a6a1a23a80bed4305452603012ea3b
- 忘记命令处理方法
如果不记得加入的命令了,可以执行以下命令,获取新的加入集群的命令;
kubeadm token create --print-join-command
- 重置node节点
提示:如果加入集群失败,则可以进行重置;
输入命令重置
kubeadm reset -f
重置完成后,根据日志提示删除以下文件;
rm -rf /etc/cni/net.d
rm -rf $HOME/.kube/config
rm -rf /etc/kubernetes/kubelet.conf
清除iptables中所有规则后重新加载配置,再次输入命令进入加入集群即可;
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
systemctl daemon-reload
相关文章:

kubeadm安装K8s高可用集群之集群初始化及master/node节点加入calico网络插件安装
系列文章目录 1.kubeadm安装K8s高可用集群之基础环境配置 2.kubeadm安装K8s集群之高可用组件keepalivednginx及kubeadm部署 3.kubeadm安装K8s高可用集群之集群初始化及master/node节点加入集群calico网络插件安装 kubeadm安装K8s高可用集群之集群初始化及master/node节点加入ca…...

游戏何如防抓包
游戏抓包是指在游戏中,通过抓包工具捕获和分析游戏客户端与服务器之间传输的封包数据的过程。抓包工具可实现拦截、篡改、重发、丢弃游戏的上下行数据包,市面上常见的抓包工具有WPE、Fiddler和Charles Proxy等。 抓包工具有两种实现方式,一类…...

【LeetCode】每日一题 2024_12_19 找到稳定山的下标(模拟)
前言 每天和你一起刷 LeetCode 每日一题~ 最近力扣的每日一题出的比较烂,难度过山车,导致近期的更新都三天打鱼,两天断更了 . . . LeetCode 启动! 题目:找到稳定山的下标 代码与解题思路 先读题:最重要…...

运维 mysql、redis 、RocketMQ性能排查
MySQL查看数据库连接数 1. SHOW STATUS命令-查询当前的连接数 MySQL 提供了一个 SHOW STATUS 命令,可以用来查看服务器的状态信息,包括当前的连接数。 SHOW STATUS LIKE Threads_connected;这个命令会返回当前连接到服务器的线程数,即当前…...

[SAP ABAP] 将内表数据转换为HTML格式
从sflight数据库表中检索航班信息,并将这些信息转换成HTML格式,然后下载或显示在前端 开发步骤 ① 自定义一个数据类型 ty_sflight 来存储航班信息 ② 声明内表和工作区变量,用于存储表头、字段、HTML内容和航班详细信息以及创建字段目录lt…...

LLM大语言模型私有化部署-使用Dify与Qwen2.5打造专属知识库
背景 Dify 是一款开源的大语言模型(LLM) 应用开发平台。其直观的界面结合了 AI 工作流、 RAG 管道、 Agent 、模型管理、可观测性功能等,让您可以快速从原型到生产。相比 LangChain 这类有着锤子、钉子的工具箱开发库, Dify 提供了更接近生产需要的完整…...
使用C语言连接MySQL
在C语言中连接MySQL数据库,通常需要使用MySQL提供的C API。以下是使用C语言连接MySQL数据库的基本步骤和示例代码: 步骤 1: 安装MySQL C API 首先,确保你的系统上安装了MySQL数据库,并且安装了MySQL C API库。在大多数Linux发行版…...
PyTorch 2.0 以下版本中设置默认使用 GPU 的方法
PyTorch 2.0 以下版本中设置默认使用 GPU 的方法 在 PyTorch 2.0以下版本中,默认情况下仍然是使用 CPU 进行计算,除非明确指定使用 GPU。在 PyTorch 2.0 以下版本中,虽然没有 torch.set_default_device 的便捷方法,但可以通过显式…...

信号槽【QT】
文章目录 对象树字符集信号槽QT坐标系信号与槽connect自定义槽自定义信号disconnect 对象树 #ifndef MYLABEL_H #define MYLABEL_H#include<QLabel> class MyLabel : public QLabel { public:// 构造函数使用带 QWidget* 版本的.// 确保对象能够加到对象树上MyLabel(QWi…...

【UE5 C++课程系列笔记】10——动态单播/多播的基本使用
目录 概念 申明动态委托 一、DECLARE_DYNAMIC_DELEGATE 二、DECLARE_DYNAMIC_MULTICAST_DELEGATE 绑定动态委托 一、BindDynamic 二、AddDynamic 三、RemoveDynamic 执行动态委托 一、Execute 二、ExecuteIfBound 三、IsBound 四、Broadcast 动态单播使用示…...

点击展示大图预览
原文链接在table表格里能够实现,点击里面的图片实现大图预览的效果; 一、先安装viewer — 使用npm安装 npm install v-viewer --save二、在main.js中引入 import Viewer from v-viewer //点击图片大图预览 import viewerjs/dist/viewer.css Vue.use(…...

【C++】分书问题:深入解析、回溯法高级应用与理论拓展
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯题目描述💯思路与算法回溯法理论基础 💯代码实现与解析完整代码代码关键步骤解析 💯时间复杂度与空间复杂度分析💯理论拓展&…...

java开发入门学习五-流程控制
流程控制语句 if, if...else, if..else if..else 与前端相同 略 switch case 与前端不同的是case不能使用表达式,使用表达式会报错 class TestSwitch {public static void main(String[] args) {// switch 表达式只能是特定的数据类型…...
【FFmpeg 教程 一】截图
本章使用 ffmpeg 实现观影中经常会用到的功能,截图。 以下给出两种方式。 课程需具备的基础能力:Python 1. 使用 subprocess 调用 FFmpeg 命令 import subprocess def extract_frame(video_path, output_image_path, timestamp"00:00:05")&qu…...

北邮,成电计算机考研怎么选?
#总结结论: 基于当前提供的24考研复录数据,从报考性价比角度,建议25考研的同学优先选择北邮计算机学硕。主要原因是:相比成电,北邮计算机学硕的目标分数更低,录取率更高,而且北邮的地理位置优势明显。对于…...
深入了解京东API接口:如何高效获取商品详情与SKU信息
在当今数字化时代,电商平台的数据接口成为了连接商家与消费者的桥梁。京东作为国内领先的电商平台,其API接口为开发者提供了丰富的商品信息获取途径。本文将深入探讨如何使用京东API接口高效获取商品详情与SKU信息,并附上简短而实用的代码示例…...
C++常见内存泄漏案例分析以及解决方案
C 常见内存泄漏案例分析以及解决方案 1. 分配与释放不匹配 在动态内存管理中,使用new操作符分配的内存必须通过delete操作符显式释放。若未遵循这一规则,将导致内存泄漏。例如: int *p new int; p new int; // 错误:未释放先…...

[LeetCode-Python版]206. 反转链表(迭代+递归两种解法)
题目 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1] 示例 2: 输入:head [1,2] 输出:[2,1] 示例 3࿱…...

70 mysql 中事务的隔离级别
前言 mysql 隔离级别有四种 未提交读, 已提交读, 可重复度, 序列化执行 然后不同的隔离级别存在不同的问题 未提交读存在 脏读, 不可重复度, 幻觉读 等问题 已提交读存在 不可重复度, 幻觉读 等问题 可重复读存在 幻觉读 等问题 序列化执行 没有以上问题 然后 我们这里…...

C语言二叉树
1.思维导图 树 二叉树 2.将链式队列重新实现一遍 linkqueue.c #include"linkqueue.h" linkqueuePtr create() {linkqueuePtr L(linkqueuePtr)malloc(sizeof(linkqueue));if(NULLL){printf("队列创建失败\n");return NULL;}L->head(nodePtr)malloc(si…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...

九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)
引言 工欲善其事,必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后,我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集,就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...