【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…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...

Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

Golang——9、反射和文件操作
反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)
macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 🍺 最新版brew安装慢到怀疑人生?别怕,教你轻松起飞! 最近Homebrew更新至最新版,每次执行 brew 命令时都会自动从官方地址 https://formulae.…...
Modbus RTU与Modbus TCP详解指南
目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...
Python网页自动化Selenium中文文档
1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API,让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API,你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的A…...