【K8S 二进制部署】部署Kurbernetes的网络组件、高可用集群、相关工具

news2024/11/17 7:23:57

目录

一、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.tar


mkdir -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.yml


kubectl 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_CIDR
      value: "10.244.0.0/16"        #Calico 默认使用的网段为 192.168.0.0/16

  

kubectl apply -f calico.yaml

kubectl 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 /opt

docker load -i coredns.tar



在 master01 节点上操作

#上传 coredns.yaml 文件到 /opt/k8s 目录中,部署 CoreDNS

cd /opt/k8s

kubectl apply -f coredns.yaml

kubectl 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:/opt

scp -r /root/.kube root@20.0.0.62:/root

scp /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-apiserver

KUBE_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.service

systemctl enable kube-apiserver.service

systemctl start kube-controller-manager.service

systemctl enable kube-controller-manager.service

systemctl start kube-scheduler.service

systemctl enable kube-scheduler.service

查看node节点状态

ln -s /opt/kubernetes/bin/* /usr/local/bin/

kubectl get nodes

kubectl 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
EOF


yum 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 stop
    systemctl stop keepalived
fi


chmod +x /etc/nginx/check_nginx.sh

启动keepalived服务(一定要先启动了nginx服务,再启动keepalived服务)

systemctl start keepalived

systemctl enable keepalived

ip a

3、测试

主nginx

ip addr

关闭主nginx测试高可用:

VIP漂移到备nginx上

测试故障恢复:

先启动nginx,再启动keepalived

VIP漂移回来了

修改node节点上的bootstrap.kubeconfig,kubelet.kubeconfig配置文件为VIP

cd /opt/kubernetes/cfg/

vim bootstrap.kubeconfig

server: https://20.0.0.100:6443

                      

vim kubelet.kubeconfig

server: https://20.0.0.100:6443

                        

vim kube-proxy.kubeconfig

server: https://20.0.0.100:6443

重启kubelet和kube-proxy服务

systemctl restart kubelet.service

systemctl 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/k8s



kubectl apply -f recommended.yaml


创建service account并绑定默认cluster-admin管理员集群角色
kubectl create serviceaccount dashboard-admin -n kube-system


kubectl 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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

找不到msvcp140.dll怎么办-msvcp140.dll丢失的解决方法分享

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“msvcp140.dll丢失”。那么&#xff0c;msvcp140.dll究竟是什么文件&#xff1f;为什么会出现丢失的情况&#xff1f;本文将详细介绍msvcp140.dll的属性、作用以及丢失的原因&#xff0c;并…

1. pytorch mnist 手写数字识别

文章目录 一、数据集介绍1.1、简介1.2 详细介绍1、数据量2、标注量3. 标注类别4.数据下载5.数据集解读 二、读取、加载数据集1、pytorch 自带库函数2、通过重构Dataset类读取特定的MNIST数据或者制作自己的MNIST数据集 三、模型构建四、 runtraintest评估模型的性能检查点的持续…

element-plus修改主题颜色

一、自定义scss文件 在src\css\styles\element目录下新建index.scss 代码如下 forward "element-plus/theme-chalk/src/common/var.scss" with ($colors: ("primary": ("base": #d61b1a,"color": #fff,),) );use "element-plus…

STANFORD斯坦福FS725铷钟

FS725在一个紧凑的半宽2U机箱中集成了一个铷原子振荡器&#xff08;SRS型号PRS10&#xff09;、一个低噪声通用交流电源和分配放大器。它提供稳定和可靠的性能&#xff0c;估计20年的老化率低于510-9&#xff0c;并证明铷原子振荡器的MTBF超过20万小时。FS725是校准和研发实验室…

【JavaWeb学习笔记】18 - 文件上传下载

项目代码 https://github.com/yinhai1114/JavaWeb_LearningCode/tree/main/fileupdown 目录 文件上传 一、基本介绍 二、文件上传的基本原理 ​编辑 三、文件上传应用实例 四、文件上传的注意细节 1.解决中文乱码问题 2.分割文件夹 3.防止重名 4.百度WebUploader 5.空…

Doris:为企业数据查询加速

Doris是一款由百度开发的开源数据仓库查询引擎&#xff0c;它能够帮助用户高效地查询和分析大规模数据。Doris具有高性能、易用性强、可扩展性高等特点&#xff0c;让数据分析变得更加简单。 二、场景&#xff1a; Doris适用于各种数据仓库场景&#xff0c;无论是大数据分析、…

搭建WebDAV服务+cpolar内网穿透公网同步Zotero科研文献

文章目录 一、Zotero安装教程二、群晖NAS WebDAV设置三、Zotero设置四、使用公网地址同步Zotero文献库五、使用永久固定公网地址同步Zotero文献库 Zotero 是一款全能型 文献管理器,可以 存储、管理和引用文献&#xff0c;不但免费&#xff0c;功能还很强大实用。 ​ Zotero 支…

图灵日记之java奇妙历险记--类和对象

目录 类的定义和使用类的定义格式 类的实例化类和对象的说明 this引用this引用的特性 对象的构造及初始化就地初始化构造方法 封装包导入包中的类自定义包 static成员static修饰成员变量static修饰成员方法 代码块代码块概念及分类构造代码块静态代码块 匿名对象 类的定义和使用…

Python入门学习篇(十)——函数定义函数传参方式

1 相关定义和概念 1.1 函数的理解 一段被封装的可以重复调用的代码。 1.2 函数定义语法结构 def 函数名(形参1,形参2):要封装的逻辑代码 # 注意:函数可以有返回值也可以没有返回值,没有返回值的结果是None1.3 函数调用的语法结构 函数名(形参1,形参2)1.4 简单实例 1.4.1 …

不浪费时间,昂首资本1分钟如何快速学习MT4价差

不要浪费时间在手工计算上&#xff0c;昂首资本解释一下如何快速学习MT4价差&#xff0c;。 想要在MT4中输入交易时&#xff0c;需要在交易窗口中设置未来交易的参数。在同一个窗口中&#xff0c;可以看到卖价和买价。如果在上面的例子中比较这两个价格&#xff0c;就会发现两…

如何查看NX UI对话框内的控件(使用UIFW侦查)

一、概述 在NX二次开发中有很多命令从界面上看起开相似&#xff0c;但实质确不同&#xff0c;个人人为一是出于对软件产权的保护&#xff0c;增加二次开发的难度&#xff0c;二是由于NX在不断地发展和版本交替中为了保留老用户的操作习惯&#xff0c;故意用新控件做成老控件的…

LeetCode刷题--- N 皇后

个人主页&#xff1a;元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏 力扣递归算法题 http://t.csdnimg.cn/yUl2I 【C】 http://t.csdnimg.cn/6AbpV 数据结构与算法 ​​​​​​http://t.csdnimg.cn/hKh2l 前言&#xff1a;这个专栏主要讲述递归…

模式识别与机器学习-特征选择和提取

模式识别与机器学习-特征选择和提取 特征选择一些距离测度公式独立特征的选择准则一般特征的散布矩阵准则 离散K-L变换 谨以此博客作为复习期间的记录。 常见分类问题的流程&#xff0c;数据预处理和特征选择提取时机器学习环节中最重要的两个流程。这两个环节直接决定了最终性…

数模学习02-Matlab基础知识入门

先把matlab下载好。然后你就会发现电脑有少了几十个GB。服啦~ 修改字体 字体真的是太小了&#xff0c;其实我无论是使用什么编辑器我一般都会先改字体&#xff0c;字体在开始中有一个预设&#xff0c;可以修改字体&#xff0c;这样眼睛看着也会舒服一点 命令行窗口的使用 这…

亚马逊美国站ASTM F2613儿童折叠椅和凳子强制性安全标准

ASTM F2613折叠椅和凳子安全标准 美国消费品安全委员会&#xff08;CPSC&#xff09;发布的ASTM F2613儿童折叠椅和凳子的强制性安全标准&#xff0c;已于2020年7月6日生效&#xff0c;并被纳入联邦法规《16 CFR 1232儿童折叠椅和凳子安全标准》。 亚马逊要求在美国站上架的儿…

GaussDB元命令使用指导

所谓元命令就是在gsql里输入的任何以不带引号的反斜杠开头的命令。本课程通过实际使用gsql实践&#xff0c;介绍GaussDB数据库gsql所提供的元命令。 本课程仅展示基础的元命令使用。 一、操作步骤 步骤1 使用gsql连接到GaussDB实例。 gsql工具使用-d参数指定目标数据库名…

何时为 SEO 创建本地化文件夹和页面

您可以为新网站创建主题支柱页面吗&#xff1f; 您网站的使用年限与您如何构建内容和文件夹无关紧要。在重建已有 10 年历史的域或启动新 URL 时&#xff0c;可以做到这一点。 您应该始终构建您的网站&#xff0c;以便它帮助最终用户了解网站的层次结构&#xff0c;并显示该部…

详解Vue3中的插槽(slot)

本文主要介绍Vue3中的插槽&#xff08;slot&#xff09;。 目录 一、在普通写法中使用插槽&#xff08;slot&#xff09;作用域插槽默认插槽 二、在setup写法中使用插槽&#xff1a;注意事项 在Vue3中&#xff0c;插槽&#xff08;slot&#xff09;是一种用于在父组件中向子组件…

【2】Docker Compose编排

Docker Compose 使用 Docker 帮助我们解决服务的打包安装的问题&#xff0c;随着而来的问题就是服务过多的带来如下问题&#xff1a; 多次使用 Dockerfile、Build、Image 命令或者 DockerHub 拉取 Image&#xff1b;需要创建多个 Container&#xff0c;多次编写启动命令&…

Python——yolov8识别车牌2.0

目录 一、前言 二、关于项目UI 2.1、修改界面内容的文本 2.2、修改界面的图标和图片 三、项目修改地方 四、其他配置问题 一、前言 因为后续有许多兄弟说摄像头卡顿&#xff0c;我在之前那个MATS上面改一下就可以了&#xff0c;MAST项目&#xff1a;基于YOLOv8的多端车流检…