k8s的二进制部署和网络类型

k8s的二进制部署

master01:192.168.233.10 kube-apiserver kube-controller-manager kube-scheduler etcd

master02:192.168.233.20 kube-apiserver kube-controller-manager kube-scheduler

node01:192.168.233.30 kubelet kube-proxy etcd

node02:192.168.233.40 kubelet kube-proxy etcd

负载均衡:nginx+keepalive

master:192.168.233.50

backup:192.168.233.60

[root@10 ~]# systemctl stop firewalld

[root@10 ~]# setenforce 0

[root@10 ~]# iptables -t nat -F

[root@10 ~]# iptables -t mangle -F

[root@10 ~]# iptables -X

[root@10 ~]# swapoff -a

[root@10 ~]# free -h

              total        used        free      shared  buff/cache   available

Mem:           7.6G        302M        7.0G        9.1M        379M        7.0G

Swap:            0B          0B          0B

k8s在设计时,为了提升性能,默认是不使用swap交换分区,kubenetes在初始化时,会检测swap是否关闭

[root@10 ~]# hostnamectl set-hostname master01

[root@10 ~]# su

[root@master01 ~]# vim /etc/hosts

[root@master01 ~]# vim /etc/sysctl.d/k8s.conf

net.bridge.bridge-nf-call-ip6tables=1

net.bridge.bridge-nf-call-iptables=1

net.ipv6.conf.all.disable_ipv6=1

net.ipv4.ip_forward=1

[root@master01 ~]# sysctl --system

部署第一个组件

存储k8s的集群信息和用户配置组件etcd

etcd是一个高可用---分布式的键值存储数据库

采用raft算法,保证节点信息一致性。etcd时go语言写的

etcd的端口:2379(提供API服务,api接口。对外为客户端提供通信)   2380(内部服务的通信端口)

etcd一般是集群部署,由于etcd有选举leader的机制,至少要3台或者奇数台

k8s的内部通信依靠证书认证、密钥认证

证书的签发环境:

cfssl:证书签发的命令工具

cfssl-certinfo:查看证书信息的工具

cfssljson: 把证书的格式转化成json格式,变成文件的承载式证书

ca-config.ison 证书颁发机构的配置文件,定义了证书生成的策略,默认的过期时间和模版

ca-csr.ison 签名的请求文件,包括一些组织信息和加密方式

ca.pem 根证书文件,用于给其他组件签发证书

server.csr  etcd的服务器签发证书的请求文件

server-key.pem  etcd服务器的私钥文件

ca.csr  根证书签发请求文件

ca-key.pem  根证书的私钥文件

etcd- cert.sh  用于通过服务器验证客户端

server-csr.ison  用于生成etcd的服务器证书和私钥签名文件

server.pem  etcd服务器的证书文件,用于加密和认证etcd节点之间的通信

kubectl config set-context default \

--cluster=kubernetes \

--user=cluster-admin

-kubeconfig=$KUBE CONFIG)kubect! config use-context default --kubeconfig=$(KUBE CONFIG)

context 上下文:

定义连接到哪个k8s集群,以及使用哪个用户的身份来进行操作,上下文包含了集群、用户和可选命名空间的信息

在k8s的集群中

kubectl create clusterrolebinding kubelet-bootstrap -clusterrole-system:node-bootstrapper --user-kubelet-bootstrap

RBAC授权,生成和赋权用户kubelet-bootstrap,发起node节点的请求认证,通过CSR加密认证实现NODEK节点加入到集群当中。

kubelet获取master的验证信息和获取API-server接口的通信认证。

k8s网络类型

k8s中的通信模式:

1、pod内部之间容器与容器之间的通信

在同一个pod中的容器共享资源和网络,使用同一个网络命名空间。他们可以直接通信

2、同一个node节点之内,不同pod之间的通信

每个pod都有一个全局的真实的IP地址。同一个node之间的不同pod可以直接使用对方pod的ip地址进行通信

pod1和pod2是通过doker0的网桥来进行通信。

3、不同node节点上的pod之间如何进行通信

