Kubernetes(k8s)部署etcd集群

Kubernetes(k8s)部署etcd集群

一、实验环境

  • 本实验需求为3个节点即可,每个节点的配置2+4(2个CPU+4G内存)

角色分配:

1、master节点IP:192.168.126.10  2、node节点IP:192.168.126.20、192.168.126.30 
  • 官网源码包下载:https://github.com/kubernetes/kubernetes/releases?after=v1.13.1
  • ETCD 二进制包地址:https://github.com/etcd-io/etcd/releases

二、ETCD集群部署

2.1 master 节点部署

2.1.1 定义两个脚本文件

  • 创建k8s目录,在创建两个脚本
[root@localhost ~]# mkdir k8s [root@localhost ~]# cd k8s/ [root@localhost k8s]# ls   						 #从宿主机拖进来 etcd-cert.sh  etcd.sh [root@localhost k8s]# mkdir etcd-cert [root@localhost k8s]# mv etcd-cert.sh etcd-cert 
Kubernetes(k8s)部署etcd集群

etcd-cert.sh 证书制作脚本详解

[root@master k8s]# cat 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.226.128",     "192.168.226.132",     "192.168.226.133"     ],     "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.sh 启动脚本内容详解
[root@master k8s]# cat etcd.sh  #!/bin/bash #以下为使用格式:etcd名称 当前etcd的IP地址+完整的集群名称和地址 #example: ./etcd.sh etcd01 192.168.1.10 etcd02=https://192.168.1.11:2380,etcd03=https://192.168.1.12:2380  ETCD_NAME=$1						#位置变量1:etcd节点名称 ETCD_IP=$2						#位置变量2:节点地址 ETCD_CLUSTER=$3						#位置变量3:集群  WORK_DIR=/opt/etcd					#指定工作目录  cat <<EOF >$WORK_DIR/cfg/etcd				#在指定工作目录创建ETCD的配置文件 #[Member] ETCD_NAME="${ETCD_NAME}"				#etcd名称 ETCD_DATA_DIR="/var/lib/etcd/default.etcd" ETCD_LISTEN_PEER_URLS="https://${ETCD_IP}:2380"		#etcd IP地址:2380端口。用于集群之间通讯 ETCD_LISTEN_CLIENT_URLS="https://${ETCD_IP}:2379"	#etcd IP地址:2379端口,用于开放给外部客户端通讯  #[Clustering] ETCD_INITIAL_ADVERTISE_PEER_URLS="https://${ETCD_IP}:2380" ETCD_ADVERTISE_CLIENT_URLS="https://${ETCD_IP}:2379"	#对外提供的url使用https的协议进行访问 ETCD_INITIAL_CLUSTER="etcd01=https://${ETCD_IP}:2380,${ETCD_CLUSTER}"		#多路访问 ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"		#tokens 令牌环名称:etcd-cluster ETCD_INITIAL_CLUSTER_STATE="new"			#状态,重新创建 EOF  cat <<EOF >/usr/lib/systemd/system/etcd.service		#定义ectd的启动脚本 [Unit]								#基本项			 Description=Etcd Server					#类似为 etcd 服务 After=network.target					 After=network-online.target Wants=network-online.target  [Service]						#服务项 Type=notify EnvironmentFile=${WORK_DIR}/cfg/etcd	#etcd文件位置 ExecStart=${WORK_DIR}/bin/etcd 			#准启动状态及以下的参数 --name=${ETCD_NAME}  --data-dir=${ETCD_DATA_DIR}  --listen-peer-urls=${ETCD_LISTEN_PEER_URLS}  --listen-client-urls=${ETCD_LISTEN_CLIENT_URLS},http://127.0.0.1:2379  --advertise-client-urls=${ETCD_ADVERTISE_CLIENT_URLS}  #以下为群集内部的设定 --initial-advertise-peer-urls=${ETCD_INITIAL_ADVERTISE_PEER_URLS}  --initial-cluster=${ETCD_INITIAL_CLUSTER}  --initial-cluster-token=${ETCD_INITIAL_CLUSTER_TOKEN} 	#群集内部通信,也是使用的令牌,为了保证安全(防范中间人窃取) --initial-cluster-state=new  --cert-file=${WORK_DIR}/ssl/server.pem 		#证书相关参数 --key-file=${WORK_DIR}/ssl/server-key.pem  --peer-cert-file=${WORK_DIR}/ssl/server.pem  --peer-key-file=${WORK_DIR}/ssl/server-key.pem  --trusted-ca-file=${WORK_DIR}/ssl/ca.pem  --peer-trusted-ca-file=${WORK_DIR}/ssl/ca.pem Restart=on-failure LimitNOFILE=65536					#开放最多的端口号  [Install] WantedBy=multi-user.target				#进行启动 EOF  systemctl daemon-reload					#参数重载 systemctl enable etcd systemctl restart etcd 

