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配置文件

  1. 输入命令获取默认的kubeadm-config.yaml,然后再做出调整;
kubeadm config print init-defaults > kubeadm-config.yaml
  1. 输入命令对默认文件的内容进行覆盖,调整后的kubeadm-config.yaml文件的内容如下:

提示:请根据注释和实际情况的需要,对配置中必要的内容进行调整;

cat > kubeadm-config.yaml <<EOF
apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef       #设置token
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 192.168.0.105
  bindPort: 6443
nodeRegistration:
  criSocket: /var/run/dockershim.sock
  name: k8s01-m1          #设置节点名字hosts
  taints:
  - effect: NoSchedule
    key: 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.1
  extraArgs:
    authorization-mode: Node,RBAC
  timeoutForControlPlane: 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.local
  podSubnet: 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
  1. 拉取配置文件中设置的相关镜像
kubeadm config images pull --config kubeadm-config.yaml

可以执行命令查看拉取的镜像:docker images
如图:

在这里插入图片描述

注意:以上步骤,所有的节点都需要执行;

  1. 接下来只需要执行命令初始化集群即可
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

初始化成功可以看到以下内容:

在这里插入图片描述

  1. 然后根据日志提示进行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网络插件

  1. 主节点安装网络插件即可,其他节点在加入集群后会自动拉取网络插件相关的po;

首先需要在官网下载一个配置文件,执行命令如下:

curl https://docs.projectcalico.org/archive/v3.18/manifests/calico.yaml -O

注意:我这里是安装的3.18版本,calico官网有说明,calico可适用的对应k8s版本,请根据实际版本情况选择版本安装;

在这里插入图片描述

  1. 文件下载好后,我们需要对calico.yaml文件进行修改;

搜索CALICO_IPV4POOL_CIDR关键字,其中name和value参数默认是注释掉的,将注释放开,并将value的值改成与kubeadm-config.yam中的networking -- podSubnet中的ip一致;即与集群设置的pod的虚拟网段ip保持一致

注意:修改时注意格式;

 - name: CALICO_IPV4POOL_CIDR
      value: "10.244.0.0/16" 	#与集群设置的pod的虚拟网段ip保持一致;

如图我这里的pod网段是10.244.0.0

在这里插入图片描述

calico.yaml中同样改为对应的

在这里插入图片描述

  1. 然后执行命令进行部署
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节点加入集群

  1. 创建证书存放目录并上传证书

在需要加入集群的新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/
  1. 验证网络是否畅通

在新节点上验证负载均衡的网络地址是否畅通;

#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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java后端环境配置

因为现在升学了&#xff0c;以前本来想毕业干java的&#xff0c;很多java的环境配置早就忘掉了&#xff08;比如mysql maven jdk idea&#xff09;&#xff0c;想写个博客记录下来&#xff0c;以后方便自己快速搭建环境 JAVA后端开发配置 环境配置jdkideamavenMySQLnavicate17…

FPC补强板和软硬结合板有什么区别?

柔性印刷电路&#xff08;Flexible Printed Circuit&#xff0c;简称FPC&#xff09;在现代电子设备中有广泛应用&#xff0c;其设计和应用形式多种多样。在FPC的应用中&#xff0c;补强板和软硬结合板是两种常见的增强结构形式&#xff0c;它们在结构、功能和应用方面存在显著…

windows openssl编译x64版libssl.lib,编译x64版本libcurl.lib,支持https,vs2015编译器

不要纠结&#xff0c;直接选择用perl编译&#xff01; 告诫想要用弄成vs编译版的&#xff0c;暂时先别给自己增加麻烦 告诫&#xff0c;以下执行的每一步&#xff0c;都不要纠结 先安装环境 nasm 64位版本 https://www.nasm.us/pub/nasm/releasebuilds/2.16.01/win64/nasm-…

【sizeof】各种数据类型所占空间大小

各种数据类型所占空间大小 文章目录 前言 一、sizeof是什么&#xff1f; 二、使用步骤 1.整型 2.字符型 总结 前言 ‌sizeof在C语言中是一个运算符&#xff0c;用于获取数据类型或变量在内存中所占的字节数。‌它可以在编译时计算数据类型或变量的内存大小&#xff0c;而…

gitlab仓库API操作

几年没接触gitlab了&#xff0c;新版本装完以后代码提交到默认的main分支&#xff0c;master不再是主分支 项目有几十个仓库&#xff0c;研发提交代码后仓库地址和之前的发生了变化 先修改Group的默认分支&#xff0c;不会影响已存在的项目 修改gitlab全局的默认分支 这就引…

Gitlab服务管理和仓库项目权限管理

Gitlab服务管理 gitlab-ctl start # 启动所有 gitlab 组件&#xff1b; gitlab-ctl stop # 停止所有 gitlab 组件&#xff1b; gitlab-ctl restart # 重启所有 gitlab 组件&#xff1b; gitlab-ctl status …

睡岗和玩手机数据集,4653张原始图,支持YOLO,VOC XML,COCO JSON格式的标注

睡岗和玩手机数据集&#xff0c;4653张原始图&#xff0c;支持YOLO&#xff0c;VOC XML&#xff0c;COCO JSON格式的标注 数据集分割 训练组70&#xff05; 3257图片 有效集20&#xff05; 931图片 测试集10&#xff05; 465图片 预处理 没有采用任何预处…

