k8s etcd安装配置 etcd集群 docker安装etcd k8s安装etcd集群

k8s etcd安装配置 etcd集群 docker安装etcd k8s安装etcd集群

大纲

  • 基础概念
  • 单机安装
  • 集群安装
  • 基于etcd注册中心集群
  • 基于DNS集群
  • docker安装
  • docker单机安装
  • k8s安装
  • k8s单机安装
  • k8s集群安装
  • 配置总结

基础概念

Etcd是一个强一致的分布式键值存储,它提供了一种可靠的方式来存储分布式系统或机器集群需要访问的数据

以下所有测试使用etcd版本为v3.5.0

单机安装

下载地址 https://github.com/etcd-io/etcd/releases/tag/v3.5.0

k8s etcd安装配置 etcd集群 docker安装etcd k8s安装etcd集群_第1张图片

etcdv3.5.0 安装包已上传到百度云盘 /常用软件/etcd

安装步骤很简单 解压后把解压目录配置到环境变量即可

tar -zxvf etcd-v3.5.0-linux-amd64.tar.gz
export PATH=/ops/etcd/etcd-v3.5.0-linux-amd64:$PATH
etcd -version

单机启动

不带参数启动

直接执行 etcd 不带任何参数会自动启动到2379端口

带参数启动

etcd --data-dir=/ops/etcd/etcd-v3.5.0-linux-amd64/data  --listen-client-urls="http://0.0.0.0:2479" --advertise-client-urls="http://0.0.0.0:2479"
--data-dir=#指定数据文件夹
--listen-client-urls= #暴露端口
--advertise-client-urls=  #用于通知其他ETCD节点,客户端接入本节点的监听地址

后台启动

nohup etcd -listen-client-urls="http://0.0.0.0:2379" --advertise-client-urls="http://0.0.0.0:2379" &

指定配置文件启动

./etcd --config-file=/ops/etcd/etcd-v3.5.0-linux-amd64/simple.yaml

集群安装

  • 静态配置
  • 服务发现

服务器节点如下
k8s etcd安装配置 etcd集群 docker安装etcd k8s安装etcd集群_第2张图片

静态配置的集群安装

