【K8S 二进制部署】部署Kurbernetes的网络组件、高可用集群、相关工具
目录
一、K8S的网络类型:
1、K8S中的通信模式:
1.1、、pod内部之间容器与容器之间的通信
1.2、同一个node节点之内,不同pod之间的通信方式:
1.3、不同node节点上的pod之间是如何通信的呢?
2、网络插件一:flannel
cni的插件:
flannel插件:
1、flannel支持的数据转发方式:
2、UDP的工作模式:
3、UDP工作流程图:
4、vxlan模式:
5、vxlan工作流程:
3、CNI 网络组件:
1、部署 flannel
4、网络插件二:calico插件
1、概念
2、核心组件:
3、calico的工作原理:
4、工作流程
5、ipip模式和BGP模式:
6、部署 Calico:
二、K8S网络总结:
三、部署coredns组件:
1、概念
2、部署 CoreDNS
2.1、node节点操作
四、新master节点部署
1、部署配置
五、部署nginx实现负载均衡
1、部署nginx
2、部署keepalived服务
3、测试
六、基于Web的Kubernetes用户界面--Dashboard
1、部署Dashboard:
一、K8S的网络类型:
1、K8S中的通信模式:
1.1、、pod内部之间容器与容器之间的通信
在同一个pod中的容器时共享资源和网络,使用同一个网络命名空间。可以直接通信
1.2、同一个node节点之内,不同pod之间的通信方式:
每个pod都有一个全局的真实IP地址,同一个node节点之间的不同pod可以直接的使用对方pod的IP地址进行通信。
pod1和pod2是通过docker0的网桥来进行通信的
1.3、不同node节点上的pod之间是如何通信的呢?
2、网络插件一:flannel
cni的插件:
cni是一个标准接口,用于容器运行时调用网络插件,负责设置容器的网络命名空间,IP地址,路由等等参数
flannel插件:
功能:让集群之中不同节点的docker容器,具有整个集群唯一的虚拟IP地址
overlay的网络类型,在底层物理网络的基础之上创建一个逻辑的网络层。是二层+三层的集合。二层是物理网络(数据链路层),三层是逻辑上的网络层
overlay网络也是一种网络虚拟化的技术
1、flannel支持的数据转发方式:
1、UDP模式:默认模式,应用转发,配置简单,但是性能最差
2、vxlan:基于内核转发,也是最常用的网络类型(小集群都用这个模式)
3、hosts-gw:性能最好,但是配置麻烦
2、UDP的工作模式:
基于应用转发,flannel提供路由表,flannel封装数据包,解封装。
UDP是基于应用层,用户态
在每个node节点上都会有一个flannel的虚拟网卡,负责封装和解封装
3、UDP工作流程图:

4、vxlan模式:
使用的是overlay的虚拟隧道通信技术。是二层+三层的模式,和UDP不同。
vxlan:flannel提供路由表,内核封装解封装
用的flannel1.1接口,(ifconfig看到flannel1.1用的就是vxlan)
flannel.1提供vni
5、vxlan工作流程:
类似于三层交换机:

flannel:是每个发向容器的数据包封装,vxlan通过vtep打包数据,然后由内核封装成数据包,再转发到目标node节点,到了目标节点由内核解封装,解封装之后发送到目标pod。
无论是flannel还是udp对性能是有一定影响的(小集群不在乎)
3、CNI 网络组件:
1、部署 flannel
两个node节点操作
在 node01 节点上操作
上传 cni-plugins-linux-amd64-v0.8.6.tgz 和 flannel.tar 到 /opt 目录中
cd /opt/
docker load -i flannel.tarmkdir -p /opt/cni/bin
tar zxvf cni-plugins-linux-amd64-v0.8.6.tgz -C /opt/cni/bin在 master01 节点上操作
#上传 kube-flannel.yml 文件到 /opt/k8s 目录中,部署 CNI 网络
cd /opt/k8s
kubectl apply -f kube-flannel.ymlkubectl get pods -n kube-system

kubectl get nodes

