IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Kubenetes二进制部署(搭建etcd集群并部署flannel插件) -> 正文阅读

[系统运维]Kubenetes二进制部署(搭建etcd集群并部署flannel插件)

常见的K8s按照部署方式

  • Minikube
Minikube是一个工具,可以在本地快速运行一个单节点微型K8s,仅用于学习、预览K8s的一些特性使用。
部署地址: https ://kubernetes.ioldocs/setup/minikube
  • Kubeadmin
Kubeadmin也是一个工具,提供kubeadm init和kubeadm join,用于快速部署K8s集群,相对简单。
https://kubernetes.io/docs/referencelsetup-tools/kubeadm/kubeadm/
  • 二进制安装部署
生产首选,从官方下载发行版的二进制包,手动部署每个组件和自签TLS证书,组成K8s集群,新手推荐。
https://github.com/kubernetes/kubernetes/releases

准备环境

k8s集群master01:192.168.121.20          kube-apiserver  kube-controller-manager  kube-scheduler  etcd

k8s集群node01:192.168.121.19     kubelet  kube-proxy   docker   flannel
k8s集群node02:192.168.121.18

etcd集群节点1:192.168.121.17      etcd
etcd集群节点2:192.168.121.16
etcd集群节点3:192.168.121.15

负载均衡nginx+keeplive01(master):192.168.121.14
负载均衡nginx+keeplive01(backup):192.168.121.13
systemctl  stop  firewalld
systemctl  disable  firewalld
setenforce 0

在这里插入图片描述

etcd概念

etcd是CoreOS团队于2013年6月发起的开源项目,它的目标是构建一个高可用的分布式键值对数据库。etcd内部采用raft协议作为一致性算法,etcd是go语言编写的。

etcd作为服务发现系统,有以下特点

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

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

准备签发证书环境

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

  • 1、client证书:服务端连接客户端携带的证书,用于客户端验证服务端身份
  • 2、server证书:客户端连接服务端时携带的证书,用于服务端验证客户端身份
  • 3、peer证书:互相之间连接时使用的证书,如etcd节点之间验证和通信

一、搭建etcd集群

(一)在master01节点上操作

1、下载证书制作工具

wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -o /usr/local/bin/cfssl
wget https://pkg.cfssl.org/R1.2/cfssljson linux-amd64 -0 /usr/local/bin/cfssljson
wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 -0 /usr/local/bin/cfssl-certinfo

curl -L https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -o /usr/local/bin/cfssl
curl -L https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 -o /usr/local/bin/cfssljson
curl -L https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 -o /usr/local/bin/cfssl-certinfo

chmod +x /usr/ local/bin/ cfssl*

-------------------------------------------------------------------------------------
cfssl:证书签发的工具命令
cfssljson: cfssl生成的证书(json格式)变为文件承载式证书
cfssl-certinfo:验证证书的信息
cfssl-certinfo -cert<证书名称>    #查看证书的信息

在这里插入图片描述

2、创建k8s工作目录

mkdir  /opt/k8s
cd /opt/k8s/

3、上传etcd-cert.sh和etcd.sh到/opt/k8s/目录中

mkdir /opt/k8s/etcd-cert
cd /opt/k8s/etcd-cert
rz -E
chmod +x etcd-cert.sh etcd.sh

在这里插入图片描述

4、开始制作证书

mkdir /opt/k8s/etcd-cert
mv etcd-cert.sh etcd-cert
vim /opt/k8s/etcd-cert/etcd-cert.sh
cd /opt/k8s/etcd-cert
./etcd-cert.sh

在这里插入图片描述

在这里插入图片描述

5、上传并解压etcd压缩包到/opt/k8s目录中

//把etcd解压包上传到/k8s目录中并解压
rz -E
tar zxvf etcd-v3.3.10-linux-amd64.tar.gz

在这里插入图片描述

6、创建用于存放etcd配置文件、命令文件、证书的目录

