K8S二进制部署

K8S二进制部署

  • kubernetes二进制部署
    • 部署etcd集群
    • 签发证书环境

kubernetes二进制部署

部署etcd集群

etcd是CoreOS团队于2013年6月发起的开源项目,它的目标是构建一个高可用的分布式键值(key-value) 数据库。etcd内部采用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语言编写。
CFSSL使用配置文件生成证书,因此自签之前,需要生成它识别的json格式的配置文件,CFSSL 提供了方便的命令行生成配置文件。
CFSSL用来为etcd提供TLS 证书,它支持签三种类型的证书:

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

这里全部都使用同一套证书认证。

//下载证书制作工具
wget https: //pkg.cfssl .org/R1.2/cfssl_ linux-amd64 -0 /usr/ local/bin/cfssl
wget https: //pkg.cfssl.org/R1.2/cfssljson linux-amd64 -0 /usr/local/bin/cfsslj son
wget https: //pkg.cfssl.org/R1.2/cfssl-certinfo 1 inux-amd64 -0 /usr/local /bin/cfssl-certinfo
或
curl -L https:// 4pkg.cfssl. org/R1.2/cfssl_ linux-amd64 -o /usr/local/bin/cfssl
curl -L https://pkg. cfssl .org/R1.2/cfssljson_ linux-amd64 -0 /usr/ local/bin/cfssljson
curl -L https://pkg. cfssl. org/R1.2/cfssl-certinfo linux-amd64 -0 /usr/ local/bin/cfssl-certinfo .

chmod +x /usr/local/bin/cfss1*
cfssl: 证书签发的工具命令
cfssljson: 将cfssl 生成的证书(json格式)变为文件承载式证书
cfssl-certinfo:验证证书的信息
cfssl-certinfo -cert < 证书名称>
#查看证书的信息

master节点服务器操作

[root@master1 ~] hostnamectl set-hostname master01
[root@master1 ~] su
[root@master01 ~] cd /usr/local/bin
[root@master01 bin] rz -E		将etcd-cert三个文本拖入指定目录下
rz waiting to receive.
[root@master01 bin] chmod +x *
[root@master01 bin] ls		
cfssl  cfssl-certinfo  cfssljson
[root@master01 bin] systemctl stop firewalld
[root@master01 bin] setenforce 0
[root@master01 bin] ll		
总用量 18808
-rwxr-xr-x. 1 root root 10376657 2月  17 17:08 cfssl
-rwxr-xr-x. 1 root root  6595195 2月  17 17:08 cfssl-certinfo
-rwxr-xr-x. 1 root root  2277873 2月  17 17:05 cfssljson
[root@master01 bin] cd /opt
[root@master01 opt] ls
lnmp.sh  rh  yum.sh
[root@master01 opt] rm -rf *
[root@master01 opt] ls
[root@master01 opt] mkdir k8s		创建k8s目录
[root@master01 opt] ls
k8s
[root@master01 opt] cd k8s/
[root@master01 k8s] rz -E
rz waiting to receive.
[root@master01 k8s] ls		上传etcd-cert.sh和 etcd.sh到/opt/k8s目录下
etcd-cert.sh  etcd.sh
[root@master01 k8s] vim etcd-cert.sh 

K8S二进制部署_第1张图片
vim etcd.sh
K8S二进制部署_第2张图片