vue响应式数据-修改对象的属性值,视图不更新

如图&#xff1a; 一&#xff1a;问题是&#xff1a; 我把数据处理后能console.log()打印出来&#xff0c;但是页面的内容不能同步的更新渲染&#xff1b; 二&#xff1a;要求&#xff1a; 在数组循环列表里面&#xff0c;我点击单个的item按钮时&#xff0c;需要实时加载进度…

HuLa——一款基于 Tauri+Vue3 构建的桌面即时通讯应用

文章目录 一、HuLa简介二、技术栈介绍三、安装运行四、界面体验五、开源地址 一、HuLa简介 HuLa 是一个基于 Tauri、Vite 5、Vue 3 和 TypeScript 构建的即时通讯系统。它利用了 Tauri 的跨平台能力和 Vue 3 的响应式设计&#xff0c;结合了 TypeScript 的类型安全特性和 Vite…

云计算HCIP-OpenStack03

书接上回&#xff1a; 云计算HCIP-OpenStack02-CSDN博客 10.KeyStone keystone-Openstack&#xff0c;IAM服务&#xff08;统一身份认证&#xff09;-云服务 建议先去了解Hadoop&#xff08;大数据生态系统&#xff09;中的kerberos&#xff08;LDAPkerberos的鉴权机制&#xf…

【YOLO 项目实战】(10)YOLO8 环境配置与推理检测

欢迎关注『youcans动手学模型』系列 本专栏内容和资源同步到 GitHub/youcans 【YOLO 项目实战】&#xff08;1&#xff09;YOLO5 环境配置与检测 【YOLO 项目实战】&#xff08;10&#xff09;YOLO8 环境配置与推理检测 【YOLO5 项目实战】&#xff08;10&#xff09;YOLO8 环境…

Vue 3: 通过图片链接获取图片颜色,间接设置背景颜色

在现代Web开发中&#xff0c;动态获取和处理图像数据是一个常见的需求。例如&#xff0c;你可能希望自动提取一张图片的主色调&#xff0c;以便根据这些颜色进行UI主题调整或其他视觉效果的处理。本文将介绍如何在Vue 3项目中&#xff0c;通过一个图片链接获取图片的颜色信息。…

请确保 $(OutDir)、$(TargetName) 和 $(TargetExt) 属性值与 %(Link.OutputFile) 中指定的值匹配

vs版本升级时&#xff0c;编译时会出现上述问题&#xff0c;如原来在2017下编译的程序&#xff0c;后来改用2019&#xff0c;出现上述问题。需要在解决方案-通用属性-调试源文件下变更相应设置。

FFmpeg第一话:FFmpeg 简介与环境搭建

FFmpeg 探索之旅 一、FFmpeg 简介与环境搭建 二、FFmpeg 解码详解 第一话&#xff1a;FFmpeg 简介与环境搭建 FFmpeg 探索之旅一、前言二、FFmpeg 是什么&#xff1f;三、简单介绍其历史背景四、为什么用 C学习 FFmpeg&#xff1f;&#xff08;一&#xff09;高性能优势&#…

【功能安全】软件安全架构

目录 01 软件安全架构介绍 02 软件架构设计模板 03 软件架构设计示例 01 软件安全架构介绍

OpenLinkSaas 2025年1月开发计划

先来看看OpenLinkSaas的大目标 在OpenLinkSaas的产品目标中&#xff0c;让开发人员更加方便的使用云资源是目标之一。通过各大云厂商的API&#xff0c;来可视化云上基础设施的数据是远远不够的。我们准备在2025年1月份增加方便管理和运营研发场景下服务器的能力。 这部分的功能…

【Verilog】实验九 存储器设计与IP调用

一、实验目的 1. 掌握单端口RAM和ROM原理和设计方法。 2. 掌握单端口RAM和ROM的IP生成和调用方法。 2. 掌握ModelSim和VIVADO工具软件。 3. 掌握基本的测试代码编写和FPGA开发板使用方法。 二、实验环境 1. 装有ModelSim和VIVADO的计算机。 2. Sword实验系统。 三、实验…

元力音乐 1.2.2 | 完全免费无广告的无损音乐听歌下载工具

元力音乐是一款音乐听歌和下载工具&#xff0c;提供完全免费且没有任何广告弹窗的用户体验。内置两条线路&#xff0c;用户可以无限次下载无损音质音乐。作者承诺永久免费并长期维护此应用。此外&#xff0c;它还支持导入歌单功能&#xff0c;让用户能够轻松管理和下载喜爱的音…

生产环境迁移——harbor篇

这些年环境迁移干了很多&#xff0c;但是没有总结&#xff0c;想想还是记录一下&#xff0c;以前是下属做&#xff0c;自己统筹就行&#xff0c;现在就剩下孤家寡人了&#xff0c;只好都自己做。还是完整记录下来&#xff0c;供有缘人参考。其实我也是搭了个草台班子。 1 安装…

电脑问题4[非华为电脑安装华为电脑管家华为荣耀手机多屏协助]

非华为电脑安装华为电脑管家华为荣耀手机多屏协助 我是荣耀手机之前一直用的是window的"连接手机"功能,电脑控制手机还蛮好用,但是又不能够没有好的电脑控制手机的功能,后来想了想看了看,竟然安装了华为电脑关键,竟然可以顺利连接上荣耀手机,发现还蛮好用! 本文引用…