kubernetes节点服务搭建————二进制部署|单master节点配置(一)(etcd和flannel)(代码片段)

他和晚风一样温柔 他和晚风一样温柔     2022-12-20     351

关键词:

常见的K8s按照部署方式

Mini kube

Minikube是一个工具,可以在本地快速运行一个单节点微型K8S,仅用于学习、预览K8S的一些特性使用

部署地址: https://kubernetes.io/decs/setup/minikube

Kubeadmin

Kubeadmin也是一个工具,提供kubeadm init 和kubeadm join, 用于快速部署K8S集群,相对简单

https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/

二进制安装部署

生产首选,从官方下载发行版的二进制包,手动部署每个组件和自签TLS证书,组成K8S集群,新手推荐

https://github.com/kubernetes/kubernetes/releases

Kubernetes二进制部署

环境准备

服务器IP地址部署服务
k8s集群master01192.168.111.80kube-apiserver kube- controller-manager kube- scheduler etcd
k8s集群master02192.168.111.70kube-apiserver kube- controller-manager kube- scheduler etcd
k8s集群node01192.168.111.90kubelet kube-proxy docker flannel
k8s集群node02192.168.111.100kubelet kube-proxy docker flannel
etcd集群节点1192.168.111.80etcd
etcd集群节点2192.168.111.90etcd
etcd集群节点3192.168.111.100etcd

ps:etcd集群可以用3台服务器单独做,但我我们这里有限,就使用单master节点做,做一个master,两个node节点

部署etcd集群

  • etcd是Coreos团队于2013年6月发起的开源项目,它的目标是构建一-个高可用的分布式键值( key-value) 数据库。etdd内部采用raft协议作为一致性算法,etcd是go语言编写的。
  • etcd作为服务发现系统,有以下的特点:
    • 简单:安装配置简单,而且提供了HTTP API进行交互,使用也很简单
    • 安全:支持SSL证书验证
    • 快速:单实例支持每秒2k+读操作
    • 可靠:采用raft算法,实现分布式系统数据的可用性和一致性

etcd目前默认使用2379端口提供HTTP
API服务,2380端 口和peer通信(这两个端口已经被IANA (互联网数字分配机构)官方预留给etcd)。
即etcd默认使用2379端口对外为客户端提供通讯,使用端口2380来进行服务器间内部通讯
etcd在生产环境中一般推荐 集群方式部署。由于etcd的leader选举机制,要求至少为3台或以上的奇数台

准备签发证书环境

  • CFSSL是CloudFlare 公司开源的一 款PKI/TLS 工具。CFSSL包含- -个命令行工具和-一个用于签名、验证和捆绑TLS 证书的HTTP,API服务。使用Go语言编写。
  • CESSL 使用配置文件生成证书,因此自签之前,需要生成它识别的json格式的配置文件,CFSSL 提供了方便的命令行生成配置文件。
  • CFSSL用来为etcd提供TLS证书,它支持签三种类型的证书:
    • client证书,服务端连接客户端时携带的证书,用于客户端验证服务端身份,如kube-apiserver 访问etcd
    • server证书,客户端连接服务端时携带的证书,用于服务端验证客户端身份,如etcd 对外提供服务
    • peer证书,相互之间连接时使用的证书,如etcd节点之间进行验证和通信。
  • 这里全部都使用同一套证书认证

master01上操作部署

关闭防火墙,修改主机名

systemctl stop firewalld
setenforce 0

hostnamectl set-hostname master01
su


将证书工具文件传入opt目录下

cd /usr/local/bin

//下载证书制作工具
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 -o /usr/local/bin/cfssljson
wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 -o /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 <证书名称>   #查看证书的信息

上传etcd-cert.sh和 etcd.sh到/opt/k8s目录下

//创建k8s工作目录
mkdir /opt/k8s
cd /opt/k8s/

//上传etcd-cert.sh和etcd.sh到/opt/k8s/目录中
chmod +x etcd-cert.sh etcd.sh

