Kubernetes—etcd集群创建

安装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

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注