mkdir -p /opt/etcd/{cfg,bin,ssl}
mv /opt/k8s/etcd-v3.3.10-linux-amd64/etcd /opt/etcd-v3.3.10-linux-amd64/etcdctl /opt/k8s/etcd/bin/
cp /opt/k8s/etcd-cert/*.pem /opt/k8s/etcd/ssl/

在这里插入图片描述

7、启动etcd服务,进入卡住状态等待其他节点加入

//进入卡住状态等待其他节点加入,这里需要三台etcd服务同时启动,如果只启动其中一台后,服务会卡在那里,直到集群中所有etcd节点都已启动,可忽略这个情况

./etcd.sh etcd01 192.168.121.17 etcd02=https://192.168.121.16:2380,etcd03=http://192.168.121.15:2380

在这里插入图片描述

使用另外一个会话打开,会发现etcd进程已经开启
ps -ef | grep etcd

在这里插入图片描述

8、拷贝证书到其他节点

scp -r /opt/k8s/etcd/ 192.168.121.16:/opt/k8s/etcd/
scp -r /opt/k8s/etcd/ 192.168.121.15:/opt/k8s/etcd/

在这里插入图片描述

9、将启动脚本(服务管理脚本)拷贝到其他节点

scp /usr/lib/systemd/system/etcd.service 192.168.121.15:/usr/lib/systemd/system
scp /usr/lib/systemd/system/etcd.service 192.168.121.16:/usr/lib/systemd/system

在这里插入图片描述
在这里插入图片描述

(二)在node01节点修改

1、修改etcd配置文件

vim /opt/etcd/cfg/etcd
##将配置文件中的IP地址改成该节点的IP地址

在这里插入图片描述

2、开启etcd服务

systemctl start etcd.service
systemctl status etcd.service

在这里插入图片描述

3、在Master节点上查看etcd集群的状态

ln -s /opt/etcd/bin/etcdctl /usr/local/bin/    做一个软连接让系统可以识别

/opt/etcd/bin/etcdctl --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem --endpoints="https://192.168.121.17:2379,https://192.168.121.15:2379,https://192.168.121.16:2379" cluster-health
##通过这条命令检查etcd集群的健康状态

/opt/etcd/bin/etcdctl --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem --endpoints="https://192.168.121.17:2379,https://192.168.121.15:2379,https://192.168.121.16:2379" set /coreos.com/network/config '{ "Network": "172.17.0.0/16", "Backend": {"Type": "vxlan"}}'
##通过这条命令查看etcd集群的状态

在这里插入图片描述

##切换到etcd3版本查看集群系欸但状态和成员列表
export ETCDCTL_API=3
##显示etcd的版本和当前的状态
etcdctl --write-out=table endpoint status
##显示etcd集群的成员状态
etcdctl --write-out=table member list

在这里插入图片描述

搭建etcd集群的总结

第一个Master节点
1、准备cfss证书生成工具
2、生成证书
3、准备etcd二进制包
4、生成etcd的服务管理文件
5、启动etcd
后面Node节点
1、在Master节点上把etcd01的配置文件、可执行文件、证书,etcd服务管理文件都复制发送到etcd后面的Node节点中
2、在Node节点上修改收到的etcd配置文件,将IP地址改成自己主机的IP
3、启动etcd服务,会自动加入集群
最后可以在Master节点上查看集群状态

二、部署docker引擎

//所有node节点部署docker引擎
yum -y install yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo   ##注意用阿里云安装
yum -y install docker-ce docker-ce-cli containerd.io 

systemctl start docker 			#启动docker
systemctl enable docker			#设置开机自启动

三、flannel网络配置

K8S中Pod网络通信

  • Pod 内容器与容器之间的通信
    在同一个 Pod 内的容器(Pod 内的容器是不会跨宿主机的)共享同一个网络命令空间,相当于它们在同一台机器上一样,可以用localhost地址访问彼此的端口。
  • 同一个Node内Pod 之间的通信
    每个Pod都有一个真实的全局IP地址,同一个 Node内的不同Pod之间可以直接采用对方 Pod的IP地址进行通信,Podl与Pod2都是通过Veth连接到同一个 docker0 网桥,网段相同,所以它们之间可以直接通信。
  • 不同Node 上 Pod 之间的通信
    Pod地址与 docker0在同一网段,docker0网段与宿主机网卡是两个不同的网段,且不同Node之间的通信只能通过宿主机的物理网卡进行。
    要想实现不同NMode 上. Pod之间的通信,就必须想办法通过主机的物理网卡TP地址进行寻址和通信。因此要满足两个条件: Pod 的IP不能冲突;将Pod的IP和所在的 Node的Te 关联起来,通过这个关联让不同Node 上 Pod之间直接通过内网IP 地址通信。

在这里插入图片描述

Overlay Network

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

VXLAN

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

Flannel

  • Flannel 的功能是让集群中的不同节点主机创建的 Docker容器都具有全集群唯一的虚拟IP地址。
  • Flannel是Overlay网络的一种,也是将TCP 源数据包封装在另一种网络包里面进行路由转发和通信,目前已经支持 加DP、VXLAE,AWS VPC等数据转发方式。
    在这里插入图片描述

???Flannel的工作原理

同一个节点中的Pod之间是通过docker0来通信的,不同节点的Pod之间要通信的话可以通过Flannel网络插件来完成。node1首先把数据包通过docker0发送给flannel0,flannel部署在各个节点中会将本节点的IP和MAC地址都保存在etcd中,flannel0收到pod发送来的消息之后会进行封装成UDP,UDP中有源数据的IP和MAC地址,然后根据路由表通过物理网卡转发给node2,部署在node2上的flannel收到后会进行解封装,暴露出里面目的Pod的IP由flannel0转发给docker0,最终转发给对应的Pod。

etcd之Flannel提供说明

存储管理Flannel可分配的IP地址段资源
监控etcd中每个Pod的实际地址,并在内存中简历维护Pod节点路由器

部署Flannel

在Master01节点上操作

//添加flannel网络配置信息,写入分配的子网段到etcd中,供flannel使用
cd /opt/etcd/ssl
/opt/etcd/bin/etcdctl --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem --endpoints="https://192.168.121.17:2379,https://192.168.121.16:2379,https://192.168.121.15:2379" set /coreos.com/network/config '{ "Network": "172.17.0.0/16", "Backend": {"Type": "vxlan"}}'
##这里Flannel的转发类型是vxlan,vxlan的性能更好一点;系统默认是udp


//查看写入的信息
/opt/etcd/bin/etcdctl --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem --endpoints="https://192.168.121.17:2379,https://192.168.121.16:2379,https://192.168.121.15:2379" get /coreos.com/network/config

在这里插入图片描述

在所有node节点上操作

上传并解压flannel压缩包

//上传flannel.sh和flannel-v0.10.0-linux-amd64.tar.gz到/opt目录中,解压flannel压缩包
cd /opt
tar zxvf flannel-v0.10.0-linux-amd64.tar.gz 
flanneld    ##flanneld为主要的执行文件
mk-docker-opts.sh   ##mk-docker-opts.sh脚本用于生成Docker启动参数
README.md

创建kubernetes工作目录

mkdir /opt/kubernetes/{cfg,bin,ssl} -p
mv mk-docker-opts.sh flanneld /opt/kubernetes/bin/

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

cd /opt
chmod +x flannel.sh 
./flannel.sh https://192.168.121.15:2379,https://192.168.121.16:2379,https://192.168.121.17:2379

在这里插入图片描述
在这里插入图片描述

##查看flannel是否启动成功
systemctl status flannel (其实执行脚本会自动帮我们启动flannel)
ifconfig
#查看网卡信息,发现多了一个flannel的网卡,可以看到flannel分配的网段
但是这是发现docker0网卡的网段没有和flannel的网段同步

##更改docker的启动项
vim /usr/lib/systemd/system/docker.service
#12行下添加
EnvironmentFile=/run/flannel/subnet.env  ##指定docker网络的配置文件
ExecStart=/usr/bin/dockerd $DOCKER_NETWORK_OPTIONS -H fd:// --containerd=/run/containerd/containerd.sock![在这里插入图片描述](https://img-blog.csdnimg.cn/cdd184d1de4641519340fe33735e7ce7.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzU0NTg1NzY4,size_16,color_FFFFFF,t_70)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

这时候再ifconfig,发现docker0的网段和flannel的网段一致了
docker0:*.*.*.1
flannel:*.*.*.0

在这里插入图片描述

测试ping通对方docker0网卡 证明flannel起到路由作用

ping -I 172.17.81.1 172.17.18.1

在这里插入图片描述

也可以进入容器里面进行ping测试
docker run -it centos:7 /bin/bash
yum install net-tools -y   ##安装网络服务插件

在这里插入图片描述
在这里插入图片描述

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章           查看所有文章
加:2021-08-12 17:05:23  更:2021-08-12 17:07:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 13:14:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码