cni插件:cni是一个标准接口,用于容器运行时调用网络插件,配置容器网络,负责设置容器的网络命名空间,ip地址,路由等等参数

插件①:Flannel

Flannel 的功能是让集群中的不同Docker 容器都具有全集群唯一的虚拟IP地址。

Flannel 是 Overlay 网络的一种,在底层物理网络的基础之上,创建一个逻辑的网络层。二层+三层集合。二层是网络层,三层是逻辑上的网络层。Overlay网络也是一种网络虚拟化的技术

Flannel支持的数据转发方式:①UDP(默认模式。应用转发,配置简单,性能最差。一般不用); ②VXLAN(基于内核转发。也是最常用的网络类型(小集群都用这个),用的最多); ③Host-gw(性能最好,但是配置很麻烦,用的比较少)

UDP的工作模式:基于应用转发,Flannel提供路由表,Fannel封装数据包、解封装

node都会有一个fannel的虚拟网卡

数据流向

VXLAN的工作模式:使用的就是Overlay的虚拟隧道通信技术。二层+三层的模式。

UDP基于应用层用户态,

VXLAN:fannel提供给路由表,内核封装、解封装

flannel1.1接口

数据流向

根据vni+IP地址来寻找目标节点的通信地址

flannel:每个发向容器的数据包进行封装,vxlan通过vtep打包数据,然后由内核封装成数据包,再转发到目标node节点。到了目标节点,还有个解封装过程,再发送目标pod,性能有一定影响

插件②:Calico(直接路由,性能最好)

calico:采用直接路由的方式(BGP动态路由)。不需要修改报文,统一直接通过路由表转发,路由表会很复杂,运行维护的要求比较高

BGP模式的特点:交换路由信息的外部网关协议,可以连接不同的节点。node节点可能不是一个网段,BGP实现可靠的、最佳的、动态的路由选择。自动识别相邻的路由设备。

calico不使用overlay,也不需要交换,直接通过虚拟路由实现,每一台虚拟路由都通过BGP转发

核心组件:

1、felix  也是运行在主机的一个个pod,一个进程,k8s daemonset的方式部署(后台部署)的pod

daemonset会在每个node节点部男相同的pod.后台的运行方式

负责在宿主机上插入路由规则,维护calico需要的网络设备。网络接口管理、监听、路由等等

2、BGP Client(bird)  BGP的客户端,专门负责在集群中分发路由规则的信息。每一个节点都会有一个BGP Client

BGP协议用广播的方式通知其他节点的分发路由的规则,实现网络互通

etcd:保存路由信息;负责整个网络元数据的一致性(保证整个网络状态的一致和准确)

Calico的工作原理:

路由表来维护每个pod之间的通信

创建好pod之后,添加一个设备cali  veth pair设备

虚拟网卡: veth pair是一对设备,虚拟的以太网设备

一头连接在容器的网络命名空间 eth0

另一头连接宿主机的网络命名空间 cali

IP地址分配:veth pair连接容器的部分给容器分配IP地址,这个IP地址是唯一标识,宿主机也会被veth pair分配一个calico网络的内部IP地址。和其他节点上的容器进行通信

veth设备:容器发出的IP地址通过veth pair设备到宿主机,宿主机就根据路由规则的下一跳地址发送到网关(目标宿主机,目标节点),数据包到达目标宿主机,veth pari设备,目标宿主机也是根据路由规则,下一跳地址,转发到目标容器

数据流向

ipip模式:会生成一个tunnel隧道.数据包都是在tunnel内部打包 封装:宿主机IP、容器内部的IP地址

常用的网络插件类型:flannel和calico

flannel特点:配置简单,功能简单,基于overlay叠加网络实现,在物理层的网络上再封装一个虚拟的网络。

vxlan是虚拟三层网络。UDP是默认模式。host-gw模式。

vxlan:最多的模式,vni+IP进行转发,flannel提供路由表,内核封装和解封装

由于封装和解封装的过程,对数据传输的性能会有影响,没有网络策略配置的能力UDP协议

默认网段:10.244.0.0/16

calico特点:功能强大,基于路由表进行转发,没有封装和解封装的过程。具备网络策略的配置能力。但是路由表维护起来复杂