创建证书目录,复制k8s目录下的证书创建脚本

//创建用于生成CA证书、etcd 服务器证书以及私钥的目录
mkdir /opt/k8s/etcd-cert
mv etcd-cert.sh etcd-cert/
cd /opt/k8s/etcd-cert/

//修改脚本配置文件
vim etcd-cert.sh 
cat > ca-config.json <<EOF			#CA证书配置文件

  "signing": 					#键名称
    "default": 
      "expiry": "87600h"			#证书有效期(10年)
    ,
    "profiles": 				#简介
      "www": 					#名称
         "expiry": "87600h",
         "usages": [				#使用方法
            "signing",				#键
            "key encipherment",			#密钥验证(密钥验证要设置在CA证书中)
            "server auth",			#服务器端验证
            "client auth"			#客户端验证
        ]
      
    
  

EOF
cat > ca-csr.json <<EOF				#CA签名

    "CN": "etcd CA",				#CA签名为etcd指定(三个节点均需要)
    "key": 
        "algo": "rsa",				#使用rsa非对称密钥的形式
        "size": 2048				#密钥长度为2048
    ,
    "names": [					#在证书中定义信息(标准格式)
        
            "C": "CN",				#名称
            "L": "Beijing",		
            "ST": "Beijing"		
        
    ]

EOF
cfssl gencert -initca ca-csr.json | cfssljson -bare ca -
cat > server-csr.json <<EOF			#服务器端的签名

    "CN": "etcd",
    "hosts": [					#定义三个节点的IP地址
    "192.168.111.80",
    "192.168.111.90",
    "192.168.111.100"
    ],
    "key": 
        "algo": "rsa",
        "size": 2048
    ,
    "names": [
        
            "C": "CN",
            "L": "BeiJing",
            "ST": "BeiJing"
        
    ]

EOF
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=www server-csr.json | cfssljson -bare server     #cfssl 为证书制作工具

./etcd-cert.sh

#生成CA证书、etcd服务器证书以及私钥
ls
ca-config.json    ca-csr.json       ca.pem         server .csr          server-key.pem
    ca.csr        ca-key.pem     etcd-cert.sh      server-csr.json      server.pem


启动etcd服务

//etcd 二进制包地址:https://github.com/etcd-io/etcd/releases

上传etcd-v3.3.10-1inux-amd64.tar.gz 到/opt/k8s/目录中,解压etcd压缩包

cd /opt/k8s/
tar zxvf etcd-v3.3.10-linux-amd64.tar.gz
ls etcd-v3.3.10-linux-amd64


etcd就是etcd服务的启动命令,后而可跟各种启动参数
etcdctl主要为etcd服务提供了命令行操作

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

mkdir -p /opt/etcd/cfg,bin,ssl


将刚刚解压出来的etcd文件中的 etcd 和 etcdctl移动到 /opt/etcd/bin目录下

mv /opt/k8s/etcd-v3.3.10-linuk-amd64/etcd /opt/k8s/etcd-v3.3.10-linux-amd64/etcdctl /opt/etcd/bin/


将刚刚解压出来的etcd文件中的 私钥和公钥还有证书 移动到 /opt/etcd/ssl目录下

