部署k8s(一)


二进制部署

环境准备:

 

 

 

 

 

 

 部署etcd集群

etcd是CoreOs团队发起的开源项目,它的目标是构建一个高可用的分布式键值(key-value)数据库。etcd内部采用raft协议作为一致性算法,etcd是go语言编写的。

etcd是服务发现系统,有以下特点:

  • 简单:安装配置简单,而且提供了HTTP API 进行交互,使用也很简单
  • 安全:支持SSL证书验证
  • 快速:单实例支持每秒2k+读操作
  • 可靠:采用raft算法,实现分布式系统数据的可用性和一致性

etcd目前默认使用2379端口提供HTTP API服务,2380端口和peer通信,etcd默认使用2379端口对外为客户端提供通讯,使用端口2380来进行服务间内部通讯。etcd在生产环境中一般推荐集群方式部署。由于etcd的leader选举机制,要求至少为3台或以上奇数台。

准备签发证书环境

CFSSL是CloudFlare公司开源的一款PKI/TLS工具。CFSSL包含一个命令行工具和一个用于签名、验证和捆绑TLS证书的HTTP API服务。使用Go语言编写。

CFSSL使用配置文件生成证书,因此自签之前,需要生成它识别的json格式的配置文件,CFSSL提供了方便的命令行生成配置文件。CFSSL用来为etcd提供TLS证书,它支持签三种类型的证书:

  1. client证书:服务端连接客户端时携带的证书,用于客户端验证服务端身份,如kube-apiserver访问etcd
  2. server证书:客户端连接服务端时携带证书,用于服务端验证客户端身份,如etcd对外提供服务
  3. peer证书:相互之间连接时使用的证书,如etcd节点之间进行验证和通信。

在master01节点上操作

下载证书制作工具

创建k8s工作目录

 启动etcd服务

 进入卡住状态等待其他节点加入,这里需要三台etcd服务同时启动

 

 部署docker引擎

所有node节点部署docker引擎

 

 

 

 finnel网络配置

k8s中Pod网络通信

①、Pod内容器与容器之间的通信

在同一个Pod内的容器(Pod内的容器是不会跨宿主机的)共享同一个网络命令空间,相当于它们在同一台机器上一样,可以用localhost地址访问彼此的端口。

②、同一个Node内Pod之间的通信

每个Pod都有一个真实的全局IP地址,同一个Node内的不同Pod之间可以直接采用对方Pod的IP地址进行通信,Pod1与Pod2都是通过Veth连接到同一个docker0网桥,网段相同,所以它们之间可以直接通信。

③、不同Node上Pod之间通信

Pod地址与docker0在同一个网段,docker0网段与宿主机网卡是两个不同的网段,且不同Node之间的通信只能通过宿主机的物理网卡进行。要想实现不同Node上Pod之间的通信,就必须想办法通过主机物理网卡IP地址进行寻址和通信。因此要满足两个条件:Pod的IP不能冲突,将Pod的IP所在的Node的IP关联起来,通过这个关联让不同Node上Pod之间直接通过内网IP地址通信

Overlay Network:

叠加网络,在二层或者三层基础网络上叠加的一种虚拟网络技术模式,该网络中的主机通过虚拟链路隧道连接起来(类似于VPN)。

VXLAN:

将源数据包封装到UDP中,并使用基础网络的IP/MAC作为外层报文头进行封装,然后再以太网上传输,到达目的地后由隧道端点解封转并将数据发送给目标地址。

Flannel:

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

Flannel是Overlay网络的一种,也是将TCP源数据包封装在另外一种网络包里面进行路由转发和通信,目前支持UDP、VXLAN、host-GW3种数据转发方式。

Kubernetes工作流程:

首先运维人员/用户发送请求给APIserver,APIserver把用户的请求信息写入到etcd分布式存储中,然后APIserver找controller-manager创建pod,controller-manager通过etcd读取用户的请求,根据用户的请求来创建pod;controller-manager通过APIserver找到scheduler来调度pod,scheduler会通过两种策略:一种优选策略,一种预算策略筛选出node节点,然后把pod送到对应的node节点上;scheduler通过APIserver找到node对应节点上的kubelet,然后由kubelet创建pod,kubelet会监控node节点上的资源信息(包括pod的状态);监控到的信息也会通过APIserver存储到etcd。如果需要把pod发送出去,通过proxy创建转发规则把服务发布出去供用户来访问。proxy承载service,把用户的请求负载均衡转发给他所关联的pod上。

 

 

Flannel工作原理:

 数据从源node节点的pod发出后,会经由docker0网卡转发到flannel0网卡,在flannel0网卡有个flanneld服务会把这个数据包封装到udp报文中,然后根据自己在etcd中维护路由表通过物理网卡转发到目标node节点,数据包到达目标node节点后会被flanneld服务解封装,然后经由flannel0网卡和docker0网卡转发到目标pod的容器。

 

 ETCD之Flannel提供说明:

存储管理Flannel可分配的IP地址段资源,监控ETCD中每个Pod的实际地址,并在内存中建立维护Pod节点路由表。

master01节点上操作

添加flannel网络配置信息,写入分配的子网段到etcd中,供flannel使用

 

 查看写入信息

 

 在所有node节点上操作

 

 创建k8s工作目录

 

 启动flannel服务,开启flannel网络功能

 

 

 

 这里上面的mtu=1450比别的少了50字节,因为要留给VXLAN50字节来封装

查看

 

 

 

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM