安装etcd
1、使用apt安装
apt install etcd
2、使用二进制安装
#如果不能下载,请使用vpn下载
wget https://github.com/etcd-io/etcd/releases/download/v3.4.25/etcd-v3.4.25-linux-amd64.tar.gz
tar zxvf etcd-v3.4.25-linux-amd64.tar.gz
cp etcd-v3.4.25-linux-amd64/etcd* /usr/bin/
安装cfssl,用于创建安全的etcd
注意cfss的版本号,要和etcd的版本号对应。本例中的cfssl与etcd的版本已经验证,不要随意更换。
curl -L https://github.com/cloudflare/cfssl/releases/download/v1.5.0/cfssl_1.5.0_linux_amd64 -o cfssl
chmod +x cfssl
curl -L https://github.com/cloudflare/cfssl/releases/download/v1.5.0/cfssljson_1.5.0_linux_amd64 -o cfssljson
chmod +x cfssljson
curl -L https://github.com/cloudflare/cfssl/releases/download/v1.5.0/cfssl-certinfo_1.5.0_linux_amd64 -o cfssl-certinfo
chmod +x cfssl-certinfo
#上述地址无法自动下载时,需要使用科学上网后自行下载
mv cfssl* /usr/local/bin/
cfssl version
生成证书
1、创建证书配置文件
$mkdir -p /etc/etcd/cert
$vim /etc/etcd/cert/ca-config.json
{
"signing": {
"default": {
"expiry": "876000h"
},
"profiles": {
"kubernetes": {
"usages": ["signing", "key encipherment", "server auth", "client auth"],
"expiry": "876000h"
}
}
}
}
2、创建证书签名请求配置文件
$vim /etc/etcd/cert/ca-csr.json
{
"CN": "Kubernetes",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "China",
"ST": "BeiJing",
"L": "BeiJing",
"O": "Kubernetes",
"OU": "CA"
}
]
}
注:
C: (Country)所在国家简称,只能是国家字母缩写,如中国:CN L: (Locality) 所在地区/城市简称,如Beijing/San Francisco ST: (State/Provice)所在州/省份简称,如Beijing/California O: (Organization Name) 单位名称,对于 SSL 证书,一般为网站域名;而对于代码签名证书则为申请单位名称;而对于客户端单位证书则为证书申请者所在单位名称 OU: (other)显示其他内容,常见的内容值有“System"、"Website"等
3、生成根证书和私钥
cd /etc/etcd/cert
cfssl gencert -initca ca-csr.json | cfssljson -bare ca
4、创建证书签名的请求配置文件
$vim /etc/etcd/cert/kubernetes-csr.json
{
"CN": "Kubernetes",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "China",
"ST": "BeiJing",
"L": "BeiJing",
"O": "Kubernetes",
"OU": "CA"
}
]
}
5、创建kubernetes的证书与私钥
在创建证书的时候,一定要把etcd之间的各个节点IP地址添加到hostname的配置中;另外还需要预留一些k8s的节点主机名,防止以后扩展节点时导致认证失败。
cfssl gencert \
-ca=ca.pem \
-ca-key=ca-key.pem \
-config=ca-config.json \
-hostname=192.168.2.181,192.168.2.182,192.168.2.183,k8s1,k8s2,k8s3,k8s4,k8s5,k8s6,k8s7,k8s8,k8s9,127.0.0.1,kubernetes.default \
-profile=kubernetes kubernetes-csr.json | cfssljson -bare kubernetes
查看目录,可以看到结构如下:

配置etcd服务
1、修改配置文件
$vim /etc/default/etcd
ETCD_NAME="etcd1"
ETCD_CERT_FILE="/etc/etcd/cert/kubernetes.pem"
ETCD_KEY_FILE="/etc/etcd/cert/kubernetes-key.pem"
ETCD_PEER_CERT_FILE="/etc/etcd/cert/kubernetes.pem"
ETCD_PEER_KEY_FILE="/etc/etcd/cert/kubernetes-key.pem"
ETCD_TRUSTED_CA_FILE="/etc/etcd/cert/ca.pem"
ETCD_PEER_TRUSTED_CA_FILE="/etc/etcd/cert/ca.pem"
ETCD_CLIENT_CERT_AUTH=TRUE
ETCD_PEER_CLIENT_CERT_AUTH=true
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.2.181:2380"
ETCD_LISTEN_PEER_URLS="https://192.168.2.181:2380"
ETCD_LISTEN_CLIENT_URLS="https://192.168.2.181:2379,https://127.0.0.1:2379"
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.2.181:2379"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-0"
ETCD_INITIAL_CLUSTER="etcd1=https://192.168.2.181:2380,etcd2=https://192.168.2.182:2380,etcd3=https://192.168.2.183:2380"
ETCD_DATA_DIR="/var/lib/etcd"
ETCD_INITIAL_CLUSTER_STATE="new"
注意:不同的服务器,其中的ETCD_NANE及ip地址需要根据自已的情况进行修改。
2、修改cert的权限
chown -R etcd.etcd /etc/etcd/
3、启动服务
服务配置文件如下,使用apt安装会自动创建该文件,如果手动安装etcd可以参考这个systemd的配置文件:
[Unit]
Description=etcd - highly-available key value store
Documentation=https://github.com/coreos/etcd
Documentation=man:etcd
After=network.target
Wants=network-online.target
[Service]
Environment=DAEMON_ARGS=
Environment=ETCD_NAME=%H
Environment=ETCD_DATA_DIR=/var/lib/etcd/default
EnvironmentFile=-/etc/default/%p
Type=notify
User=etcd
PermissionsStartOnly=true
#ExecStart=/bin/sh -c "GOMAXPROCS=$(nproc) /usr/bin/etcd $DAEMON_ARGS"
ExecStart=/usr/bin/etcd $DAEMON_ARGS
Restart=on-abnormal
#RestartSec=10s
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
Alias=etcd2.service
启动etcd服务并设置开机自启
systemctl enable etcd
systemctl start etcd
4、查看Etcd集群的运行情况
#非安全的
ETCDCTL_API=3 etcdctl endpoint status --write-out=table --endpoints=http://192.168.2.181:2379,http://192.168.2.182:2379,http://192.168.2.183:2379
#有安全验证的
ETCDCTL_API=3 etcdctl endpoint status --write-out=table --endpoints=https://192.168.2.181:2379,https://192.168.2.182:2379,https://192.168.2.183:2379 --cacert=/etc/etcd/cert/ca.pem --cert=/etc/etcd/cert/kubernetes.pem --key=/etc/etcd/cert/kubernetes-key.pem

5、配置客户端环境
kubernetes中使用etcd是使用其版本3的命令的,所以我们使用etcd的时候也要指定版本号。
export ETCDCTL_API=3
6、一些常用操作
当重新初始化etcd集群的时候,默认不会清除etcd集群中的内容。因此,我们需要手动清除其集群信息。
etcdctl del --prefix "" --endpoints=https://192.168.2.181:2379,https://192.168.2.182:2379,https://192.168.2.183:2379 --cacert=/etc/etcd/cert/ca.pem --cert=/etc/etcd/cert/kubernetes.pem --key=/etc/etcd/cert/kubernetes-key.pem