作者:YANGYANG. | 来源:互联网 | 2024-12-16 09:14
一、实验环境准备
为了确保 Kubernetes 集群能够稳定运行,我们需要准备三台服务器,具体配置如下表所示:
主机名 | 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 是一个高可用键值存储系统,通常用于保存 Kubernetes 的所有集群数据。为了提高系统的可靠性和性能,建议至少部署三个节点以形成集群。kube-apiserver 是 Kubernetes API 服务器,负责处理所有 REST 请求,并与 etcd 进行交互以读写集群状态。kube-controller-manager 管理控制器,这些控制器实现了集群中的各种自动化任务。kube-scheduler 负责决定新创建的 Pod 应该被调度到哪个节点上运行。
此外,在开始部署前,还需要确保关闭所有相关主机上的防火墙和其他安全软件,以避免它们干扰集群的正常运行。可以通过以下命令来关闭防火墙并禁用 SELinux:
hostnamectl set-hostname node2
systemctl stop firewalld
iptables -F
setenforce 0
二、ETCD 证书的生成与配置
1. 创建工作目录并传输所需文件
首先,需要在 master 节点上创建一个工作目录,并将必要的文件复制到该目录中。例如:
mkdir k8s
cd k8s/
ls # 应包含 etcd-cert, etcd-cert.sh, etcd.sh 等文件
接下来,安装 CFSSL 工具,这是一套用于生成和管理 SSL/TLS 证书的强大工具。安装命令如下:
cd etcd-cert/
chmod +x cfssl cfssl-certinfo cfssljson
mv cfssl cfssl-certinfo cfssljson /usr/local/bin/
2. 制作 CA 证书
创建 CA 证书所需的配置文件 ca-config.json 和 ca-csr.json,然后使用 CFSSL 工具生成 CA 证书。示例如下:
# ca-config.json
{
"signing": {
"default": {
"expiry": "87600h"
},
"profiles": {
"www": {
"expiry": "87600h",
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
]
}
}
}
}
# ca-csr.json
{
"CN": "etcd CA",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "Beijing",
"ST": "Beijing"
}
]
}
使用以下命令生成 CA 证书:
cfssl gencert -initca ca-csr.json | cfssljson -bare ca-
这将生成 ca-key.pem 和 ca.pem 文件,它们是后续生成 ETCD 证书的基础。
3. 生成 ETCD 证书
创建 server-csr.json 文件,指定 ETCD 服务器的 IP 地址,然后使用 CA 证书生成 ETCD 服务器的证书。命令如下:
vim server-csr.json
{
"CN": "etcd",
"hosts": [
"20.0.0.10",
"20.0.0.11",
"20.0.0.12"
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "Beijing",
"ST": "Beijing"
}
]
}
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -cOnfig=ca-config.json -profile=www server-csr.json | cfssljson -bare server
这将生成 server-key.pem 和 server.pem 文件,这些文件将在后续的 ETCD 集群配置中使用。
4. 搭建 ETCD 集群
将生成的 ETCD 证书和相关文件复制到 /opt/etcd/ 目录中,并执行 etcd.sh 脚本来启动 ETCD 集群。示例命令如下:
tar zxf etcd-v3.3.10-linux-amd64.tar.gz
cd etcd-v3.3.10-linux-amd64/
mkdir /opt/etcd/{cfg,bin,ssl} -p
mv etcd etcdctl /opt/etcd/bin/
cd /root/k8s/etcd-cert/
cp *.pem /opt/etcd/ssl/
cd /root/k8s/
bash etcd.sh etcd01 20.0.0.10 etcd02=https://20.0.0.11:2380,etcd03=https://20.0.0.12:2380
三、配置其他节点
将 ETCD 配置文件和证书复制到其他节点,并根据实际情况修改配置文件中的 IP 地址和其他参数。例如,在 node1 上执行以下命令:
hostnamectl set-hostname node1
scp -r /opt/etcd/ root@20.0.0.11:/opt/
scp /usr/lib/systemd/system/etcd.service root@20.0.0.11:/usr/lib/systemd/system/
cd /opt/etcd/cfg
vim etcd
编辑 etcd 配置文件,确保以下参数正确无误:
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"
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"
四、启动 ETCD 集群
在所有节点上启动 ETCD 服务,并检查其运行状态。例如,在 node1 上执行以下命令:
systemctl start etcd
systemctl status etcd
如果服务状态为 running,则表示 ETCD 服务已成功启动。
五、集群健康检查
最后,在 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
如果输出结果中包含 'cluster is healthy',则表示集群已成功部署并运行良好。