cp /opt/k8s/etcd-cert/*.pem /opt/etcd/ssl/



执行etcd.sh脚本文件

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

//另外打开一个窗口查看etcd进程是否正常
ps -ef | grep etcd



将Master中的两个配置文件远程复制给另外两台节点服务器

//把etcd相关证书文件和命令文件全部拷贝到另外两个etcd集群节点
scp -r /opt/etcd/ root@192.168.111.90:/opt/
scp -r /opt/etcd/ root@192.168.111.100:/opt/

//把etcd服务管理文件拷贝到另外两个etcd集群节点
scp /usr/lib/systemd/system/etcd.service root@192.168.111.90:/usr/lib/systemd/system/
scp /usr/lib/systemd/system/etcd.service root@192.168.111.100:/usr/lib/systemd/system/


在node节点上修改配置

node01

systemctl stop firewalld
setenforce 0

hostnamectl set-hostname node01
su


更改Node节点服务器的配置文件

修改配置文件
vim /opt/etcd/cfg/etcd


启动服务

systemctl start etcd.service
systemctl status etcd.service


node02节点一样配置



检查一下etcd状态
master

cd /opt/etcd/bin/
ln -s /opt/etcd/bin/etcdctl /usr/local/bin/
cd /opt/etcd/ssl/
etcdctl --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem --endpoints="https://192.168.111.80:2379,https://192.168.111.90:2379,https://192.168.111.100:2379" cluster-health


这样etcd集群就配置好了

部署Docker引擎

在所有Node节点上面部署

安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2 
设置阿里云镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 

yum install -y docker-ce ##这里我只安装docker-ce了

systemctl start docker
systemctl status docker




flannel网络配置

flannel是实现不同node中Pod相互通信用的。

常见的通信方式

Overlay Network

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

VXLAN

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

Flannel

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

flannel的工作流程

flannel 会把内部的pod iP 封装到udp中,再根据在etcd 保存的路由表通过物理网卡发送给目的node,目的node在接受到转发来的数据后由flanneld解封装暴露出udp里的内部 Pod ip ,再根据目的IP由 flannel0 --> dockerO转发到目的pod中


ETCD之Flannel 提供说明:

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

flannel的搭建部署

master节点操作
写入分配的子网段到ETCD中,供flannel使用

cd /opt/etcd/ssl/

etcdctl --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem --endpoints="https://192.168.111.80:2379,https://192.168.111.90:2379,https://192.168.111.100:2379" set /coreos.com/network/config ' "Network": "172.17.0.0/16", "Backend": "Type": "vxlan"'


所在node节点操作
上传 flannel.sh 和 flannel-v0.10.0-linux-amnd64.tar.gz到/opt目录中,解压flannel压缩包

cd /opt

tar -zxvf flannel-v0.10.0-linux-amd64.tar.gz


创建工作目录

mkdir -p /opt/kubernetes/cfg,bin,ssl

将 flanneld 和 mk-docker-opts.sh 放入工作目录中的bin目录下
mv flanneld mk-docker-opts.sh /opt/kubernetes/bin/



执行脚本文件

chmod +x flannel.sh

./flannel.sh https://192.168.111.80:2379,https://192.168.111.90:2379,https://192.168.111.100:2379

systemctl status flanneld.service


//查看flannel用的网段和docker使用的参数
cat /run/flannel/subnet.env


配置docker连接flannel

//修改配置文件
vim /usr/lib/systemd/system/docker.service

----------------13行和14行添加------------------
13 EnvironmentFile=/run/flannel/subnet.env
14 ExecStart=/usr/bin/dockerd $DOCKER_NETWORK_OPTIONS -H fd:// --containerd=/run/containerd/containerd.sock


重载和重启docker服务

systemctl  daemon-reload
systemctl restart docker
ifconfig


node02节点和node01节点一样操作部署

方法一:

ping -I 172.17.44.1 172.17.55.1


方法二:

//两台node都需要这样操作

docker run -itd centos:7 

docker exec -it ed4265c2ee8d bash

yum install net-tools -y

ifconfig





总结

etcd集群部署:
准备cfssl证书生成工具
生成证书
准备etcd二进制包
生成etcd的配置文件和服务管理文件
启动etcd
把etcd01的配置文件,可执行文件,证书,etcd服务管理文件 复制到 etcd02 etcd03 节点上
etcd02 etcd03 修改 配置文件
启动etcd 加入集群
验证etcd集群状态

flannel网络部署:
flannel 实现 不同 node 上的 pod 相互通信用的
flannel 会把内部的pod iP 封装到 upd 中 根据 在 etcd 保存的路由表 通过物理网卡发送给目的 node 目的 node 在接受到转发来的数据后 由 flanneld 解封装 暴露出 udp 里的 内部 Pod ip ,再根据 目的Ip 由 flannel0 --> docker0 转发到目的 pod 中
使用etcdctl 在etcd 中添加 flannel 的网段和转发模式 upd、vxlan
准备 flannel 安装包
生成 docker 网络配置参数 并启动 flannel服务
修改 docker 启动参数,使docker0 网卡和 flannel网卡保持在一个网段里
验证 node 之间的容器通信是否正常

kubernetes节点服务搭建————二进制部署多节点服务搭建dashboardui部署(代码片段)

文章目录多master集群架构master2节点部署从master01节点上拷贝证书文件、各master组件的配置文件和服务管理文件到master02节点修改配置文件kube-apiserver中的IP在master02节点上启动各服务并设置开机自启查看node节点状态负载均衡部署安... 查看详情

kubernetes节点服务搭建————二进制部署|单master节点配置(master组件部署|node组件部署)(代码片段)

文章目录部署Master组件Master节点上操作创建kubernetes工作目录创建用于生成CA证书、相关组件的证书和私钥的目录复制CA证书、apiserver相关证书和私钥到kubernetes工作目录的ssl目录中上传kubernetes-server-linux-amd64.tar.gz到/opt/k8s/目录中&#x... 查看详情

kubernetes节点服务搭建————二进制部署|单master节点配置(master组件部署|node组件部署)(代码片段)

文章目录部署Master组件Master节点上操作创建kubernetes工作目录创建用于生成CA证书、相关组件的证书和私钥的目录复制CA证书、apiserver相关证书和私钥到kubernetes工作目录的ssl目录中上传kubernetes-server-linux-amd64.tar.gz到/opt/k8s/目录中&#x... 查看详情

kubernetes节点服务搭建————二进制部署|单master节点配置(一)(etcd和flannel)(代码片段)

文章目录常见的K8s按照部署方式Kubernetes二进制部署部署etcd集群master01上操作部署在node节点上修改配置部署Docker引擎flannel网络配置常见的通信方式flannel的工作流程flannel的搭建部署总结常见的K8s按照部署方式MinikubeMinikube是一个工... 查看详情

kubernetes节点服务搭建————二进制部署|单master节点配置(一)(etcd和flannel)(代码片段)

文章目录常见的K8s按照部署方式Kubernetes二进制部署部署etcd集群master01上操作部署在node节点上修改配置部署Docker引擎flannel网络配置常见的通信方式flannel的工作流程flannel的搭建部署总结常见的K8s按照部署方式MinikubeMinikube是一个工... 查看详情

kubernetes节点服务搭建————二进制部署|单master节点配置(一)(etcd和flannel)(代码片段)

文章目录常见的K8s按照部署方式Kubernetes二进制部署部署etcd集群master01上操作部署在node节点上修改配置部署Docker引擎flannel网络配置常见的通信方式flannel的工作流程flannel的搭建部署总结常见的K8s按照部署方式MinikubeMinikube是一个工... 查看详情

kubernetes节点服务搭建————二进制部署|单master节点配置(master组件部署|node组件部署)(代码片段)

文章目录部署Master组件Master节点上操作创建kubernetes工作目录创建用于生成CA证书、相关组件的证书和私钥的目录复制CA证书、apiserver相关证书和私钥到kubernetes工作目录的ssl目录中上传kubernetes-server-linux-amd64.tar.gz到/opt/k8s/目录中&#x... 查看详情

k8s------kubernetes单master集群二进制搭建(代码片段)

目录前言Kubernetes单Master节点集群二进制部署一.Kubernetes单Master集群架构二.环境准备三.Etcd集群部署1.准备签发证书环境2.生成CA证书、etcd服务器证书以及私钥3.安装Etcd4.在Master01节点启动Etcd集群节点015.将证书,命令文件,... 查看详情

k8s------kubernetes单master集群二进制搭建(代码片段)

目录前言Kubernetes单Master节点集群二进制部署一.Kubernetes单Master集群架构二.环境准备三.Etcd集群部署1.准备签发证书环境2.生成CA证书、etcd服务器证书以及私钥3.安装Etcd4.在Master01节点启动Etcd集群节点015.将证书,命令文件,... 查看详情

k8s------kubernetes单master集群二进制搭建(代码片段)

目录前言Kubernetes单Master节点集群二进制部署一.Kubernetes单Master集群架构二.环境准备三.Etcd集群部署1.准备签发证书环境2.生成CA证书、etcd服务器证书以及私钥3.安装Etcd4.在Master01节点启动Etcd集群节点015.将证书,命令文件,... 查看详情

kubernetes二进制部署(单master节点)(理论部分,详细部署步骤在下一篇哦~)(代码片段)

Kubernetes二进制部署(单Master节点)(理论部分,详细部署步骤在下一篇哦~)Kubernetes二进制部署一、环境准备二、部署etcd集群1、准备签发证书环境2、签发证书步骤3、etcd-cert.sh和etcd.sh脚本4、部署流程5、使用... 查看详情

k8s------kubernetes双master负载均衡集群搭建(代码片段)

...bernetes双Master负载均衡集群搭建是基于Kubernetes单Master集群二进制搭建的基础上进行搭建的。环境准备节点主机名系统IP地址服务K8S集群Master01master01CentOS7192.168.121.88kube-apiserverk 查看详情

kubernetes二进制部署单节点master(代码片段)

Kubernetes二进制部署单节点一.环境准备二部署etcd集群1.master节点部署2.在node1与node2节点修改3.在master1节点上进行启动三.flannel网络配置四.部署master组件五.部署node组件六.总结k8s集群单节点搭建:一.环境准备k8s集群master1:1... 查看详情

kubernetes二进制部署单节点master(代码片段)

Kubernetes二进制部署单节点一.环境准备二部署etcd集群1.master节点部署2.在node1与node2节点修改3.在master1节点上进行启动三.flannel网络配置四.部署master组件五.部署node组件六.总结k8s集群单节点搭建:一.环境准备k8s集群master1:1... 查看详情

kubernetes集群之二进制安装部署(单master节点)(代码片段)

目录前言一、常见的K8S按照部署方式二、安装部署分析三、首先部署ETCD集群3.1ETCD介绍3.2准备CFSSL证书签发环境3.3环境部署3.3.1搭建ETCD步骤3.3.2下载准备CFSSL证书制作工具3.3.3上传etcd-cert.sh和etcd.sh到/opt/k8s/目录中3.3.4安装ETCD服务3.3.... 查看详情

kubernetes单master节点集群二进制部署(代码片段)

目录前言Kubernetes单Master节点集群二进制部署一.Kubernetes单Master集群架构二.环境准备三.Etcd集群部署1.准备签发证书环境2.生成CA证书、etcd服务器证书以及私钥3.安装Etcd4.在Master01节点启动Etcd集群节点015.将证书,命令文件,... 查看详情

kubernetes集群之二进制安装部署(单master节点)(代码片段)

目录前言一、常见的K8S按照部署方式二、安装部署分析三、首先部署ETCD集群3.1ETCD介绍3.2准备CFSSL证书签发环境3.3环境部署3.3.1搭建ETCD步骤3.3.2下载准备CFSSL证书制作工具3.3.3上传etcd-cert.sh和etcd.sh到/opt/k8s/目录中3.3.4安装ETCD服务3.3.... 查看详情

kubernetes多master节点集群二进制部署(代码片段)

目录一、master02节点部署二、负载均衡部署三、部署DashboardUI多节点基于单节点部署,单节点部署点击此链接一、master02节点部署//从master01节点上拷贝证书文件、各master组件的配置文件和服务管理文件到master02节点scp-r/opt/etcd/r... 查看详情