2.1.2 下载证书制作工具

下载cfssl官方包

[root@localhost k8s]# vim cfssl.sh 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 /usr/local/bin/cfssljson /usr/local/bin/cfssl-certinfo    #给文件可执行权限 [root@localhost k8s]# bash cfssl.sh  [root@localhost k8s]# ls /usr/local/bin/ cfssl  cfssl-certinfo  cfssljson [root@localhost k8s]# chmod + /usr/local/bin/* 

注:我们之前是下载好的,就用下载好的工具制作

[root@localhost k8s]#cd /usr/local/bin [root@localhost bin]#rz -E rz waiting to receive. [root@localhost bin]#ls cfssl  cfssl-certinfo  cfssljson [root@localhost bin]#chmod +x * [root@localhost bin]#ls cfssl  cfssl-certinfo  cfssljson 
Kubernetes(k8s)部署etcd集群

2.1.3 开始制作证书

*cfssl 生成证书工具 cfssljson通过传入json文件生成证书 cfssl-certinfo查看证书信息

定义生成CA证书的配置文件

[root@localhost k8s]# cd etcd-cert/ cat > ca-config.json <<EOF			#定义ca证书配置文件 {   "signing": {     "default": {       "expiry": "87600h"     },     "profiles": {       "www": {          "expiry": "87600h",          "usages": [             "signing",             "key encipherment",             "server auth",             "client auth"              ]         }      }            } } EOF   - **定义生成证书签名文件**  cat > ca-csr.json <<EOF 			#实现证书签名 {        "CN": "etcd CA",     "key": {         "algo": "rsa",         "size": 2048     },     "names": [         {             "C": "CN",             "L": "Beijing",             "ST": "Beijing"         }     ] } EOF 
  • 生成证书

    需生成ca-key.pem 密钥证书和ca.pem证书

cfssl gencert -initca ca-csr.json | cfssljson -bare ca -       #生产证书,生成ca-key.pem  ca.pem  
Kubernetes(k8s)部署etcd集群

指定etcd三个节点之间的通信验证

cat > server-csr.json <<EOF							#指定etcd三个节点之间的通信验证 {     "CN": "etcd",     "hosts": [     "192.168.126.10",     "192.168.126.20",     "192.168.126.30"     ],     "key": {         "algo": "rsa",         "size": 2048     },     "names": [         {             "C": "CN",             "L": "BeiJing",             "ST": "BeiJing"         }     ] } EOF 
  • 生成服务器端密钥证书:server-key.pem 和服务器端证书:server.pem
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=www server-csr.json | cfssljson -bare server				 #生成ETCD证书 server-key.pem   server.pem 
Kubernetes(k8s)部署etcd集群

2.1.4 ETCD 部署

下载、解压软件包