4、网络插件二:calico插件
1、概念
calico:采用直接路由的方式。BGP路由。不需要需改报文,统一直接通过路由表转发,路由表会很复杂,运行维护的要求比较高
BGP模式的特点:交换路由信息的外部网关协议,可以连接不同的node节点,node节点可能不是同一网段,BGP实现可靠的、最佳的、动态的路由选择。自动识别相邻的路由设备。
calico不使用overlay重叠网络,也不需要交换,直接通过虚拟路由实现,每一台虚拟路由都通过BGP转发
2、核心组件:
felix:也是运行在主机上的一个个pod,一个进程。K8S daemonset的方式部署的pod
负责在宿主机上(node节点上)插入路由规则,维护calico所需的网络设备。网络接口管理,网络接口的监听,路由等等
daemonset:daemonset会在每个node节点部署相同的pod,后台的方式进行运行
BGP client:bird BGP的客户端,专门负责杂集群中分发路由规则的信息。每一个节点都会有一个BGP client
BGP协议广播的方式通知其他节点,分发路由的规则,实现网络互通
etcd:保存路由信息,负责整个网络元数据的一致性,保证整个网络状态的一致和准确
3、calico的工作原理:
路由转发,纯路由,没有交换
发现目标设备:BGP协议
通过路由表来维护每个pod之间的通信
一旦创建好pod之后,添加一个设备cali veth pair设备,是一个虚拟网卡设备
虚拟网卡:veth pair是一对设备,是一个虚拟的以太网设备。
一头连接在容器的网络命名空间(名称一般是eth0)
另一台连接在宿主机的网络命名空间 (名称一般是cali)
IP地址分配:veth pair连接容器的部分给容器分配一个IP地址,这个IP地址是一个唯一标识。宿主机也会被veth pair分配一个calico网络的内部IP地址。和其他节点上的容器进行通信
4、工作流程
veth设备,容器发出的IP地址通过veth pair设备到宿主机,宿主机根据路由规则的下一跳地址,发送到网关(目标宿主机节点),数据包到达目标宿主机,veth pair设备,目标宿主机也是根据路由规则,下一跳地址,转发到目标容器。

5、ipip模式和BGP模式:
ipip模式:
会生成一个Tunnel,所有的数据包封装都在Tunnel内部打包。封装的是宿主机ip、容器内部的IP地址
ipip的隧道:在隧道进行数据包的封装
BGP模式:
通过为ip路由表的前缀来实现目标主机的可达性
对比ipip模式,BGP模式没有隧道,BGP模式下,pod的数据包直接通过网卡发送到目的地
6、部署 Calico:
在 master01 节点上操作
上传 calico.yaml 文件到 /opt/k8s 目录中,部署 CNI 网络
cd /opt/k8s
vim calico.yaml#修改里面定义 Pod 的网络(CALICO_IPV4POOL_CIDR),需与前面 kube-controller-manager 配置文件指定的 cluster-cidr 网段一样- name: CALICO_IPV4POOL_CIDRvalue: "10.244.0.0/16" #Calico 默认使用的网段为 192.168.0.0/16

kubectl apply -f calico.yamlkubectl get pods -n kube-system

kubectl get nodes

二、K8S网络总结:
常用的K8S网络类型:
flannel:配置简单,功能简单,基于overlay叠加网络实现,在物理层的网络上再封装一层虚拟的网络层
vxlan是虚拟三层网络,用的最多的模式。是基于vni +ip进行转发,flannel提供路由表,内核封装和解封装。
UDP是默认模式(只管发),一般不用,host配置复杂一般也不用
由于封装和解封装的过程,对数据传输的性能会有影响,没有网络策略配置的能力。
默认网段是:10.244.0.0/16
calico:功能强大,基于路由表进行转发,没有封装和解封装的过程。具备网络策略的配置能力。但是路由表维护起来比较复杂
模式:ipip模式和BGP模式
简单的小集群使用flannel即可
日后有扩容、配置网络策略选择calico
三、部署coredns组件:
1、概念
可以为集群中的service资源创建一个域名和ip进行对应解析的关系
service是对外提供访问的一个地址,现在加入DNS机制之后,可以直接访问它的服务名,
2、部署 CoreDNS
2.1、node节点操作
在所有 node 节点上操作
#上传 coredns.tar 到 /opt 目录中cd /optdocker load -i coredns.tar在 master01 节点上操作#上传 coredns.yaml 文件到 /opt/k8s 目录中,部署 CoreDNScd /opt/k8skubectl apply -f coredns.yamlkubectl get pods -n kube-system