静态配置时候etcd集群中各个节点(member)都能明确知道对方,例如(明确知道节点个数,集群中各个节点地址已知

静态配置注意点

  • 集群节点个数明确已知
  • 集群各节点IP地址明确已知

相关配置项目说明

  • –name #指定节点名称
  • –initial-cluster #配置集群所有节点 各式: 节点名称=地址
  • –initial-advertise-peer-urls #初始化公告其他对等节点的url
  • –listen-peer-urls #作为一个对等节点member的访问url
  • –initial-cluster-token #初始化集群token 可以为每个集群生成唯一的 clusterID memberID
  • –listen-client-urls= #本节点访问地址 暴露给客户端
  • –advertise-client-urls= #用于通知其他ETCD节点,客户端接入本节点的监听地址
  • –initial-cluster-state #指定集群状态为静态初始 new

实例

  • 192.168.0.160 etcd-node1
  • 192.168.0.124 etcd-node2
  • 192.168.0.54 etcd-node3

192.168.0.160 etcd-node1 节点配置

--name=etcd-node1  
--initial-advertise-peer-urls=http://192.168.0.160:2480
--listen-peer-urls=http://192.168.0.160:2480
--listen-client-urls=http://192.168.0.160:2479
--advertise-client-urls=http://192.168.0.160:2479
--initial-cluster-token=my-etcd-cluster
--initial-cluster=etcd-node1=http://192.168.0.160:2480,etcd-node2=http://192.168.0.124:2480,etcd-node3=http://192.168.0.54:2480
--initial-cluster-state=new

执行启动命令

./etcd --name=etcd-node1 --initial-advertise-peer-urls=http://192.168.0.160:2480 --listen-peer-urls=http://192.168.0.160:2480 --listen-client-urls=http://192.168.0.160:2479 --advertise-client-urls=http://192.168.0.160:2479 --initial-cluster-token=my-etcd-cluster --initial-cluster-state=new --initial-cluster=etcd-node1=http://192.168.0.160:2480,etcd-node2=http://192.168.0.124:2480,etcd-node3=http://192.168.0.54:2480

192.168.0.124 etcd-node2 节点配置

--name=etcd-node2  
--initial-advertise-peer-urls=http://192.168.0.124:2480
--listen-peer-urls=http://192.168.0.124:2480
--listen-client-urls=http://192.168.0.124:2479
--advertise-client-urls=http://192.168.0.124:2479
--initial-cluster-token=my-etcd-cluster
--initial-cluster=etcd-node1=http://192.168.0.160:2480,etcd-node2=http://192.168.0.124:2480,etcd-node3=http://192.168.0.54:2480
--initial-cluster-state=new

执行启动命令

./etcd --name=etcd-node2 --initial-advertise-peer-urls=http://192.168.0.124:2480 --listen-peer-urls=http://192.168.0.124:2480 --listen-client-urls=http://192.168.0.124:2479 --advertise-client-urls=http://192.168.0.124:2479 --initial-cluster-token=my-etcd-cluster --initial-cluster-state=new --initial-cluster=etcd-node1=http://192.168.0.160:2480,etcd-node2=http://192.168.0.124:2480,etcd-node3=http://192.168.0.54:2480

192.168.0.54 etcd-node3 节点配置

--name=etcd-node3  
--initial-advertise-peer-urls=http://192.168.0.54:2480
--listen-peer-urls=http://192.168.0.54:2480
--listen-client-urls=http://192.168.0.54:2479
--advertise-client-urls=http://192.168.0.54:2479
--initial-cluster-token=my-etcd-cluster
--initial-cluster=etcd-node1=http://192.168.0.160:2480,etcd-node2=http://192.168.0.124:2480,etcd-node3=http://192.168.0.54:2480
--initial-cluster-state=new

执行启动命令

./etcd --name=etcd-node3 --initial-advertise-peer-urls=http://192.168.0.54:2480 --listen-peer-urls=http://192.168.0.54:2480 --listen-client-urls=http://192.168.0.54:2479 --advertise-client-urls=http://192.168.0.54:2479 --initial-cluster-token=my-etcd-cluster --initial-cluster-state=new --initial-cluster=etcd-node1=http://192.168.0.160:2480,etcd-node2=http://192.168.0.124:2480,etcd-node3=http://192.168.0.54:2480

静态方式配置的集群启动完成

使用 ./etcdctl member list -w table --endpoints=192.168.0.124:2479 查看集群成员

k8s etcd安装配置 etcd集群 docker安装etcd k8s安装etcd集群_第3张图片

member list -w (–write-out的简写) 选项可以指定输出格式

member list -w
member list --write-out
支持格式  json  fields  simple(默认)  table

服务发现的集群安装

在很多场景下,我们无法预知集群中各个成员的地址,例如K8s环境等,需要集群成员自主发现并加入集群

服务自主发现有两种模式

  • etcd 发现模式
  • DNS 发现模式

etcd 发现模式

step1 创建注册发现key

etcd 发现模式的原理就是利用一个已经存在的etcd(单机或集群)作为注册中心,把需要集群的节点信息注册到这个etcd中

实例

  • 192.168.0.210 etcd注册中心
  • 192.168.0.160 etcd-node1
  • 192.168.0.124 etcd-node2
  • 192.168.0.54 etcd-node3

k8s etcd安装配置 etcd集群 docker安装etcd k8s安装etcd集群_第4张图片

在192.168.0.210启动一个etcd 注意–enable-v2=true 开启支持v2版本的api接口

./etcd --listen-client-urls="http://0.0.0.0:2479" --advertise-client-urls="http://0.0.0.0:2479" --enable-v2=true

分别在192.168.0.160 , 192.168.0.124 ,192.168.0.54 三台机器上配置host映射 (也可不配置后面直接使用ip)

vi /etc/hosts
加入
192.168.0.210 liuyijiang-dev3.com

在192.168.0.210这台etcd上创建一个key 用于注册发现

例如有三台机器需要集群

curl -X PUT http://liuyijiang-dev3.com:2479/v2/keys/registry/lyj_ectd_cluster/_config/size -d value=3

注意 key /registry/lyj_ectd_cluster可以任意配置 只要是一个合法的key路径即可,value=3表示三台机器集群

集群结构如下

在这里插入图片描述

这样 http://liuyijiang-dev3.com:2479/v2/keys/registry/lyj_ectd_cluster 这个地址将用于注册发现

step2 配置集群节点

192.168.0.160 etcd-node1 节点配置

--name=etcd-node1  
--initial-advertise-peer-urls=http://192.168.0.160:2480
--listen-peer-urls=http://192.168.0.160:2480
--listen-client-urls=http://192.168.0.160:2479
--advertise-client-urls=http://192.168.0.160:2479
--discovery http://liuyijiang-dev3.com:2479/v2/keys/registry/lyj_ectd_cluster

执行启动命令

./etcd --name=etcd-node1 --initial-advertise-peer-urls=http://192.168.0.160:2480 --listen-peer-urls=http://192.168.0.160:2480 --listen-client-urls=http://192.168.0.160:2479 --advertise-client-urls=http://192.168.0.160:2479 --discovery http://liuyijiang-dev3.com:2479/v2/keys/registry/lyj_ectd_cluster

192.168.0.124 etcd-node2 节点配置

--name=etcd-node2  
--initial-advertise-peer-urls=http://192.168.0.124:2480
--listen-peer-urls=http://192.168.0.124:2480
--listen-client-urls=http://192.168.0.124:2479
--advertise-client-urls=http://192.168.0.124:2479
--discovery http://liuyijiang-dev3.com:2479/v2/keys/registry/lyj_ectd_cluster

执行启动命令

./etcd --name=etcd-node2 --initial-advertise-peer-urls=http://192.168.0.124:2480 --listen-peer-urls=http://192.168.0.124:2480 --listen-client-urls=http://192.168.0.124:2479 --advertise-client-urls=http://192.168.0.124:2479 --discovery http://liuyijiang-dev3.com:2479/v2/keys/registry/lyj_ectd_cluster

192.168.0.54 etcd-node3 节点配置

--name=etcd-node3  
--initial-advertise-peer-urls=http://192.168.0.54:2480
--listen-peer-urls=http://192.168.0.54:2480
--listen-client-urls=http://192.168.0.54:2479
--advertise-client-urls=http://192.168.0.54:2479
--discovery http://liuyijiang-dev3.com:2479/v2/keys/registry/lyj_ectd_cluster

执行启动命令

./etcd --name=etcd-node3 --initial-advertise-peer-urls=http://192.168.0.54:2480 --listen-peer-urls=http://192.168.0.54:2480 --listen-client-urls=http://192.168.0.54:2479 --advertise-client-urls=http://192.168.0.54:2479 --discovery http://liuyijiang-dev3.com:2479/v2/keys/registry/lyj_ectd_cluster

完成3节点集群

在这里插入图片描述

DNS 发现模式

DNS 发现模式主要是利用DNS配置SRV记录实现发现etcd服务器地址

DNS SRV 是 DNS 记录中一种,用来查询指定服务的地址。与常见的A记录、CNAME 不同的是,SRV中除了记录服务器的地址,还记录了服务的端口,并且可以设置每个服务地址的优先级和权重

SRV的配置格式如下

_Service._Proto.Name TTL Class SRV Priority Weight Port Target
字段说明
Service: 服务名称,前缀“_”是为防止与DNS Label(普通域名)冲突。
Proto:   服务使用的通信协议,_TCP、_UDP、其它标准协议或者自定义的协议。
Name:    提供服务的域名。
TTL:     缓存有效时间。
CLASS:   类别
Priority: 该记录的优先级,数值越小表示优先级越高,范围0-65535。
Weight:   该记录的权重,数值越高权重越高,范围0-65535。     
Port:     服务端口号,0-65535。
Target:   host 地址。

Etcd 使用DNS发现的方式 Service服务名称必须是 _etcd-server

集群结构如下

k8s etcd安装配置 etcd集群 docker安装etcd k8s安装etcd集群_第5张图片

step1 配置DNS服务器

DNS服务器使用 coreDNS coreDNS的使用参考《k8s kubernetes 核心组件 CoreDNS 域名解析服务 学习总结》

测试使用liuyijiang.com 这个域名作为DNS发现域名,DNS服务器安装在192.168.0.206

db.liuyijiang.com 配置如下

@       1800    IN      SOA     ns.liuyijiang.com.  755688196.qq.com. (
	                                                1121   ; serial number 
	                                                1h      ; refresh interval
	                                                10m     ; retry interval
	                                                3w      ; expiry period
	                                                1h      ; negative TTL
)

_etcd-server._tcp	   300	    IN	      SRV	  0	      0	     2480   etcd-node1.liuyijiang.com.
_etcd-server._tcp    300     IN      SRV     0       0       2480    etcd-node2.liuyijiang.com.
_etcd-server._tcp    300     IN      SRV     0       0       2480    etcd-node3.liuyijiang.com.

	
etcd-node1      1800    IN      A       192.168.0.160

etcd-node2      1800    IN      A       192.168.0.124

etcd-node3      1800    IN      A       192.168.0.54

注意:SRV记录中Service服务名称必须是_etcd-server

Corefile 配置如下

liuyijiang.com {
  root /root/coreDNS
  file db.liuyijiang.com
}

. {
  health  :8199
  ready   :8289
  prometheus  :8389
  forward . 114.114.114.114
  cache 30
  errors
  log
}

./coredns 启动DNS服务 会读取当前文件夹下的Corefile配置文件

在这里插入图片描述

step2 修改主机的DNS服务器地址

分别修改 192.168.0.160 192.168.0.124 192.168.0.54 三台机器的DNS服务器地址

vi /etc/resolv.conf
将 nameserver 改为 192.168.0.206

k8s etcd安装配置 etcd集群 docker安装etcd k8s安装etcd集群_第6张图片

dig +noall +answer SRV _etcd-server._tcp.liuyijiang.com
nslookup etcd-node1.liuyijiang.com
nslookup etcd-node2.liuyijiang.com
nslookup etcd-node3.liuyijiang.com

已经可以解析到信息

k8s etcd安装配置 etcd集群 docker安装etcd k8s安装etcd集群_第7张图片

step3 配置集群节点

192.168.0.160 etcd-node1 节点配置

cluster-dns-node1.yaml 内容如下

name: etcd-node1  
initial-advertise-peer-urls: http://192.168.0.160:2480
listen-peer-urls: http://192.168.0.160:2480
listen-client-urls: http://192.168.0.160:2479
advertise-client-urls: http://192.168.0.160:2479
initial-cluster-token: my-etcd-cluster
initial-cluster-state: new
discovery-srv: liuyijiang.com

执行启动命令

./etcd --config-file cluster-dns-node1.yaml

192.168.0.124 etcd-node2 节点配置

cluster-dns-node2.yaml 内容如下

name: etcd-node2 
initial-advertise-peer-urls: http://192.168.0.124:2480
listen-peer-urls: http://192.168.0.124:2480
listen-client-urls: http://192.168.0.124:2479
advertise-client-urls: http://192.168.0.124:2479
initial-cluster-token: my-etcd-cluster
initial-cluster-state: new
discovery-srv: liuyijiang.com

执行启动命令

./etcd --config-file cluster-dns-node2.yaml

192.168.0.54 etcd-node3 节点配置

cluster-dns-node3.yaml 内容如下

name: etcd-node3  
initial-advertise-peer-urls: http://192.168.0.54:2480
listen-peer-urls: http://192.168.0.54:2480
listen-client-urls: http://192.168.0.54:2479
advertise-client-urls: http://192.168.0.54:2479
initial-cluster-token: my-etcd-cluster
initial-cluster-state: new
discovery-srv: liuyijiang.com

执行启动命令

./etcd --config-file cluster-dns-node3.yaml

使用 ./etcdctl member list -w table --endpoints=192.168.0.160:2479 查看集群成员
k8s etcd安装配置 etcd集群 docker安装etcd k8s安装etcd集群_第8张图片

docker单机安装

镜像地址 https://hub.docker.com/r/bitnami/etcd 选择tags etcd3.5.0

tags etcd3.5.0

https://hub.docker.com/layers/bitnami/etcd/3.5.0/images/sha256-25e92046bb3226211875fe89ca7e2689ffba991eba4eddb9d73dd7756b5c30c5?context=explore

测试使用配置文件启动镜像

配置文件etcd.conf.yml 内容如下

name: simple-node
data-dir: /opt/bitnami/data //注意此镜像可以操作/opt/bitnami文件夹
wal-dir:  /opt/bitnami/wallog
listen-client-urls: http://0.0.0.0:2579
advertise-client-urls: http://0.0.0.0:2579  

etcd.conf.yml 放置在主机 /ops/docker/etcd 文件夹下

docker run -p 2579:2579 -v /ops/docker/etcd:/opt/bitnami/etcd/conf bitnami/etcd:3.5.0 etcd --config-file /opt/bitnami/etcd/conf/etcd.conf.yml

k8s etcd安装配置 etcd集群 docker安装etcd k8s安装etcd集群_第9张图片

K8S环境下集群部署

K8S单机版

部署文件 single-deploy.yaml 内容如下

apiVersion: apps/v1
kind: Deployment
metadata: 
   name: etcd-single-deployment  
spec:
    replicas: 1
    selector:
       matchLabels: 
          app: etcd-single 
    template:
       metadata:
           labels:
              app: etcd-single 
       spec: 
            #hostNetwork: true       
            hostname: etcd-single-host
            subdomain: etcd-single-domain
            containers:
                - name: etcd-single-run #容器名称(自定义)
                  image: bitnami/etcd:3.5.0
                  imagePullPolicy: Always
                  ports: 
                      - containerPort: 2579 
                        protocol: TCP 
                        name: http 
                  command: 
                    - etcd 
                    - --name=simple-node
                    - --data-dir=/opt/bitnami/data
                    - --wal-dir=/opt/bitnami/wallog
                    - --listen-client-urls=http://0.0.0.0:2579
                    - --advertise-client-urls=http://0.0.0.0:2579
                    - --enable-v2=true
--- 

apiVersion: v1
kind: Service
metadata:
  name: etcd-single-service
spec:
  selector:
    app: etcd-single 
  type: NodePort
  ports:
    - port: 2579         
      targetPort: 2579  
      nodePort: 12579       

k8s etcd安装配置 etcd集群 docker安装etcd k8s安装etcd集群_第10张图片

找一个客户端实验一下

在这里插入图片描述

K8S集群版

集群版使用Etcd集群静态配置,使用hostname + subdomain 创建每个etcd pod的域名访问 ,如果对数据有持久化需求 还需要将pod的数据文件夹与主机挂载

可参考 《k8s-Pod域名学习总结》

集群配置文件如下 cluster-deploy.yaml

#节点1 部署
apiVersion: apps/v1
kind: Deployment
metadata: 
   name: etcd-node1-deployment
spec:
    replicas: 1
    selector:
       matchLabels: 
          app: etc-node1 
    template:
       metadata:
           labels:
              app: etc-node1 
       spec: 
            hostname: etc-k8s-node1-host
            subdomain: etc-k8s-node1-domain  
            containers:
                - name: etc-k8s-node1-run 
                  image: bitnami/etcd:3.5.0
                  imagePullPolicy: Always
                  ports: 
                      - containerPort: 2579 
                        protocol: TCP 
                        name: http 
                  command: 
                    - etcd 
                    - --name=etc-k8s-node-1
                    - --data-dir=/opt/bitnami/data
                    - --wal-dir=/opt/bitnami/wallog
                    - --listen-client-urls=http://0.0.0.0:2579
                    - --advertise-client-urls=http://0.0.0.0:2579
                    - --initial-advertise-peer-urls=http://etc-k8s-node1-host.etc-k8s-node1-domain.default.svc.cluster.local:2480
                    - --listen-peer-urls=http://0.0.0.0:2480
                    - --enable-v2=true
                    - --initial-cluster-token=my-k8s-etcd-cluster
                    - --initial-cluster=etc-k8s-node-1=http://etc-k8s-node1-host.etc-k8s-node1-domain.default.svc.cluster.local:2480,etc-k8s-node-2=http://etc-k8s-node2-host.etc-k8s-node2-domain.default.svc.cluster.local:2480,etc-k8s-node-3=http://etc-k8s-node3-host.etc-k8s-node3-domain.default.svc.cluster.local:2480
                    - --initial-cluster-state=new
--- 

#配置一个headless service
apiVersion: v1
kind: Service
metadata:  
  name: etc-k8s-node1-domain  # 注意name为 pod中 subdomain 的名称
spec:
  selector:  
    app: etc-node1
  clusterIP: None  #注意  clusterIP 为None

---

apiVersion: v1
kind: Service
metadata:
  name: etc-node1-service
spec:
  selector:
    app: etc-node1 
  type: NodePort
  ports:
    - port: 2579         
      targetPort: 2579  
      nodePort: 12579   

---

apiVersion: apps/v1
kind: Deployment
metadata: 
   name: etcd-node2-deployment
spec:
    replicas: 1
    selector:
       matchLabels: 
          app: etc-node2 
    template:
       metadata:
           labels:
              app: etc-node2 
       spec:         
            hostname: etc-k8s-node2-host
            subdomain: etc-k8s-node2-domain  
            containers:
                - name: etc-k8s-node2-run 
                  image: bitnami/etcd:3.5.0
                  imagePullPolicy: Always
                  ports: 
                      - containerPort: 2579 
                        protocol: TCP 
                        name: http 
                  command: 
                    - etcd 
                    - --name=etc-k8s-node-2
                    - --data-dir=/opt/bitnami/data
                    - --wal-dir=/opt/bitnami/wallog
                    - --listen-client-urls=http://0.0.0.0:2579
                    - --advertise-client-urls=http://0.0.0.0:2579
                    - --initial-advertise-peer-urls=http://etc-k8s-node2-host.etc-k8s-node2-domain.default.svc.cluster.local:2480
                    - --listen-peer-urls=http://0.0.0.0:2480
                    - --enable-v2=true
                    - --initial-cluster-token=my-k8s-etcd-cluster
                    - --initial-cluster=etc-k8s-node-1=http://etc-k8s-node1-host.etc-k8s-node1-domain.default.svc.cluster.local:2480,etc-k8s-node-2=http://etc-k8s-node2-host.etc-k8s-node2-domain.default.svc.cluster.local:2480,etc-k8s-node-3=http://etc-k8s-node3-host.etc-k8s-node3-domain.default.svc.cluster.local:2480
                    - --initial-cluster-state=new
--- 

apiVersion: v1
kind: Service
metadata:  
  name: etc-k8s-node2-domain  
spec:
  selector:  
    app: etc-node2
  clusterIP: None  
  
--- 

apiVersion: v1
kind: Service
metadata:
  name: etc-node2-service
spec:
  selector:
    app: etc-node2 
  type: NodePort
  ports:
    - port: 2579         
      targetPort: 2579  
      nodePort: 22579   
  
---

apiVersion: apps/v1
kind: Deployment
metadata: 
   name: etcd-node3-deployment
spec:
    replicas: 1
    selector:
       matchLabels: 
          app: etc-node3 
    template:
       metadata:
           labels:
              app: etc-node3 
       spec:         
            hostname: etc-k8s-node3-host
            subdomain: etc-k8s-node3-domain  
            containers:
                - name: etc-k8s-node3-run 
                  image: bitnami/etcd:3.5.0
                  imagePullPolicy: Always
                  ports: 
                      - containerPort: 2579 
                        protocol: TCP 
                        name: http 
                  command: 
                    - etcd 
                    - --name=etc-k8s-node-3
                    - --data-dir=/opt/bitnami/data
                    - --wal-dir=/opt/bitnami/wallog
                    - --listen-client-urls=http://0.0.0.0:2579
                    - --advertise-client-urls=http://0.0.0.0:2579
                    - --initial-advertise-peer-urls=http://etc-k8s-node3-host.etc-k8s-node3-domain.default.svc.cluster.local:2480
                    - --listen-peer-urls=http://0.0.0.0:2480
                    - --enable-v2=true
                    - --initial-cluster-token=my-k8s-etcd-cluster
                    - --initial-cluster=etc-k8s-node-1=http://etc-k8s-node1-host.etc-k8s-node1-domain.default.svc.cluster.local:2480,etc-k8s-node-2=http://etc-k8s-node2-host.etc-k8s-node2-domain.default.svc.cluster.local:2480,etc-k8s-node-3=http://etc-k8s-node3-host.etc-k8s-node3-domain.default.svc.cluster.local:2480
                    - --initial-cluster-state=new
                    
--- 

apiVersion: v1
kind: Service
metadata:  
  name: etc-k8s-node3-domain  
spec:
  selector:  
    app: etc-node3
  clusterIP: None    
  
---


apiVersion: v1
kind: Service
metadata:
  name: etc-node3-service
spec:
  selector:
    app: etc-node3
  type: NodePort
  ports:
    - port: 2579         
      targetPort: 2579  
      nodePort: 32579   

部署集群完成

k8s etcd安装配置 etcd集群 docker安装etcd k8s安装etcd集群_第11张图片

找一个客户端实验一下

k8s etcd安装配置 etcd集群 docker安装etcd k8s安装etcd集群_第12张图片

配置总结

使用 etcd --help可以查看所有的配置选择

成员相关配置项

  • –name

    节点名称
    default: “default”
    env variable: ETCD_NAME
    这个值和–initial-cluster (例如 default=http://localhost:2380)中的key值一一对应,如果在集群环境中,name必须是唯一的,建议用主机名称或者机器ID。

  • –data-dir

    数据存储目录
    default: “${name}.etcd”
    env variable: ETCD_DATA_DIR

  • –wal-dir

    default: “”
    env variable: ETCD_WAL_DIR
    存放预写式日志,最大的作用是记录了整个数据变化的全部历程。未设置,共用–data-dir文件所在目录。可以配置路径为专用磁盘,有助于避免日志记录和其他io操作之间的io竞争

  • –snapshot-count

    default: “100000”
    env variable: ETCD_SNAPSHOT_COUNT
    数据快照触发数量,etcd处理指定的次数的事务提交后,生成数据快照

  • –heartbeat-interval

    default: “100”
    env variable: ETCD_HEARTBEAT_INTERVAL
    Leader心跳间隔(毫秒)

  • –election-timeout

    default: “1000”
    env variable: ETCD_ELECTION_TIMEOUT
    集群选举的超时时间

  • –listen-peer-urls

    default: “http://localhost:2380”
    env variable: ETCD_LISTEN_PEER_URLS
    example: “http://10.0.0.1:2380”
    invalid example: “http://example.com:2380” (domain name is invalid for binding)
    集群节点之间通信监听的URL 本节点与其他节点进行数据交换(选举,数据同步)的监听地址,地址写法是 scheme://IP:port,可以多个并用逗号隔开,如果配置是http://0.0.0.0:2380,将不限制node访问地址

  • –listen-client-urls

    default: “http://localhost:2379”
    env variable: ETCD_LISTEN_CLIENT_URLS
    example: “http://10.0.0.1:2379”
    invalid example: “http://example.com:2379” (domain name is invalid for binding)
    本节点访问地址,监听客户端请。地址写法是 scheme://IP:port,可以多个并用逗号隔开,如果配置是http://0.0.0.0:2379,将不限制node访问地址 (配置此地址用于客户端访问,修改端口号等)

  • –max-snapshots

    default: 5
    env variable: ETCD_MAX_SNAPSHOTS
    要保留的快照文件的最大数量,0是无限制。Windows用户的默认值是无限制的,建议设置5以下的值。

  • –max-wals

    default: 5
    env variable: ETCD_MAX_WALS
    要保留的wal文件的最大数量,0是无限制。Windows用户的默认值是无限制的,建议设置5以下的值。

  • –cors

    default: “”
    env variable: ETCD_CORS
    逗号分隔的跨域资源共享白名单Comma-separated white list of origins for CORS (cross-origin resource sharing).

  • –quota-backend-bytes

    default: 0
    env variable: ETCD_QUOTA_BACKEND_BYTES
    当后端大小超过给定的配额时发出报警
    如果键空间的任何成员的后端数据库超过了空间配额, etcd 发起集群范围的警告,让集群进入维护模式,仅接收键的读取和删除。在键空间释放足够的空间之后,警告可以被解除,而集群将恢复正常运作。

  • –backend-batch-limit

    default: 0
    env variable: ETCD_BACKEND_BATCH_LIMIT
    提交后端实物之前的最大操作

  • –backend-batch-interval

    default: 0
    env variable: ETCD_BACKEND_BATCH_INTERVAL
    提交后端事物之前的最长时间

  • –max-txn-ops

    default: 128
    env variable: ETCD_MAX_TXN_OPS
    事物中允许的最大操作数

  • –max-request-bytes

    default: 1572864
    env variable: ETCD_MAX_REQUEST_BYTES
    服务器可以接受的客户端请求大小

  • –grpc-keepalive-min-time

    default: 5s
    env variable: ETCD_GRPC_KEEPALIVE_MIN_TIME
    客户端在ping服务器之前最少要等待多久

  • –grpc-keepalive-interval

    default: 2h
    env variable: ETCD_GRPC_KEEPALIVE_INTERVAL
    服务器ping客户端的频率,检查连接是否处于活动状态(0表示禁用)

  • –grpc-keepalive-timeout

    default: 20s
    env variable: ETCD_GRPC_KEEPALIVE_TIMEOUT
    关闭非响应连接之前额外等待时间(0表示禁用)

集群配置

  • –initial-advertise-peer-urls

    default: “http://localhost:2380”
    env variable: ETCD_INITIAL_ADVERTISE_PEER_URLS
    example: “http://example.com:2380, http://10.0.0.1:2380”
    通知其他节点(member)与本节点进行数据交换(选举,同步)的地址,URL可以使用domain地址。
    与–listener-peer-urls不同在于listener-peer-urls用于请求客户端的接入控制,initial-advertise-peer-urls是告知其他集群节点访问哪个URL,需要和–initial-cluster

  • –initial-cluster

    default: “default=http://localhost:2380”
    env variable: ETCD_INITIAL_CLUSTER
    用于引导初始集群配置,集群中所有节点的信息。此处default为节点的–name指定的名字;localhost:2380为–initial-advertise-peer-urls指定的值。

  • –initial-cluster-state

    default: “new”
    env variable: ETCD_INITIAL_CLUSTER_STATE
    初始集群状态,设置new为初始静态或DNS引导期间出现的所有成员。如果将此选项设置为existing,则etcd将尝试加入现有群集。

  • –initial-cluster-token

    default: “etcd-cluster”
    env variable: ETCD_INITIAL_CLUSTER_TOKEN
    集群唯一标识,相同标识的节点将视为在一个集群内

  • –advertise-client-urls

    default: “http://localhost:2379”
    env variable: ETCD_ADVERTISE_CLIENT_URLS
    example: “http://example.com:2379, http://10.0.0.1:2379”
    用于通知其他ETCD节点,客户端接入本节点的监听地址,一般来说advertise-client-urls是listen-client-urls子集,这些URL可以包含域名。
    注意,不能写http://localhost:237,这样就是通知其他节点,可以用localhost访问,将导致ectd的客户端用localhost访问本地,导致访问不通。如果ectd布置了代理层,代理层将一直通过locahost访问自己的代理接口,导致无限循环。

  • –discovery

    default: none
    env variable: ETCD_DISCOVERY_SRV
    集群发现服务地址
    此地址是一个etcd中的key 查询地址

  • –discovery-srv

    default: “”
    env variable: ETCD_DISCOVERY_SRV
    用于引导集群的DNS sry域
    参考DNS集群方式 例如liuyijiang.com 真实访问地址为 _etcd-server._tcp.liuyijiang.com

  • –discovery-srv-name

    使用DNS引导时查询的DNS srv名称的后缀
    default: “”
    env variable: ETCD_DISCOVERY_SRV_NAME
    例子_etcd-server【–discovery-srv-name】._tcp

  • –discovery-fallback

    发现服务失败时的预期行为(“退出”或“代理”)。“proxy”仅支持v2 API
    default: “proxy”
    env variable: ETCD_DISCOVERY_FALLBACK

  • –discovery-proxy

    用于流量到发现服务的HTTP代理
    default: “”
    env variable: ETCD_DISCOVERY_PROXY

  • –strict-reconfig-check

    default: true
    env variable: ETCD_STRICT_RECONFIG_CHECK
    拒绝可能导致仲裁丢失的重新配置请求。

  • –auto-compaction-retention

    default: 0
    env variable: ETCD_AUTO_COMPACTION_RETENTION
    在一个小时内为mvcc键值存储的自动压实保留。0表示禁用自动压缩

  • –auto-compaction-mode

    default: periodic
    env variable: ETCD_AUTO_COMPACTION_MODE
    配置的基于时间保留的三种模式:periodic, revision. periodic

  • –enable-v2

    接受etcd V2客户端请求
    default: true
    env variable: ETCD_ENABLE_V2

代理配置

–proxy配置etcd以在代理模式下运行,“proxy”仅支持v2 API。

  • –proxy

    代理模式设置,(“off”, “readonly” or “on”)
    default: “off”
    env variable: ETCD_PROXY

  • –proxy-failure-wait

    在重新考虑代理请求之前,endpoints 将处于失败状态的时间(以毫秒为单位)
    default: 5000
    env variable: ETCD_PROXY_FAILURE_WAIT

  • –proxy-refresh-interval

    endpoints 刷新间隔的时间(以毫秒为单位)
    default: 30000
    env variable: ETCD_PROXY_REFRESH_INTERVAL

  • –proxy-dial-timeout

    拨号超时的时间(以毫秒为单位)或0表示禁用超时
    default: 1000
    env variable: ETCD_PROXY_DIAL_TIMEOUT

  • –proxy-write-timeout

    写入超时的时间(以毫秒为单位)或0以禁用超时
    default: 5000
    env variable: ETCD_PROXY_WRITE_TIMEOUT

  • –proxy-read-timeout

    读取超时的时间(以毫秒为单位)或0以禁用超时。
    如果使用watch,不要改变这个值,因为使用长轮询请求
    default: 0
    env variable: ETCD_PROXY_READ_TIMEOUT

安全配置

  • –cert-file

    客户端服务器TLS证书文件的路径。
    default: “”
    env variable: ETCD_CERT_FILE

  • –key-file

    客户端服务器TLS密钥文件的路径
    default: “”
    env variable: ETCD_KEY_FILE

  • –client-cert-auth

    启用客户端证书验证。
    default: false
    env variable: ETCD_CLIENT_CERT_AUTH
    grpc-gateway不支持CN身份验证

  • –client-crl-file

    客户端证书吊销列表文件的路径
    default: “”
    env variable: ETCD_CLIENT_CRL_FILE

  • –trusted-ca-file

    客户端服务器的路径TLS可信CA证书文件
    default: “”
    env variable: ETCD_TRUSTED_CA_FILE

  • –auto-tls

    客户端TLS使用生成的证书
    default: false
    env variable: ETCD_AUTO_TLS

  • –peer-cert-file

    对等服务器TLS证书文件的路径。这是对等流量的证书,用于服务器和客户端。
    default: “”
    env variable: ETCD_PEER_CERT_FILE

  • –peer-key-file

    对等服务器TLS密钥文件的路径。这是对等流量的关键,用于服务器和客户端。
    default: “”
    env variable: ETCD_PEER_KEY_FILE

  • –peer-client-cert-auth

    启用对等客户端证书验证
    default: false
    env variable: ETCD_PEER_CLIENT_CERT_AUTH

  • –peer-crl-file

    对等证书吊销列表文件的路径。
    default: “”
    env variable: ETCD_PEER_CRL_FILE

  • –peer-trusted-ca-file

    对等服务器TLS可信CA文件的路径
    default: “”
    env variable: ETCD_PEER_TRUSTED_CA_FILE

  • –peer-auto-tls

    Peer TLS使用自动生成的证书
    default: false
    env variable: ETCD_PEER_AUTO_TLS

  • –peer-cert-allowed-cn

    允许CommonName进行对等体认证
    default: none
    env variable: ETCD_PEER_CERT_ALLOWED_CN

你可能感兴趣的:(docker+k8s,etcd,docker,kubernetes,etcd)