Kubernetes(七)Etcd数据库集群部署
etcd是qos开源的一个key/value系统,主要用于服务的注册发现,共享配置。etcd现在也作为kubernetes的存储。
3,5,7节点是推荐配置;3个冗余1个节点故障,6个冗余2个节点故障,以此类推。会自动选举一个leader,数据会写入leader,同步到从节点;如果少于3是无法自动选举leader的;raft协议可以深入了解。
一、修改主机名称(也可以在系统初始化步骤做好)
hostnamectl set-hostname k8s-master1
hostnamectl set-hostname k8s-master2
hostnamectl set-hostname k8s-master3
hostnamectl set-hostname k8s-node1
hostnamectl set-hostname k8s-node2
hostnamectl set-hostname k8s-node3
二、准备etcd安装包
三、解压安装包
tar zxvf etcd.tar.gz
四、解压后会看到2个文件
- etcd
- bin
- etcd #可执行文件,主程序
- etcdctl #etcd客户端
- cfg #配置文件
- ssl #证书文件
- bin
- etcd.service 利用systemd管理etcd服务
etcd/cfg/etcd.conf配置文件说明:
cat etcd.conf
输出以下信息:
#[Member]#节点信息
ETCD_NAME="etcd-1" #集群名称,必须唯一
ETCD_DATA_DIR="/var/lib/etcd/default.etcd" #etcd存放数据的目录
ETCD_LISTEN_PEER_URLS="https://192.168.31.61:2380" #etcd监听的集群IP和端口,集群内部通信(当前机器IP)
ETCD_LISTEN_CLIENT_URLS="https://192.168.31.61:2379" #客户端监听的IP和端口,程序链接用这个(当前机器IP)
#[Clustering]#集群信息
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.31.61:2380" #集群通告地址,集群内部通信(当前机器IP)
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.31.61:2379" #集群客户端地址(当前机器IP)
ETCD_INITIAL_CLUSTER="etcd-1=https://192.168.31.61:2380,etcd-2=https://192.168.31.62:2380,etcd-3=https://192.168.31.63:2380" #集群节点的所有链接信息,集群的ip和端口,通过这个组建集群
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster" #集群口令,可以自定义
ETCD_INITIAL_CLUSTER_STATE="new" #新建集群是new,如果是已存在集群用exsiting
ETCD_NAME="etcd-1" #集群名称,必须唯一
ETCD_DATA_DIR="/var/lib/etcd/default.etcd" #etcd存放数据的目录
ETCD_LISTEN_PEER_URLS="https://192.168.31.61:2380" #etcd监听的集群IP和端口,集群内部通信(当前机器IP)
ETCD_LISTEN_CLIENT_URLS="https://192.168.31.61:2379" #客户端监听的IP和端口,程序链接用这个(当前机器IP)
#[Clustering]#集群信息
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.31.61:2380" #集群通告地址,集群内部通信(当前机器IP)
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.31.61:2379" #集群客户端地址(当前机器IP)
ETCD_INITIAL_CLUSTER="etcd-1=https://192.168.31.61:2380,etcd-2=https://192.168.31.62:2380,etcd-3=https://192.168.31.63:2380" #集群节点的所有链接信息,集群的ip和端口,通过这个组建集群
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster" #集群口令,可以自定义
ETCD_INITIAL_CLUSTER_STATE="new" #新建集群是new,如果是已存在集群用exsiting
etcd.service配置文件说明:
cat etcd.service
输出以下信息:
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target
[Service]
Type=notify
EnvironmentFile=/opt/etcd/cfg/etcd.conf #读取配置文件,下面使用的就是配置文件的变量
ExecStart=/opt/etcd/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 \
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target
[Service]
Type=notify
EnvironmentFile=/opt/etcd/cfg/etcd.conf #读取配置文件,下面使用的就是配置文件的变量
ExecStart=/opt/etcd/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 \
#客户端和etcd集群内部实际上是同一套证书,只是需要都单独配置一下
--cert-file=/opt/etcd/ssl/server.pem \ #客户端访问使用的证书 server.pem
--key-file=/opt/etcd/ssl/server-key.pem \ #客户端访问使用的证书 server-key.pem
--peer-cert-file=/opt/etcd/ssl/server.pem \ #etcd集群内部访问使用的证书 server.pem
--peer-key-file=/opt/etcd/ssl/server-key.pem \ #etcd集群内部访问使用的证书 server-key.pem
--trusted-ca-file=/opt/etcd/ssl/ca.pem \ #客户端访问使用的证书,ca.pem 如果是权威机构的,这个可以不用配置
--peer-trusted-ca-file=/opt/etcd/ssl/ca.pem #etcd集群内部访问使用的证书 ca.pem 如果是权威机构的,这个可以不用配置
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
--cert-file=/opt/etcd/ssl/server.pem \ #客户端访问使用的证书 server.pem
--key-file=/opt/etcd/ssl/server-key.pem \ #客户端访问使用的证书 server-key.pem
--peer-cert-file=/opt/etcd/ssl/server.pem \ #etcd集群内部访问使用的证书 server.pem
--peer-key-file=/opt/etcd/ssl/server-key.pem \ #etcd集群内部访问使用的证书 server-key.pem
--trusted-ca-file=/opt/etcd/ssl/ca.pem \ #客户端访问使用的证书,ca.pem 如果是权威机构的,这个可以不用配置
--peer-trusted-ca-file=/opt/etcd/ssl/ca.pem #etcd集群内部访问使用的证书 ca.pem 如果是权威机构的,这个可以不用配置
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
五、将证书拷贝到/opt/etcd/ssl/目录
cd etcd
cp /root/TLS/etcd/{ca,server,server-key}.pem /root/etcd/ssl/
六、将配置文件下发到其他节点服务器
通过scp下发,将etcd目录和etcd.service拷贝到指定机器的/opt/目录
scp -r etcd root @172.19.125.230:/opt/ #opt为我们的工作目录,k8s的工作目录都在下面
scp -r etcd root @192.168.31.62:/opt/
scp -r etcd root @192.168.31.63:/opt/
scp etcd.service root @172.19.125.230:/usr/lib/systemd/system/ #systemd存放配置文件的目录
scp etcd.service root @192.168.31.62:/usr/lib/systemd/system/
scp etcd.service root @192.168.31.63:/usr/lib/systemd/system/
这样我们在其他的服务器就可以看到该文件啦,然后把etcd/cfg/etcd.conf配置文件IP设置成每台机器对应的IP,节点名称改成自己的节点名
七、启动服务并加入开机启动
cat /usr/lib/systemd/system/etcd.service #查看etcd.service是否在system下面
systemctl daemon-reload #重新加载配置文件
systemctl start etcd #启动etcd
如果有多个节点,需要每个节点都启动成功才行;
启动过程中遇到错误,通过systemctl status etcd查看日志
然后这个证书颁发,监听使用内网IP,外网IP会证书鉴权失败
八、查看集群状态
/opt/etcd/bin/etcdctl \
--ca-file=/opt/etcd/ssl/ca.pem --cert-file=/opt/etcd/ssl/server.pem --key-file=/opt/etcd/ssl/server-key.pem \
--endpoints="https://172.19.125.230:2379" \
cluster-health
--ca-file=/opt/etcd/ssl/ca.pem --cert-file=/opt/etcd/ssl/server.pem --key-file=/opt/etcd/ssl/server-key.pem \
--endpoints="https://172.19.125.230:2379" \
cluster-health