DNS 解析测试
kubectl create clusterrolebinding cluster-system-anonymous --clusterrole=cluster-admin --user=system:anonymous

四、新master节点部署
1、部署配置
要先初始化,将上面的准备操作准备
从 master01 节点上拷贝证书文件、各master组件的配置文件和服务管理文件到 master02 节点
scp -r /opt/etcd/ root@20.0.0.62:/opt/scp -r /opt/kubernetes/ root@20.0.0.62:/optscp -r /root/.kube root@20.0.0.62:/rootscp /usr/lib/systemd/system/{kube-apiserver,kube-controller-manager,kube-scheduler}.service root@20.0.0.62:/usr/lib/systemd/system/
修改配置文件kube-apiserver中的IP
vim /opt/kubernetes/cfg/kube-apiserverKUBE_APISERVER_OPTS="--logtostderr=true \
--v=4 \
--etcd-servers=https://192.168.233.91:2379,https://192.168.233.93:2379,https://192.168.233.94:2379 \
--bind-address=192.168.233.92 \ #修改
--secure-port=6443 \
--advertise-address=192.168.233.92 \ #修改

在 master02 节点上启动各服务并设置开机自启
systemctl start kube-apiserver.servicesystemctl enable kube-apiserver.servicesystemctl start kube-controller-manager.servicesystemctl enable kube-controller-manager.servicesystemctl start kube-scheduler.servicesystemctl enable kube-scheduler.service
查看node节点状态
ln -s /opt/kubernetes/bin/* /usr/local/bin/kubectl get nodeskubectl get nodes -o wide #-o=wide:输出额外信息;对于Pod,将输出Pod所在的Node名

此时在master02节点查到的node节点状态仅是从etcd查询到的信息,
而此时node节点实际上并未与master02节点建立通信连接,因此需要使用一个VIP把node节点与master节点都关联起来
五、部署nginx实现负载均衡
配置load balancer集群双机热备负载均衡(nginx实现负载均衡,keepalived实现双机热备)
1、部署nginx
配置nginx的官方在线yum源,配置本地nginx的yum源
cat > /etc/yum.repos.d/nginx.repo << 'EOF'
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
EOFyum install nginx -y
//修改nginx配置文件,配置四层反向代理负载均衡,指定k8s群集2台master的节点ip和6443端口
stream {log_format main '$remote_addr $upstream_addr - [$time_local] $status $upstream_bytes_sent';access_log /var/log/nginx/k8s-access.log main;upstream k8s-apiserver {server 20.0.0.61:6443;server 20.0.0.62:6443;}server { listen 6443;proxy_pass k8s-apiserver;}} #日志记录格式#$remote_addr: 客户端的 IP 地址。#$upstream_addr: 上游服务器的地址。#[$time_local]: 访问时间,使用本地时间。#$status: HTTP 响应状态码。#$upstream_bytes_sent: 从上游服务器发送到客户端的字节数。

检查配置文件语法
nginx -t 启动nginx服务,查看已监听6443端口
systemctl start nginx
systemctl enable nginx
netstat -natp | grep nginx
2、部署keepalived服务
yum install keepalived -y
修改keepalived配置文件
vim /etc/keepalived/keepalived.conf

创建nginx状态检查脚本
vim /etc/nginx/check_nginx.sh#!/bin/bash
/usr/bin/curl -I http://localhost &>/dev/null
if [ $? -ne 0 ];then
# /etc/init.d/keepalived stopsystemctl stop keepalived
fichmod +x /etc/nginx/check_nginx.sh
启动keepalived服务(一定要先启动了nginx服务,再启动keepalived服务)
systemctl start keepalivedsystemctl enable keepalivedip a
3、测试
主nginx
ip addr

关闭主nginx测试高可用:
VIP漂移到备nginx上

测试故障恢复:
先启动nginx,再启动keepalived
VIP漂移回来了

修改node节点上的bootstrap.kubeconfig,kubelet.kubeconfig配置文件为VIP
cd /opt/kubernetes/cfg/vim bootstrap.kubeconfigserver: https://20.0.0.100:6443vim kubelet.kubeconfigserver: https://20.0.0.100:6443vim kube-proxy.kubeconfigserver: https://20.0.0.100:6443

重启kubelet和kube-proxy服务
systemctl restart kubelet.servicesystemctl restart kube-proxy.service
在 lb01 上查看 nginx 和 node 、 master 节点的连接状态
netstat -natp | grep nginx

在 master01 节点上操作
测试创建pod
kubectl run nginx --image=nginx
查看Pod的状态信息
kubectl get pods

kubectl get pods -o wide

READY为1/1,表示这个Pod中有1个容器
kubectl exec -it nginx bash
这时在master01节点上查看nginx日志
kubectl logs nginx-dbddb74b8-nf9sk
六、基于Web的Kubernetes用户界面--Dashboard
1、部署Dashboard:
仪表盘,kubernetes的可视化界面。在这个可视化界面上,可以对集群进行管理
安装dashhoard
在 master01 节点上操作
#上传 recommended.yaml 文件到 /opt/k8s 目录中
cd /opt/k8skubectl apply -f recommended.yaml创建service account并绑定默认cluster-admin管理员集群角色
kubectl create serviceaccount dashboard-admin -n kube-systemkubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin#获取token值
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

#使用输出的token登录Dashboard
https://20.0.0.63:30001

相关文章:
【K8S 二进制部署】部署Kurbernetes的网络组件、高可用集群、相关工具
目录 一、K8S的网络类型: 1、K8S中的通信模式: 1.1、、pod内部之间容器与容器之间的通信 1.2、同一个node节点之内,不同pod之间的通信方式: 1.3、不同node节点上的pod之间是如何通信的呢? 2、网络插件一ÿ…...
Ubuntu 常用命令之 locate 命令用法介绍
🔥Linux/Ubuntu 常用命令归类整理 locate命令是在Ubuntu系统下用于查找文件或目录的命令。它使用一个预先构建的数据库(通常由updatedb命令创建)来查找文件或目录,因此它的查找速度非常快。 plocate 安装 locate 不是 Ubuntu 系统的原生命令/功能,要想在 Ubuntu 系统中…...
java中file类常用方法举例说明
java中file类常用方法举例说明 当使用 java.io.File 类时,以下是一些常用方法的举例说明: 创建文件或目录: // 使用路径名创建File实例 File file new File("C:\\Users\\UserName\\Documents\\example.txt");// 使用父路径和子路…...
机器学习分类模型
机器学习常见分类模型及特点 机器学习常见分类模型优缺点 决策树模型 决策树(Decision Tree)是一类常见的机器学习方法,可应用于分类与回归任务,这里主要讨论分类决策树。决策树是基于树结构来进行决策的。下图是使用决策树来决定…...
LaTeX符号大全:打破排版的边界
LaTeX符号大全:打破排版的边界 大家好,我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天,让我们一起探索一门极富表现力的排版艺术——LaTeX&…...
vue3-11
后端Java代码 src\router\a6router.ts文件 import { createRouter, createWebHashHistory } from vue-router import { useStorage } from vueuse/core import { Menu, Route } from ../model/Model8080 const clientRoutes [{path: /login,name: login,component: () > …...
【c语言】飞机大战2
1.优化边界问题 之前视频中当使用drawAlpha函数时,是为了去除飞机后面变透明,当时当飞机到达边界的时候,会出现异常退出,这是因为drawAlpha函数不稳定,昨天试过制作掩码图,下载了一个ps,改的话,…...
海康visionmaster-渲染控件:渲染控件加载本地图像的方法
描述 环境:VM4.0.0 VS2015 及以上 现象:渲染控件如何显示本地图像? 解答 思路:在 2.3.1 中,可以通过绑定流程或者模块来显示图像和渲染效果。因此,第一步, 可以使用在 VM 软件平台中给图像源模…...
【SD】一致性角色 - 同一人物 不同姿势 - 2
首先生成4张不同姿势的图片 masterpiece,high quality,(white background:1.6),(simple background:1.4),1gril,solo,black footwear,black hair,brown eyes,closed mouth,full body,glasses,jacket,long hair,long sleeves,lookig at viewer,plaid,plaid skirt,pleated shirt,…...
摩尔线程S80对于软件的支持
摩尔线程对软件的支持 时间:2024年1月1日 显卡型号:MTT S80 主板型号:七彩虹 igame z590 火神 V20 CPU: intel core i5 10400f 内存: 海盗船3600 16*2 存储: 致态1Tb nvme 显卡的驱动是最新的。 游戏 S…...
基数排序 RadixSort
基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数 . 动态演示 :…...
Maven下载和安装的详细教程
文章目录 一、Maven下载和安装1.1 下载 Maven1.2 配置环境变量 参考资料 一、Maven下载和安装 1.1 下载 Maven 打开 Maven 的官方网站Maven – Download Apache Maven,下载最新版本的 Maven 在可选择的版本中,不同版本的区别在于: binary是已经编译过的…...
申请虚拟VISA卡Fomepay教程
fomepay 用下面的注册链接直达 https://gpt.fomepay.com/#/pages/login/index?dS21BA1 或者扫描下面图片的二维码直达注册 注册后尽量随用随充值不建议放大量现金在里面。...
java常见面试题:什么是装箱和拆箱?装箱和拆箱有哪些应用场景
装箱和拆箱是计算机科学中常用的术语,主要用于描述将数据从一种类型转换为另一种类型的操作。 装箱是将值类型转换为引用类型的过程。在装箱时,需要了解编译器内部的操作。首先,在托管堆中分配好内存,分配的内存量是值类型的各个…...
【map】【滑动窗口】【字典树】C++算法:最长合法子字符串的长度
作者推荐 动态规划 多源路径 字典树 LeetCode2977:转换字符串的最小成本 本文涉及的基础知识点 C算法:滑动窗口总结 字典树 map 离线查询 map map可以分成有序(单调)map和无序(哈希)map。还可分成单键map和多键map(允许重复的键)。本文用…...
机器学习部分相关概念
数据集(Data Set)即数据的集合,每一条单独的数据被称为样本(Sample)。 对于每个样本,它通常具有一些属性(Attribute)或者特征(Feature), 特征所具体取得值被称为特征值(Feature Value)。 西瓜数据集 色泽根蒂纹理青绿稍蜷模糊乌黑蜷缩清晰 …...
Apache DolphinScheduler 3.1.9 版本发布:提升系统的稳定性和性能
🚀我们很高兴宣布,Apache DolphinScheduler 的最新版本 3.1.9 已正式发布!此版本在 3.1.8 的基础上进行了关键的 bug 修复和文档更新,共计修复了 14 个 bug 和改进了 3 个文档。 主要更新亮点 本次更新重点解决了以下几个关键问题…...
go-carbon v2.3.1 发布,轻量级、语义化、对开发者友好的 Golang 时间处理库
carbon 是一个轻量级、语义化、对开发者友好的 golang 时间处理库,支持链式调用。 目前已被 awesome-go 收录,如果您觉得不错,请给个 star 吧 github.com/golang-module/carbon gitee.com/golang-module/carbon 安装使用 Golang 版本大于…...
R_handbook_作图专题
ggplot基本作图 1 条形图 library(ggplot2) ggplot(biopics) geom_histogram(aes(x year_release),binwidth1,fill"gray") 2 堆砌柱状图 ggplot(biopics, aes(xyear_release)) geom_bar(aes(fillsubject_sex)) 3 堆砌比例柱状图 ggplot(biopics, aes(xyear_rele…...
关于Python里xlwings库对Excel表格的操作(二十五)
这篇小笔记主要记录如何【如何使用xlwings库的“Chart”类创建一个新图表】。 前面的小笔记已整理成目录,可点链接去目录寻找所需更方便。 【目录部分内容如下】【点击此处可进入目录】 (1)如何安装导入xlwings库; (2…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