cat etcd.sh 
#!/bin/bash
#以下为使用格式:etcd名称 当前etcd的IP地址+完整的集群名称和地址
# example: ./etcd.sh etcd01 192.168.64.128 etcd02=https://192.168.64.129:2380,etcd03=https://192.168.64.130:2380
ETCD_NAME=$1						#位置变量1:etcd节点名称
ETCD_IP=$2						#位置变量2:节点地址
ETCD_CLUSTER=$3						#位置变量3:集群
WORK_DIR=/opt/etcd					#指定工作目录
cat <$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 </usr/lib/systemd/system/etcd.service		#定义ectd的启动脚本
[Unit]								#基本项			
Description=Etcd Server					#类似为 etcd 服务
After=network.target					#vu癌症
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
[root@master01 k8s] mkdir etcd-cert		创建证书目录
[root@master01 k8s] ls
etcd-cert  etcd-cert.sh  etcd.sh
[root@master01 k8s] mv etcd-cert.sh etcd-cert		将证书脚本放在证书目录下
[root@master01 k8s] ls
etcd-cert  etcd.sh
[root@master01 k8s] cd etcd-cert/
[root@master01 etcd-cert] ls
etcd-cert.sh
[root@master01 etcd-cert] chmod +x *
[root@master01 etcd-cert] ./etcd-cert.sh 	执行脚本
2021/08/13 06:54:39 [INFO] generating a new CA key and certificate from CSR
2021/08/13 06:54:39 [INFO] generate received request
2021/08/13 06:54:39 [INFO] received CSR
2021/08/13 06:54:39 [INFO] generating key: rsa-2048
2021/08/13 06:54:39 [INFO] encoded CSR
2021/08/13 06:54:40 [INFO] signed certificate with serial number 619614046809237172556931384023752917182471755986
2021/08/13 06:54:40 [INFO] generate received request
2021/08/13 06:54:40 [INFO] received CSR
2021/08/13 06:54:40 [INFO] generating key: rsa-2048
2021/08/13 06:54:40 [INFO] encoded CSR
2021/08/13 06:54:40 [INFO] signed certificate with serial number 87622395903266602853740548479298909642519650542
2021/08/13 06:54:40 [WARNING] This certificate lacks a "hosts" field. This makes it unsuitable for
websites. For more information see the Baseline Requirements for the Issuance and Management
of Publicly-Trusted Certificates, v.1.1.6, from the CA/Browser Forum (https://cabforum.org);
specifically, section 10.2.3 ("Information Requirements").

K8S二进制部署_第3张图片

[root@master01 etcd-cert] cd /opt/k8s
[root@master01 k8s] rz -E		上传etcd压缩包
rz waiting to receive.
[root@master01 k8s] ls
etcd-cert  etcd.sh  etcd-v3.3.10-linux-amd64.tar.gz
[root@master01 k8s] tar -zxvf etcd-v3.3.10-linux-amd64.tar.gz		解压
...
[root@master01 k8s] ls
etcd-cert  etcd.sh  etcd-v3.3.10-linux-amd64  etcd-v3.3.10-linux-amd64.tar.gz
[root@master01 k8s] mkdir -p /opt/etcd/{cfg,bin,ssl}		创建用于存放 etcd 配置文件,命令文件,证书的目录
[root@master01 k8s] cd /opt/etcd
[root@master01 etcd] ls
bin  cfg  ssl
[root@master01 etcd] cd /opt/k8s/
[root@master01 k8s] cd etcd-v3.3.10-linux-amd64/
[root@master01 etcd-v3.3.10-linux-amd64] ls
Documentation  etcd etcdctl README-etcdctl.md  README.md  READMEv2-etcdctl.md
[root@master01 etcd-v3.3.10-linux-amd64] mv etcd etcdctl /opt/etcd/bin/		将刚刚解压出来的etcd文件中的 etcd 和 etcdctl移动到 /opt/etcd/bin目录下
[root@master01 etcd-v3.3.10-linux-amd64] cd ..
[root@master01 k8s] cd etcd-cert/
[root@master01 etcd-cert] ll
总用量 40
-rw-r--r--. 1 root root  287 8月  13 06:54 ca-config.json
-rw-r--r--. 1 root root  952 8月  13 06:54 ca.csr
-rw-r--r--. 1 root root  206 8月  13 06:54 ca-csr.json
-rw-------. 1 root root 1679 8月  13 06:54 ca-key.pem
-rw-r--r--. 1 root root 1257 8月  13 06:54 ca.pem
-rwxr-xr-x. 1 root root 3667 6月  24 20:36 etcd-cert.sh
-rw-r--r--. 1 root root 1013 8月  13 06:54 server.csr
-rw-r--r--. 1 root root  290 8月  13 06:54 server-csr.json
-rw-------. 1 root root 1679 8月  13 06:54 server-key.pem
-rw-r--r--. 1 root root 1334 8月  13 06:54 server.pem
[root@master01 etcd-cert] cp *.pem /opt/etcd/ssl		将刚刚解压出来的etcd文件中的 私钥和公钥还有证书 移动到 /opt/etcd/ssl目录下
[root@master01 etcd-cert] cd /opt/etcd
[root@master01 etcd] ls bin
etcd  etcdctl
[root@master01 etcd] ls ssl
ca-key.pem  ca.pem  server-key.pem  server.pem
[root@master01 etcd] cd /opt/k8s
[root@master01 k8s] ./etcd.sh etcd01 192.168.64.128 etcd02=https://192.168.64.129:2380,etcd03=https://192.168.64.130:2380
Created symlink from /etc/systemd/system/multi-user.target.wants/etcd.service to /usr/lib/systemd/system/etcd.service.
进入卡顿状态,等待其他节点加入,需要3台同时启动

将opt目录下的文件全部传给node01和node02服务器

在这里插入代码片

K8S二进制部署_第4张图片
将/usr/lib/systemd/system文件下的etcd.service文件传给其他两台服务器
在这里插入图片描述
在这里插入图片描述
两台node节点服务器操作
K8S二进制部署_第5张图片
K8S二进制部署_第6张图片

你可能感兴趣的:(k8s)