Kubernetes单节点搭建----etcd数据库的搭建
本次实验是搭建Kubernetes的单个master节点集群。一个master节点需要安装etcd数据库、两个node节点分别都需要安装docker容器引擎、etcd数据库和flannel扁平化网络。集群架构如图所示。
etcd搭建实验流程
1.创建etcd集群需要先创建相关证书,所以首先需要下载好认证工具即,cfssl工具。
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
将下载好的认证工具导出至/usr/local/bin目录下面,方便管理和使用。
2.在主节点上建立一个工作目录,用于编写关于etcd的shell脚本、证书、签名等文件。
生成一个工作目录:
mkdir /root/
在工作目录中生成生成认证证书的工作目录:
mkdir /root/k8s/etcd-cert
etcd-cert.sh,是生成etcd证书的shell脚本。将脚本导入到etcd-cert工作目录中去。
#!/bin/bash
#定义了ca证书的配置文件,其中包含了有效时间10年,认证方式等
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 -
#-----------------------
#服务通信的证书,里面需要指明集群内部安装etcd的IP地址。
cat > server-csr.json <<EOF
{
"CN": "etcd",
"hosts": [
"192.168.80.132",
"192.168.80.134",
"192.168.80.135"
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "BeiJing",
"ST": "BeiJing"
}
]
}
EOF
#通过命令生成ETCD的证书。
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=www server-csr.json | cfssljson -bare server
如果在执行脚本的时候发现权限不够,说明需要在刚才下载的工具中添加可执行权限。
可以看到刚才生成的服务通信这个证书。
2.解压etcd的源码包,进行相关配置。
接着在/opt目录下创建etcd的工作目录,其中包含:cfg配置文件目录、bin命令文件目录和ssl证书目录。
mkdir -p /opt/etcd/{cfg,bin,ssl}
相关目录创建完毕,将命令和证书复制到etcd的相对应的目录中去。
ssl中应该包含4个证书。
现在开始配置etcd的配置文件。
在工作目录中编写etcd.sh脚本文件,其中包含etcd的集群配置和启动脚本配置。
#!/bin/bash
# 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
ETCD_IP=$2
ETCD_CLUSTER=$3
WORK_DIR=/opt/etcd
#etcd集群的配置节点ip信息等。
cat <<EOF >$WORK_DIR/cfg/etcd
#[Member]
ETCD_NAME="${ETCD_NAME}"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://${ETCD_IP}:2380"
ETCD_LISTEN_CLIENT_URLS="https://${ETCD_IP}:2379"
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://${ETCD_IP}:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://${ETCD_IP}:2379"
ETCD_INITIAL_CLUSTER="etcd01=https://${ETCD_IP}:2380,${ETCD_CLUSTER}"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
EOF
#为了便于系统管理和启动将启动脚本生成在system中
cat <<EOF >/usr/lib/systemd/system/etcd.service
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target
[Service]
Type=notify
EnvironmentFile=${WORK_DIR}/cfg/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
运行此脚本:
bash etcd.sh etcd01 192.168.80.132 etcd02=https://192.168.80.134:2380,etcd03=https://192.168.80.135:2380
将/opt/etcd中的所有内容发送到node节点中去。
scp -r /opt/etcd/ root@192.168.80.134:/opt/
scp -r /opt/etcd/ root@192.168.80.135:/opt/
复制到node节点中需要修改其中的配置文件。
#[Member]
#修改节点名称
ETCD_NAME="etcd02"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
#监听地址等
ETCD_LISTEN_PEER_URLS="https://192.168.80.134:2380"
ETCD_LISTEN_CLIENT_URLS="https://192.168.80.134:2379"
#[Clustering]
#这里的地址也需要修改为本机的IP地址
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.80.134:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.80.134:2379"
#集群IP地址不需要修改
ETCD_INITIAL_CLUSTER="etcd01=https://192.168.80.132:2380,etcd02=https://192.168.80.134:2380,etcd03=https://192.168.80.135:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
复制master节点中的启动脚本到各个node节点中去。
scp /lib/systemd/system/etcd.service root@192.168.80.134:/lib/systemd/system/
scp /lib/systemd/system/etcd.service root@192.168.80.135:/lib/systemd/system/
在node节点中开启etcd数据库,在master重新执行etcd.sh脚本。
node:
systemctl start etcd.service
node节点的etcd正在运行
matser:
bash etcd.sh etcd01 192.168.80.132 etcd02=https://192.168.80.134:2380,etcd03=https://192.168.80.135:2380
查看集群的健康状态:
/opt/etcd/bin/etcdctl --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem --endpoints="https://192.168.80.132:2379,https://192.168.80.134:2379,https://192.168.80.135:2379" cluster-health
**注意这条命令一定要在证书的目录下执行,否则在指定证书时要写绝对路径。**
这样Kubernetes的单master集群中的etcd部署完毕!