二进制部署Kubernetes集群(单Master节点
部署etcd集群
etcd特点及端口 etcd 作为服务发现系统,有以下的特点: 简单: 安装配置简单,而且提供了HTTP API进行交互,使用也很简单安全:支持ssL证书验证 快速: 单实例支持每秒2k+读操作 可靠: 采用raft算法,实现分布式系统数据的可用性和一致性
etcd 日前默认使用2379端口提供HTTP AP工服务, 2380端口和peer通信(这两个端口已经被TANA(互联网数字分配机构)官方预留给etcd)。 即etcd默认使用2379端口对外为客户端提供通讯,使用端口2380来进行服务器间内部通讯。 etcd在生产环境中一般推荐集群方式部署。由于etcd 的leader选举机制,要求至少为3台或以上的奇数台。
2、准备签发证书环境 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节点操作
官网地址:https://github.com/kubernetes/kubernetes/releases?after=v1.13.1 下载官方构建的二进制包
mkdir k8s
cd k8s/
ls //从宿主机拖进来
(etcd-cert.sh etcd.sh)
mkdir etcd-cert
mv etcd-cert.sh etcd-cer
载证书制作工具
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
下载cfssl官方包
bash cfssl.sh
ls /usr/local/bin/
查看结果
cfssl cfssl-certinfo cfssljson
制作证书
//定义ca证书
cat > ca-config.json <<EOF
{
"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 -
2020/08/1216:32:56 [INFO] generating a new CA key and certificate from CSR
2020/08/12 16:32:56 [INFO] generate received request
2020/08/12 16:32:56 [INFO] received CSR
2020/08/12 16:32:56 [INFO] generating key: rsa-2048
2020/08/12 16:32:56 [INFO] encoded CSR
2020/08/12 16:32:56 [INFO] signed certificate with serial number 595395605361409801445623232629543954602649157326
指定etcd三个节点之间的通信验证
cat > server-csr.json <<EOF
{
"CN": "etcd",
"hosts": [
"192.168.195.149",
"192.168.195.150",
"192.168.195.151"
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "BeiJing",
"ST": "BeiJing"
}
]
}
EOF
启动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文件中的 etcd 和 etcdctl移动到 /opt/etcd/bin目录下 将刚刚解压出来的etcd文件中的 私钥和公钥还有证书 移动到 /opt/etcd/ssl目录下
mkdir -p /opt/etcd/{cfg,bin,ssl}
mv /opt/k8s/etcd-v3.3.10-linuk-amd64/etcd /opt/k8s/etcd-v3.3.10-linux-amd64/etcdctl /opt/etcd/bin/
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
在node节点上修改配置
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状态
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
部署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
systemctl start docker
systemctl status docker
flannel网络配置
flannel是实现不同node中Pod相互通信用的。 1、常见的通信方式 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中
搭建部署
master节点操作
1.写入分配的子网段到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节点操作
2.上传 flannel.sh 和 flannel-v0.10.0-linux-amnd64.tar.gz到/opt目录中,解压flannel压缩包
flannel软件包
flannel.sh脚本文件
cd /opt
tar -zxvf flannel-v0.10.0-linux-amd64.tar.gz
3.创建工作目录
mkdir -p /opt/kubernetes/{cfg,bin,ssl}
将 flanneld 和 mk-docker-opts.sh 放入工作目录中的bin目录下
mv flanneld mk-docker-opts.sh /opt/kubernetes/bin/
4.执行脚本文件
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
5.配置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
|