以二进制文件安装K8S之部署etcd高可用集群

您所在的位置:网站首页 缺少certtoken 以二进制文件安装K8S之部署etcd高可用集群

以二进制文件安装K8S之部署etcd高可用集群

2024-06-02 11:17| 来源: 网络整理| 查看: 265

概述

前提条件:已经准备好CA根证书(etcd在制作CA证书时需要CA根证书),并且把CA根证书文件ca.key和ca.crt拷贝到3个etcd节点的/etc/kubernetes/pki目录下。 3台主机的IP地址分别为192.168.3.135、192.168.3.136、192.168.3.137。 要安装的etcd版本:v3.4.13-linux-amd64。

安装etcd

下载etcd二进制文件,配置systemd服务。

从GitHub官网下载etcd二进制文件,例如etcd-v3.4.13-linux-amd64.tar.gz。

解压缩后得到etcd和etcdctl文件,将它们复制到/usr/bin目录下。

然后将其部署为一个systemd的服务,创建systemd服务配置文件/usr/lib/systemd/system/etcd.service,内容示例如下:

代码语言:javascript复制[Unit] Description=etcd key-value store Documentation=https://github.com/etcd-io/etcd After=network.target [Service] EnvironmentFile=/etc/etcd/etcd.conf ExecStart=/usr/bin/etcd Restart=always [Install] WantedBy=multi-user.target

其中,EnvironmentFile指定配置文件的全路径,例如/etc/etcd/etcd.conf,其中的参数以环境变量的格式进行配置,配置内容如下所示。

如上添加systemd服务需要在所有etcd节点都执行相同的操作。

创建etcd的CA证书

先创建一个x509 v3配置文件etcd_ssl.cnf,其中subjectAltName参数(alt_names)包括所有etcd主机的IP地址,例如:

代码语言:javascript复制[ req ] req_extensions = v3_req distinguished_name = req_distinguished_name [ req_distinguished_name ] [ v3_req ] basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment subjectAltName = @alt_names [ alt_names ] IP.1 = 192.168.3.135 IP.2 = 192.168.3.136 IP.3 = 192.168.3.137

然后使用openssl命令创建etcd的服务端CA证书,包括etcd_server.key和etcd_server.crt文件,将其保存到/etc/etcd/pki目录下。

代码语言:javascript复制openssl genrsa -out etcd_server.key 2048 openssl req -new -key etcd_server.key -config etcd_ssl.cnf -subj "/CN=etcd-server" -out etcd_server.csr openssl x509 -req -in etcd_server.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -days 36500 -extensions v3_req -extfile etcd_ssl.cnf -out etcd_server.crt

再创建客户端使用的CA证书,包括etcd_client.key和etcd_client.crt文件,也将其保存到/etc/etcd/pki目录下,后续供kube-apiserver连接etcd时使用。

代码语言:javascript复制openssl genrsa -out etcd_client.key 2048 openssl req -new -key etcd_client.key -config etcd_ssl.cnf -subj "/CN=etcd-client" -out etcd_client.csr openssl x509 -req -in etcd_client.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -days 36500 -extensions v3_req -extfile etcd_ssl.cnf -out etcd_client.crt

最后在/etc/etcd/pki/目录下将会看到4个文件,分别是:etcd_client.crt,etcd_client.key,etcd_server.crt和etcd_server.key。

代码语言:javascript复制[root@m1 ~]# ll /etc/etcd/pki/ total 16 -rw-r--r--. 1 root root 1086 Aug 17 06:25 etcd_client.crt -rw-------. 1 root root 1679 Aug 17 06:25 etcd_client.key -rw-r--r--. 1 root root 1086 Aug 17 06:20 etcd_server.crt -rw-------. 1 root root 1675 Aug 17 06:20 etcd_server.key

需要将这四个文件都拷贝到到所有ectd节点上。

etcd参数配置

接下来对3个etcd节点进行配置。 etcd节点的配置方式包括启动参数、环境变量、配置文件等,本例使用环境变量方式将其配置到/etc/etcd/etcd.conf文件中,供systemd服务读取。

