如何部署etcd为高可用步骤和命令及配置

部署etcd为高可用的大致步骤和命令及配置如下:

1.在三个master节点上安装etcd二进制文件,并创建etcd用户和组。具体命令如下:

下载etcd二进制文件并解压:

wget https://github.com/etcd-io/etcd/releases/download/v3.5.0/etcd-v3.5.0-linux-amd64.tar.gz && tar -xvf etcd-v3.5.0-linux-amd64.tar.gz

 

将etcd和etcdctl拷贝到/usr/local/bin目录下:

cp etcd-v3.5.0-linux-amd64/etcd /usr/local/bin && cp etcd-v3.5.0-linux-amd64/etcdctl /usr/local/bin

创建etcd用户和组:

useradd -r -M -s /sbin/nologin etcd && chown etcd:etcd /usr/local/bin/{etcd,etcdctl}

 

创建数据目录和证书目录:

mkdir -p /var/lib/etcd && mkdir -p /etc/etcd/pki && chown etcd:etcd /var/lib/etcd

 

2.在每个master节点上生成etcd证书和密钥,并拷贝到/etc/etcd/pki目录下。具体命令如下:

安装cfssl工具:

curl -L https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 > cfssl && chmod +x cfssl && mv cfssl /usr/local/bin

 

安装cfssljson工具:

curl -L https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 > cfssljson && chmod +x cfssljson && mv cfssljson /usr/local/bin

创建ca-config.json文件,指定CA证书的策略

{
  "signing": {
    "default": {
      "expiry": "87600h"
    },
    "profiles": {
      "server": {
        "expiry": "87600h",
        "usages": [
          "signing",
          "key encipherment",
          "server auth"
        ]
      },
      "client": {
        "expiry": "87600h",
        "usages": [
          "signing",
          "key encipherment",
          "client auth"
        ]
      },
      "peer": {
        "expiry": "87600h",
        "usages": [
          "signing",
          "key encipherment",
          "server auth",
          "client auth"
        ]
      }
    }
  }
}

 

创建ca-csr.json文件,指定CA证书的请求信息:

{
  "CN": "etcd-ca",
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "L": "Beijing",
      "O": "etcd",
      "OU": "etcd Security",
      "ST": "Beijing"
    }
  ]
}

 

生成CA证书和密钥:

cfssl gencert --initca=true ca-csr.json | cfssljson --bare ca

 

创建etcd-csr.json文件,指定服务器端证书的请求信息,其中需要替换IP地址为每个节点的实际IP地址:

{
  "CN": "etcd",
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "hosts": [
    "127.0.0.1",
    "192.168.3.165",
    "192.168.3.166",
    "192.168.3.167"
  ],
  "names": [
    {
      "C": "CN",
      "L": "Beijing",
      "O": "etcd",
      "OU": "etcd Security",
      "ST": "Beijing"
    }
  ]
}

 

生成服务器端证书和密钥:

cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=peer etcd-csr.json | cfssljson -bare server

拷贝证书和密钥到/etc/etcd/pki目录下:

 

cp ca.pem server.pem server-key.pem /etc/etcd/pki

 


3.在每个master节点上创建etcd配置文件/etc/etcd/etcd.conf,指定集群成员、监听地址、证书路径等参数。

创建etcd配置文件/etc/etcd/etcd.conf

#########################################################
########### 请根据各节点服务器实际情况修改配置 ############
#########################################################
#[Member]
#1.节点名称,必须唯一
ETCD_NAME="etcd01"

#2.设置数据保存的目录
ETCD_DATA_DIR="/var/lib/etcd"

#3.本节点机器用于监听其他节点的url,url是本机上的2380
#ETCD_LISTEN_PEER_URLS="http://192.168.3.165:2380"

#4.建议本节点用于和其他节点之间通信的url,且会通告集群的其余成员节点
#ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.3.165:2380"

