HELLO---------kubernetes 集群部署之ETCD数据库部署
一、实验环境1、需要三台服务器主机名ip搭建的服务信息master20.0.0.10kube-apiserverkube-controller-managerkube-scheduleretcdnode120.0.0.11kubeletkube-proxydocker flanneletcdnode220.0.0.12kubeletkube-proxydocker flanneletcd上面软件说
一、实验环境
1、需要三台服务器
主机名 | ip | 搭建的服务信息 |
---|---|---|
master | 20.0.0.10 | kube-apiserver kube-controller-manager kube-scheduler etcd |
node1 | 20.0.0.11 | kubelet kube-proxy docker flannel etcd |
node2 | 20.0.0.12 | kubelet kube-proxy docker flannel etcd |
上面软件说明
##各配置的作用:
etcd生产环境中往往放在master上面,,,构建一个集群最少需要三个节点
kube-apiserver 就是master的主脑部分
kube-controller-manager 控制器的管理器
kube-scheduler 调度器
kubelet 3希望master给它颁发证书
kube-proxy 4提供对外的服务
docker 1容器
flannel 2网络主键
2、关闭相关的安全软件,因为这时实验环境,所以直接关闭就行,改下主机名
hostnamectl set-hostname node2
su
systemctl stop firewalld
iptables -F
setenforce 0
二、进行实验
在master上操作
1、创建工作目录,传文件,##从宿主机将所需要的个文件放在k8s目录
mkdir k8s
cd k8s/
ls ##从宿主机将所需要的个文件在这,两个脚本,一个目录
etcd-cert etcd-cert.sh etcd.sh
cd etcd-cert/
chmod +x cfssl cfssl-certinfo cfssljson
mv cfssl cfssl-certinfo cfssljson /usr/local/bin/
ls /usr/local/bin/ ##查看下有有没有下面三个文件
cfssl cfssl-certinfo cfssljson
#cfssl:生成证书工具
#cfssl-certinfo:查看证书信息
#cfssljson:通过传入json文件生成证书
2、制作CA证书
cd ..
mv etcd-cert.sh etcd-cert/
cd etcd-cert/
1、创建ca证书的配置文件
vim ca-config.json
{
"signing": {
"default": { ##系统设定值
"expiry": "87600h" ##证书的有效期10年
},
"profiles": { ##配置
"www": { ##台头是www
"expiry": "87600h", ##时效 87600h
"usages": [ ##常见用法(标签)
"signing", ##签字签名
"key encipherment", ##加密
"server auth", ##服务端验证
"client auth" ##客户端验证
]
}
}
}
}
2、创建ca证书的签名证书 ##看到csr这个就是签名的证书
vim ca-csr.json
{
"CN":"etcd CA", ##CN中国
"key": { ##秘钥
"algo":"rsa", ##秘钥类型采用rsa非对称秘钥
"size":2048 ##秘钥长度
},
"names": [ ##证书的名称
{
"C":"CN", ##来自于中国
"L":"Beijing", ##地区
"ST":"Beijing" ##时区
}
]
}
3、用ca签名证书生成ca证书,得到ca-key.pem ca.pem
cfssl gencert -initca ca-csr.json | cfssljson -bare ca -
ls ##能看到下面六个文件
ca-config.json ca.csr ca-csr.json ca-key.pem ca.pem etcd-cert.sh
上面指令3的部分解释。
gencert -initca读取
ca-csr.json初始化用的
cfssljson -bare基本信息的读取时-bare
ca-key.pem ca.pem这两个是所获得的证书
ca-config.json做server要用到的
3、指定etcd三个节点之间的通信验证—需要服务器签名证书 server-csr.json
vim server-csr.json ##通讯验证证书
{
"CN": "etcd",
"hosts": [ ##指明host的文件地址
"20.0.0.10",
"20.0.0.11",
"20.0.0.12"
],
"key": {
"algo": "rsa", ##给你ca相匹配的秘钥证明
"size": 2048
},
"names": [
{
"C": "CN",
"L": "Beijing",
"ST": "Beijing"
}
]
}
4、用ca-key.pem、ca.pem、服务器签名证书 生成ETCD证书 ----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
ls ##看一下会有下面八个证书#其中server-key.pem server.pem是最重要的
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
5、使用证书、etcd脚本搭建ETCD集群
5、1、上传一个生成ETCD配置文件的脚本etcd.sh到 /root/k8s 目录下,脚本内容如下:
cd ..
tar zxf etcd-v3.3.10-linux-amd64.tar.gz
5、2、解压后到etcd-v3.3.10-linux-amd64下会生成两个文件etcd 和etcdctl是很重要的。
mkdir /opt/etcd/{cfg,bin,ssl} -p ##在opt目录中创建etcd集群的工作目录
ls /opt/etcd/
#bin cfg ssl ##看是否创建成功
cd /root/k8s/etcd-v3.3.10-linux-amd64/
mv etcd etcdctl /opt/etcd/bin/ ##将解压后的文件放在/opt/etcd/bin 目录下
ls /opt/etcd/bin/ ##查看一下有两个文件了etcd etcdctl
cd /root/k8s/etcd-cert/
cp *.pem /opt/etcd/ssl/ ##将所有的证书放在/opt/etcd/ssl中
ls /opt/etcd/ssl/
#ca-key.pem ca.pem server-key.pem server.pem ##再去查看下有没有
cd /root/k8s/ ##将这个三个压缩包gz结尾的从宿主机放在它下面
#cfssl.sh etcd-v3.3.10-linux-amd64 kubernetes-server-linux-amd64.tar.gz
#etcd-cert etcd-v3.3.10-linux-amd64.tar.gz
#etcd.sh flannel-v0.10.0-linux-amd64.tar.gz
5、3、执行 etcd.sh 脚本产生etcd集群的配置脚本和服务启动脚本,进入卡住状态等待其他节点加入
#注意:修改成自己的ip地址《vim /root/k8s/etcd.sh这个文件中能看你配置的群集信息》
[root@localhost k8s]# bash etcd.sh etcd01 20.0.0.10 etcd02=https://20.0.0.11:2380,etcd03=https://20.0.0.12:2380
三、使用另外一个会话窗口,会发现etcd进程己经开启
ps -ef | grep etcd
.... ##能显示下面的端口信息
root 16431 0.0 0.0 112664 972 pts/2 S+ 22:38 0:00 grep --color=auto etcd
scp -r /opt/etcd/ root@20.0.0.11:/opt/
scp -r /opt/etcd/ root@20.0.0.12:/opt/
#将所有的配置文件远程拷贝到对方的/opt目录下,记得一定是这个目录,不然你要重新改配置文件。
scp /usr/lib/systemd/system/etcd.service root@20.0.0.11:/usr/lib/systemd/system/
scp /usr/lib/systemd/system/etcd.service root@20.0.0.12:/usr/lib/systemd/system/
#将启动脚本远程拷贝到node节点的启动脚本的位置
四、在node上面进行相关的更改节点node2的node1差不对这里不多解释。
#主机名最好改一下
hostnamectl set-hostname node1
su
cd /opt/etcd/cfg #
[root@node2 cfg]# vim etcd ##修改集群的名称和ip
#[Member] ##成员
ETCD_NAME="etcd02" ##修改etcd节点的名称
ETCD_DATA_DIR="/var/lib/etcd/default.etcd" ##服务运行数据保存的路径(设置数据保存的目录)
ETCD_LISTEN_PEER_URLS="https://20.0.0.11:2380" ##监听的同伴通信的地址,比如http://ip:2380,如果有多个,使用逗号分隔。需要所有节点都能够访问,所以不要使用 localhost!(用于监听其他etcd member的url (统一资源定位器,有叫网页地址))
ETCD_LISTEN_CLIENT_URLS="https://20.0.0.11:2379" ##监听的客户端服务地址(对外提供服务的地址(CLIENT客户机))
#[Clustering] #使成群(cluster的现在分词)或聚类
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://20.0.0.11:2380" ##对外公告的该节点同伴监听地址,这个值会告诉集群中其他节点
ETCD_ADVERTISE_CLIENT_URLS="https://20.0.0.11:2379" ##对外公告的该节点客户端监听地址,这个值会告诉集群中其他节点。
ETCD_INITIAL_CLUSTER="etcd01=https://20.0.0.10:2380,etcd02=https://20.0.0.11:2380,etcd03=https://20.0.0.12:2380" ##集群中所有节点的信息,格式为
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster" ##集群的ID,多个集群的时候,每个集群的ID必须保持唯一
ETCD_INITIAL_CLUSTER_STATE="new" ##新建集群的时候,这个值为 new;假如加入已经存在的集群,这个值为existing。
这里是具体的要更改的说明
vim etcd
#[Member]
ETCD_NAME="etcd02" ##改
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://20.0.0.11:2380" ##改
ETCD_LISTEN_CLIENT_URLS="https://20.0.0.11:2379" ##改
##
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://20.0.0.11:2380" ##改
ETCD_ADVERTISE_CLIENT_URLS="https://20.0.0.11:2379" ##改
ETCD_INITIAL_CLUSTER="etcd01=https://20.0.0.10:2380,etcd02=https://20.0.0.11:2380,etcd03=https://20.0.0.12:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
五、两个node节点都改过后可以去master节点上将集群打开,,,原来开的应该会超时而自动退出,所有要重新去开启,
bash etcd.sh etcd01 20.0.0.10 etcd02=https://20.0.0.11:2380,etcd03=https://20.0.0.12:2380Created symlink from /etc/systemd/system/multi-user.target.wants/etcd.service to /usr/lib/systemd/system/etcd.service.
六、然后回到node节点开启etcd
[root@localhost ~]# systemctl start etcd
[root@localhost ~]# systemctl status etcd
若是running状态证明是正常的
七、最后到master去执行集群健康检查
cd /root/k8s/etcd-cert
/opt/etcd/bin/etcdctl --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem --endpoints="https://20.0.0.10:2379,https://20.0.0.11:2379,https://20.0.0.12:2379" cluster-health
member 4a9f1750486efa02 is healthy: got healthy result from https://20.0.0.10:2379
member c1b99d661e10b568 is healthy: got healthy result from https://20.0.0.11:2379
member f33c8e897853b7c4 is healthy: got healthy result from https://20.0.0.12:2379
cluster is healthy
出现cluster is healthy说明正常
更多推荐
所有评论(0)