模式:ipip   BGP

BGP:通过为IP路由表的前缀来实现目标主机的可达性

对比ipip模式,BGP模式没有隧道,BGP模式下,pod的数据包直接通过网卡发送到目的地

ipip的隧道:在隧道进行数据包的封装ipv4 --- ipv4

简单的小集群:flannel

扩容、配置网络策略:calico

coredns:可以为集群当中的service资源创建一个域名和IP进行对应解析的关系

service是对外提供访问的地址,现在加入DNS机制之后,可以直接访问服务名

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

查看pytorch模型的权重是否导入成功

对于pytorch的模型的对象,可以查看其state_dict属性,可以查看load ckpt前后的权重值是否发生变化,查看权重是否加载成功

算法导论复习纲要

函数 1. 上界下界,紧确界的定义 2. 求解递推式,代入法,递归树法,主方法 分治算法 动态规划 1. 切割钢条:递归方法,动态的自上而下, 2. 矩阵乘法:最优子结构性的证明&#xff0c…

Matlab:非线性规划

1、语法: xfmincon(fun,x0,A,b) xfmincon(fun,x0,A,b,Aeq,beq) xfmincon(fun,x0,A,b,Aeq,beq,lb,ub) xfmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon) xfmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options) xfmincon(problem) [x,fval]fmincon(___) [x,fval,exitflag,…

《长江丛刊》期刊投稿发表

《长江丛刊》杂志是由国家新闻出版总署批准的正规期刊,是一本文学类综合性刊物,包括文学评论以及文学作品的发表。是广大专家、学者、教师、学子发表论文、交流信息的重要平台,符合评职称要求(单位有特殊要求除外)。 …

数据结构学习 Leetcode494 目标和

关键词:动态规划 01背包 dfs回溯 一个套路: 01背包:空间优化之后dp【target1】,遍历的时候要逆序遍历完全背包:空间优化之后dp【target1】,遍历的时候要正序遍历 题目: 解法一: …

MySQL数据库多版本并发控制(MVCC)

在数据库中,并发控制是确保多个事务能够同时执行,而不会导致数据不一致或冲突的关键机制。多版本并发控制(MVCC)是一种流行的并发控制方法,它可以允许多个事务同时读取同一数据项的不同版本,而不会相互阻塞。本文将讨论MVCC的原理…

代码随想录-刷题第三十九天

动态规划理论基础 动态规划的题目由重叠子问题构成,每一个状态一定是由上一个状态推导出来的。这一点就区分于贪心,贪心没有状态推导,而是从局部直接选最优的。 动态规划五步曲 确定dp数组(dp table)以及下标的含义…

操作系统【设备管理】

设备管理 一、前言 学习了存储器管理后,继续学习设备管理,设备管理的主要功能有缓冲区管理、设备分配、设备处理、虚拟设备及实现设备独立性等,由于I/O设备不仅种类繁多,而且他们的特性和操作方式往往相差甚大,使得设…

MySQL按月分片

一、按照月分片 使用场景为按照自然月来分片,每个自然月为一个分片,但是一年有12个月,是不是要有12个数据节点才行呢?并不是。例如我现在只有三个分片数据库,这样就可以1月在第一个数据分片中,2月在第二个数据分片中,3月在第三个数据分片中,当来到4月的时候,就会重新开…

python抽象基类之_subclasshook_方法

Python的鸭子特性(duck typing) Python中自定义的类只要实现了某种特殊的协议,就能赋予那种行为,举一个简单的例子: class A:def __len__(self):return 0 a A() print(len(a)) 如上所示,自己定义了一个类…

大数据Doris(四十三):创建物化视图

文章目录 创建物化视图 一、首先你需要有一个Base表

【基础篇】五、类的双亲委派机制

文章目录 1、双亲委派机制2、Java代码中去主动加载一个类3、“父”加载器4、Q & A5、打破双亲委派机制 1、双亲委派机制 JVM中有多个类加载器,某个类A,到底该由谁去加载 ⇒ 双亲委派机制 该机制的作用: 保证类加载的安全性:避…