#5.本节点机器用于和客户端通信的url,url是本机上的 2379
#ETCD_LISTEN_CLIENT_URLS="http://192.168.3.165:2379,http://127.0.0.1:2379"

#[Clustering]
#6.建议本节点和客户端通信使用的url
#ETCD_ADVERTISE_CLIENT_URLS="http://192.168.3.165:2379"

#7.集群中所有节点的信息
ETCD_INITIAL_CLUSTER="etcd01=https://192.168.3.165:2380,etcd02=https://192.168.3.166:2380,etcd03=https://192.168.3.167:2380"

#8.创建集群的token,这个值每个集群均相同
ETCD_INITIAL_CLUSTER_TOKEN="148e7b13-51fc-4cc8-965b-a7c9d58c18f5"

#9.初始集群状态,新建集群的时候,这个值为new,后续再启动时需要将“new”更改为“existing”
#ETCD_INITIAL_CLUSTER_STATE="existing"

#10.flannel操作etcd使用的是v2的API,而kubernetes操作etcd使用的v3的API
#   为了兼容flannel,将默认开启v2版本,故配置文件中设置
#ETCD_ENABLE_V2="true"

# [Security]
ETCD_TRUSTED_CA_FILE="/etc/etcd/pki/ca.pem"
ETCD_CERT_FILE="/etc/etcd/pki/server.pem"
ETCD_KEY_FILE="/etc/etcd/pki/server-key.pem"
ETCD_PEER_TRUSTED_CA_FILE="/etc/etcd/pki/ca.pem"
ETCD_PEER_CERT_FILE="/etc/etcd/pki/server.pem"
ETCD_PEER_KEY_FILE="/etc/etcd/pki/server-key.pem"

ETCD_CLIENT_CERT_AUTH="true"
ETCD_AUTO_TLS="true"
ETCD_PEER_CLIENT_CERT_AUTH="true"
ETCD_PEER_AUTO_TLS="true"

 

4.在每个master节点上创建etcd服务文件/usr/lib/systemd/system/etcd.service,并启动并检查服务状态。

创建etcd服务文件/usr/lib/systemd/system/etcd.service

[Service]
Type=notify
WorkingDirectory=/var/lib/etcd/
EnvironmentFile=/etc/etcd/etcd.conf
ExecStart=/usr/local/bin/etcd \
  --listen-peer-urls https://192.168.3.165:2380 \
  --listen-client-urls https://192.168.3.165:2379,http://127.0.0.1:2379 \
  --advertise-client-urls https://192.168.3.165:2379 \
  --initial-advertise-peer-urls https://192.168.3.165:2380 \
  --initial-cluster-state new
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

 

5.在每个master节点上验证etcd集群是否正常工作,参见 etcd集群由3台服务器组成,分别是192.168.3.165-167,如何验证etcd集群已经可以工作了

 

6.在每个master节点上安装kubeadm、kubelet和kubectl,并初始化kubernetes集群,使用kubeadm init --control-plane-endpoint "master.k8s.io:6443" --upload-certs --pod-network-cidr=10.x.x.x/x --service-cidr=10.x.x.x/x --apiserver-cert-extra-sans="192.xxx.xxx.xxx"

-v=5 --ignore-preflight-errors=all -v=5 > kubeadm.log命令,其中指定外部的VIP地址和端口作为控制平面端点,以及外部的etcd集群地址作为–external-etcd-endpoints参数。


7.在其他两个master节点上加入kubernetes集群,使用kubeadm join master.k8s.io:6443 -v=5 > kubeadm.log 命令,其中指定–control-plane参数以及之前生成的token和证书密钥。


在node节点上加入kubernetes集群,使用kubeadm join master.k8s.io:6443 -v=5 > kubeadm.log 命令,其中指定之前生成的token。


在任意一个master节点上安装网络插件flannel或calico,并验证集群是否正常工作。

posted @ 2023-03-02 09:57  zxh263  阅读(595)  评论(0)    收藏  举报