[root@localhost k8s]#ls etcd-cert  etcd.sh  etcd-v3.3.10-linux-amd64.tar.gz [root@localhost k8s]#tar zxvf etcd-v3.3.10-linux-amd64.tar.gz  [root@localhost k8s]# mkdir /opt/etcd/{cfg,bin,ssl} -p 				#配置文件,命令文件,证书 [root@localhost k8s]# cd etcd-v3.3.10-linux-amd64/ [root@localhost etcd-v3.3.10-linux-amd64]# ls Documentation  etcd  etcdctl  README-etcdctl.md  README.md  READMEv2-etcdctl.md [root@localhost etcd-v3.3.10-linux-amd64]# mv etcd etcdctl /opt/etcd/bin/ [root@localhost k8s]# cd etcd-cert/ [root@localhost etcd-cert]# ls ca-config.json  ca.csr  ca-csr.json  ca-key.pem  ca.pem  etcd-cert.sh  server.csr  server-csr.json  server-key.pem  server.pem [root@localhost etcd-cert]# cp *.pem /opt/etcd/ssl	#证书拷贝 
Kubernetes(k8s)部署etcd集群

进入卡住状态等待其他节点加入

执行此命令会产生两个文件,一个是配置文件,一个是启动脚本

同时,等待加入的过程大约在5分钟左右,如果没有节点接入则会自动退出

[root@localhost k8s]# bash etcd.sh etcd01 192.168.126.10 etcd02=https://192.168.126.20:2380,etcd03=https://192.168.126.30:2380		#进入卡住状态等待其他节点加入 [root@localhost ~]# ps -ef | grep etcd				 #使用另外一个会话打开,会发现etcd进程已经开启 
Kubernetes(k8s)部署etcd集群
  • 最后,将证书和启动脚本推送/复制到两台node节点中
[root@localhost k8s]# scp -r /opt/etcd/ root@192.168.126.20:/opt/			#拷贝证书去其他节点 [root@localhost k8s]# scp -r /opt/etcd/ root@192.168.126.30:/opt				#拷贝证书去其他节点  [root@localhost k8s]# scp /usr/lib/systemd/system/etcd.service root@192.168.126.20:/usr/lib/systemd/system/				#启动脚本拷贝其他节点 [root@localhost k8s]# scp /usr/lib/systemd/system/etcd.service root@192.168.126.30:/usr/lib/systemd/system/				#启动脚本拷贝其他节点 

2.2 node节点部署

在node01和node02节点修改

[root@localhost ~]# vim /opt/etcd/cfg/etcd #[Member] ETCD_NAME="etcd02" ETCD_DATA_DIR="/var/lib/etcd/default.etcd" ETCD_LISTEN_PEER_URLS="https://192.168.126.20:2380"					#ip地址修改对应的node节点 ETCD_LISTEN_CLIENT_URLS="https://192.168.126.20:2379"				#ip地址修改对应的node节点  #[Clustering] ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.126.20:2380"		#ip地址修改对应的node节点 ETCD_ADVERTISE_CLIENT_URLS="https://192.168.126.20:2379"				#ip地址修改对应的node节点 ETCD_INITIAL_CLUSTER="etcd01=https://192.168.126.20:2380,etcd02=https://192.168.126.5:2380,etcd03=https://192.168.126.3:2380" ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster" ETCD_INITIAL_CLUSTER_STATE="new"  [root@localhost ssl]# systemctl start etcd [root@localhost ssl]# systemctl enable etcd [root@localhost ssl]# systemctl status etcd 

在Master检查集群状态

检查群集状态(需要在有证书的目录下使用此命令)

[root@localhost ~]# cd /opt/etcd/ssl [root@localhost ~]# /opt/etcd/bin/etcdctl --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem --endpoints="https://192.168.126.10:2379,https://192.168.126.20:2379,https://192.168.126.30:2379" cluster-health  tcd [root@localhost ssl]# systemctl status etcd 
Kubernetes(k8s)部署etcd集群

版权声明:玥玥 发表于 2021-04-12 4:02:00。
转载请注明:Kubernetes(k8s)部署etcd集群 | 女黑客导航