代码语言:javascript复制# 节点1的配置 ETCD_NAME=etcd1 ETCD_DATA_DIR=/etc/etcd/data ETCD_CERT_FILE=/etc/etcd/pki/etcd_server.crt ETCD_KEY_FILE=/etc/etcd/pki/etcd_server.key ETCD_TRUSTED_CA_FILE=/etc/kubernetes/pki/ca.crt ETCD_CLIENT_CERT_AUTH=true ETCD_LISTEN_CLIENT_URLS=https://192.168.3.135:2379 ETCD_ADVERTISE_CLIENT_URLS=https://192.168.3.135:2379 ETCD_PEER_CERT_FILE=/etc/etcd/pki/etcd_server.crt ETCD_PEER_KEY_FILE=/etc/etcd/pki/etcd_server.key ETCD_PEER_TRUSTED_CA_FILE=/etc/kubernetes/pki/ca.crt ETCD_LISTEN_PEER_URLS=https://192.168.3.135:2380 ETCD_INITIAL_ADVERTISE_PEER_URLS=https://192.168.3.135:2380 ETCD_INITIAL_CLUSTER_TOKEN=etcd-c1uster ETCD_INITIAL_CLUSTER="etcd1=https://192.168.3.135:2380,etcd2=https://192.168.3.136:2380,etcd3=https://192.168.3.137:2380" ETCD_INITIAL_CLUSTER_STATE=new # 节点2的配置 ETCD_NAME=etcd2 ETCD_DATA_DIR=/etc/etcd/data ETCD_CERT_FILE=/etc/etcd/pki/etcd_server.crt ETCD_KEY_FILE=/etc/etcd/pki/etcd_server.key ETCD_TRUSTED_CA_FILE=/etc/kubernetes/pki/ca.crt ETCD_CLIENT_CERT_AUTH=true ETCD_LISTEN_CLIENT_URLS=https://192.168.3.136:2379 ETCD_ADVERTISE_CLIENT_URLS=https://192.168.3.136:2379 ETCD_PEER_CERT_FILE=/etc/etcd/pki/etcd_server.crt ETCD_PEER_KEY_FILE=/etc/etcd/pki/etcd_server.key ETCD_PEER_TRUSTED_CA_FILE=/etc/kubernetes/pki/ca.crt ETCD_LISTEN_PEER_URLS=https://192.168.3.136:2380 ETCD_INITIAL_ADVERTISE_PEER_URLS=https://192.168.3.136:2380 ETCD_INITIAL_CLUSTER_TOKEN=etcd-c1uster ETCD_INITIAL_CLUSTER="etcd1=https://192.168.3.135:2380,etcd2=https://192.168.3.136:2380,etcd3=https://192.168.3.137:2380" ETCD_INITIAL_CLUSTER_STATE=new # 节点3的配置 ETCD_NAME=etcd3 ETCD_DATA_DIR=/etc/etcd/data ETCD_CERT_FILE=/etc/etcd/pki/etcd_server.crt ETCD_KEY_FILE=/etc/etcd/pki/etcd_server.key ETCD_TRUSTED_CA_FILE=/etc/kubernetes/pki/ca.crt ETCD_CLIENT_CERT_AUTH=true ETCD_LISTEN_CLIENT_URLS=https://192.168.3.137:2379 ETCD_ADVERTISE_CLIENT_URLS=https://192.168.3.137:2379 ETCD_PEER_CERT_FILE=/etc/etcd/pki/etcd_server.crt ETCD_PEER_KEY_FILE=/etc/etcd/pki/etcd_server.key ETCD_PEER_TRUSTED_CA_FILE=/etc/kubernetes/pki/ca.crt ETCD_LISTEN_PEER_URLS=https://192.168.3.137:2380 ETCD_INITIAL_ADVERTISE_PEER_URLS=https://192.168.3.137:2380 ETCD_INITIAL_CLUSTER_TOKEN=etcd-c1uster ETCD_INITIAL_CLUSTER="etcd1=https://192.168.3.135:2380,etcd2=https://192.168.3.136:2380,etcd3=https://192.168.3.137:2380" ETCD_INITIAL_CLUSTER_STATE=new

主要配置参数包括为客户端和集群其他节点配置的各监听URL地址(均为HTTPS URL地址),并配置相应的CA证书参数。 etcd服务相关的参数如下。

ETCD_NAME:etcd节点名称,每个节点都应不同,例如etcd1、etcd2、etcd3。ETCD_DATA_DIR:etcd数据存储目录,例如/etc/etcd/data/etcd1。ETCD_LISTEN_CLIENT_URLS和ETCD_ADVERTISE_CLIENT_URLS:为客户端提供的服务监听URL地址,例如https://192.168.3.135:2379。ETCD_LISTEN_PEER_URLS和ETCD_INITIAL_ADVERTISE_PEER_URLS:为本集群其他节点提供的服务监听URL地址,例如https://192.168.3.135:2380。ETCD_INITIAL_CLUSTER_TOKEN:集群名称,例如etcd-cluster。ETCD_INITIAL_CLUSTER:集群各节点的endpoint列表,例如"etcd1=https://192.168.3.135:2380,etcd2=https://192.168.3.136:2380,etcd3=https://192.168.3.137:2380"。ETCD_INITIAL_CLUSTER_STATE:初始集群状态,新建集群时设置为“new”,集群已存在时设置为“existing”。

CA证书相关的配置参数如下。

ETCD_CERT_FILE:etcd服务端CA证书-crt文件全路径,例如/etc/etcd/pki/etcd_server.crt。ETCD_KEY_FILE:etcd服务端CA证书-key文件全路径,例如/etc/etcd/pki/etcd_server.key。ETCD_TRUSTED_CA_FILE:CA根证书文件全路径,例如/etc/kubernetes/pki/ca.crt。ETCD_CLIENT_CERT_AUTH:是否启用客户端证书认证。ETCD_PEER_CERT_FILE:集群各节点相互认证使用的CA证书-crt文件全路径,例如/etc/etcd/pki/etcd_server.crt。ETCD_PEER_KEY_FILE:集群各节点相互认证使用的CA证书-key文件全路径,例如/etc/etcd/pki/etcd_server.key。ETCD_PEER_TRUSTED_CA_FILE:CA根证书文件全路径,例如/etc/kubernetes/pki/ca.crt。启动etcd集群

基于systemd的配置,在3台主机上分别启动etcd服务,并设置为开机自启动:

代码语言:javascript复制systemctl restart etcd && systemctl enable etcd

然后用etcdctl客户端命令行工具携带客户端CA证书,运行etcdctl endpoint health命令访问etcd集群,验证集群状态是否正常,命令如下。

代码语言:javascript复制etcdctl --cacert=/etc/kubernetes/pki/ca.crt --cert=/etc/etcd/pki/etcd_client.crt --key=/etc/etcd/pki/etcd_client.key --endpoints=https://192.168.3.135:2379,https://192.168.3.136:2379,https://192.168.3.137:2379 endpoint health https://192.168.3.135:2379 is healthy: successfully committed proposal: took = 10.227801ms https://192.168.3.136:2379 is healthy: successfully committed proposal: took = 10.880941ms https://192.168.3.137:2379 is healthy: successfully committed proposal: took = 12.226104ms

结果显示各节点状态均为“healthy”,说明集群正常运行。至此,一个启用了HTTPS的3节点etcd集群就部署完成了。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3