k8s的核心组件etcd功能详解【含etcd各类参数详细说明】

Kubernetes的核心组件ETCD介绍

  • Etcd是一个高可用的键值存储系统,主要用于共享配置和服务发现,它通过Raft一致性算法处理日志复制以保证强一致性,我们可以理解它为一个高可用强一致性的服务发现存储仓库。

  • 在kubernetes集群中,etcd主要用于配置共享和服务发现

  • Etcd主要解决的是分布式系统中数据一致性的问题,而分布式系统中的数据分为控制数据和应用数据,etcd处理的数据类型为控制数据,对于很少量的应用数据也可以进行处理。

ETCD的主要功能

  • 基本的key-value存储
  • 监听机制
  • key的过期及续约机制,用于监控和服务发现
  • 原子CAS和CAD,用于分布式锁和leader选举

特点【优点】

  • 简单: curl可访问的用户的API(HTTP+JSON)
  • 安全: 可选的SSL客户端证书认证
  • 快速: 单实例每秒 1000 次写操作
  • 可靠: 使用Raft保证一致性

Etcd集群中的术语

关键词解释
Raft etcd所采用的保证分布式系统强一致性的算法。
Node一个Raft状态机实例。
Member一个etcd实例。它管理着一个Node,并且可以为客户端请求提供服务。
Cluster由多个Member构成可以协同工作的etcd集群。
Peer对同一个etcd集群中另外一个Member的称呼。
Client向etcd集群发送HTTP请求的客户端。
WAL预写式日志,etcd用于持久化存储的日志格式。
snapshotetcd防止WAL文件过多而设置的快照,存储etcd数据状态。
Proxyetcd的一种模式,为etcd集群提供反向代理服务。
LeaderRaft算法中通过竞选而产生的处理所有数据提交的节点。
Follower竞选失败的节点作为Raft中的从属节点,为算法提供强一致性保证。
Candidate当Follower超过一定时间接收不到Leader的心跳时转变为Candidate开始Leader竞选。
Term某个节点成为Leader到下一次竞选开始的时间周期,称为一个Term。
Index数据项编号。Raft中通过Term和Index来定位数据。

Etcd的架构与术语

流程分析

在这里插入图片描述
通常一个用户的请求发送过来,会经过HTTP Server转发给Store进行具体的事务处理,如果涉及到节点的修改,则需要交给Raft模块进行状态的变更,日志的记录。

然后再同步给别的etcd节点确认数据提交,最后进行数据提交,再次同步。

Etcd主要分为四个部分【http server、store、raft、WAL】

  • HTTP Server: 用于处理用户发送的API请求以及其他etcd节点的同步与心跳信息请求

  • Store: 用于处理 etcd 支持的各类功能的事务,包括数据索引、节点状态变更、监控与反馈、事件处理与执行等等,是 etcd 对用户提供的大多数 API 功能的具体实现。

  • Raft: Raft 强一致性算法的具体实现,是 etcd 的核心。

  • WAL:Write Ahead Log(预写式日志/日志先行),是 etcd 的数据存储方式,也是一种实现事务日志的标准方法。etcd通过 WAL 进行持久化存储,所有的数据提交前都会事先记录日志。Snapshot 是为了防止数据过多而进行的状态快照;Entry 表示存储的具体日志内容。

工作原理及RAFT算法详解

  • Etcd使用Raft协议来维护集群内各个节点状态的一致性。简单说,ETCD集群是一个分布式系统,由多个节点相互通信构成整体对外服务,每个节点都存储了完整的数据,并且通过Raft协议保证每个节点维护的数据是一致的。
  • Raft算法
    • Raft 是一种为了管理复制日志的一致性算法。它提供了和 Paxos 算法相同的功能和性能,但是它的算法结构和 Paxos 不同,使得 Raft 算法更加容易理解并且更容易构建实际的系统。一致性算法允许一组机器像一个整体一样工作,即使其中一些机器出现故障也能够继续工作下去。正因为如此,一致性算法在构建可信赖的大规模软件系统中扮演着重要的角色。
    • Raft算法分为三部分,分别是Leader选举日志复制安全性

Leader选举:包括Raft 状态机和Raft算法中的Term(任期)两部分。

Raft 状态机
  • Raft集群中的每个节点都处于一种基于角色的状态机中。具体来说,Raft定义了节点的三种角色: Follower、Candidate和Leader。
  • 这三种角色状态之间的转换,如下图:
    在这里插入图片描述
1、Leader(领导者):

Leader节点在集群中有且仅能有一个,它负责向所有的Follower节点同步日志数据。

2、Follower(跟随者):

Follower节点从Leader节点获取日志,提供数据查询功能,并将所有修改请求转发给Leader节点。(注意:由于proxy模式的本职就是启一个HTTP代理服务器,所以Etcd的代理节点(proxy)即作为Proxy角色的节点不会参与Leader的选举,只是将所有接收到的用户查询和修改请求转发到任意一个Follower或者Leader节点上。)

3、Candidate(候选者):

当集群中的Leader节点不存在或者失联之后,其他Follower节点转换为Candidate,然后开始新的Leader节点选举。

Raft算法中的Term(任期)
    Raft会把时间分割成任意长度的任期,并且任期用连续的整数来标记。每一段任期都是从一次选举开始,一个或者多个候选人尝试成为领导者。如果一个候选人赢得选举,然后他就会在接下来的任期中充当Leader的职责。在某些情况下,一次选举会造成选票瓜分,这样,这一个任期将没有Leader。如果没有Leader,那么新的一轮选举就马上开始,也就是新的任期就会开始。Raft保证了在一个Term任期内,有且只有一个Leader。

在这里插入图片描述

日志复制【数据复制】

  • 是指主节点将每次操作形成日志条目,并持久化到本地磁盘,然后通过网络IO发送给其他节点。
  • 一旦一个领导人被选举出来,他就开始为客户端提供服务。客户端的每一个请求都包含一条被复制状态机执行的指令。领导人把这条指令作为一条新的日志条目附加到日志中去,然后并行的发起附加条目 RPCs 给其他的服务器,让他们复制这条日志条目。
  • Raft 算法保证所有已提交的日志条目都是持久化的并且最终会被所有可用的状态机执行。当主节点收到包括自己在内超过半数节点成功返回,那么认为该日志是可提交的(committed),并将日志输入到状态机,将结果返回给客户端。
  • 在正常的操作中,领导人和跟随者的日志保持一致性,所以附加日志 RPC 的一致性检查从来不会失败。然而,领导人崩溃的情况会使得日志处于不一致的状态(老的领导人可能还没有完全复制所有的日志条目)。这种不一致问题会在一系列的领导人和跟随者崩溃的情况下加剧。跟随者的日志可能和新的领导人不同的方式。跟随者可能会丢失一些在新的领导人中有的日志条目,他也可能拥有一些领导人没有的日志条目,或者两者都发生。丢失或者多出日志条目可能会持续多个任期。这就引出了另一个部分,就是安全性。

安全性【数据安全】

  • 选主以及日志复制并不能保证节点间数据一致。试想,当一个某个节点挂掉了,一段时间后再次重启,并当选为主节点。而在其挂掉这段时间内,集群若有超过半数节点存活,集群会正常工作,那么会有日志提交。这些提交的日志无法传递给挂掉的节点。当挂掉的节点再次当选主节点,它将缺失部分已提交的日志。在这样场景下,按Raft协议,它将自己日志复制给其他节点,会将集群已经提交的日志给覆盖掉。这显然是错误的。
  • 其他协议解决这个问题的办法是,新当选的主节点会询问其他节点,和自己数据对比,确定出集群已提交数据,然后将缺失的数据同步过来。这个方案有明显缺陷,增加了集群恢复服务的时间(集群在选举阶段不可服务),并且增加了协议的复杂度。Raft解决的办法是,在选主逻辑中,对能够成为主的节点加以限制,确保选出的节点已定包含了集群已经提交的所有日志。如果新选出的主节点已经包含了集群所有提交的日志,那就不需要从和其他节点比对数据了。简化了流程,缩短了集群恢复服务的时间。

etcd应用场景

  • etcd应用场景很多,主要的有以下六种:
    • 服务发现
    • 消息发布与订阅(配置中心)
    • 负载均衡(集群管理)
    • 分布式锁、分布式队列
    • 集群监控
    • LEADER竞选。

服务发现

  • 服务发现要解决的也是分布式系统中最常见的问题之一,即在同一个分布式集群中的进程或服务,要如何才能找到对方并建立连接。本质上来说,服务发现就是想要了解集群中是否有进程在监听 udp 或 tcp 端口,并且通过名字就可以查找和连接。要解决服务发现的问题,需要具备以下三点:
    • 1.一个强一致性、高可用的服务存储目录。基于 Raft 算法的 etcd 天生就是这样一个强一致性高可用的服务存储目录。
    • 2.一种注册服务和监控服务健康状态的机制。用户可以在 etcd 中注册服务,并且对注册的服务设置key TTL,定时保持服务的心跳以达到监控健康状态的效果。
    • 3.一种查找和连接服务的机制。通过在 etcd 指定的主题下注册的服务也能在对应的主题下查找到。为了确保连接,我们可以在每个服务机器上都部署一个 Proxy 模式的 etcd,这样就可以确保能访问 etcd 集群的服务都能互相连接。
  • 例如随着 Docker 容器的流行,多种微服务共同协作,构成一个相对功能强大的架构的案例越来越多。透明化的动态添加这些服务的需求也日益强烈。通过服务发现机制,在 etcd 中注册某个服务名字的目录,在该目录下存储可用的服务节点的 IP。在使用服务的过程中,只要从服务目录下查找可用的服务节点去使用即可。

消息发布与订阅(配置中心)

  • 在分布式系统中,最为适用的组件间通信方式是消息发布与订阅机制。

  • 具体而言,即构建一个配置共享中心,数据提供者在这个配置中心发布消息,而消息使用者则订阅他们关心的主题,一旦相关主题有消息发布,就会实时通知订阅者。

  • 通过这种方式可以实现分布式系统配置的集中式管理与实时动态更新。

负载均衡(集群管理)

  • 利用etcd维护一个负载均衡节点表。etcd可以监控一个集群中多个节点的状态,当有一个请求发过来后,可以轮询式地把请求转发给存活着的多个节点。

  • 类似KafkaMQ,通过Zookeeper来维护生产者和消费者的负载均衡。同样也可以用etcd来做Zookeeper的工作

分布式锁

  • 因为etcd使用Raft算法保持了数据的强一致性,某次操作存储到集群中的值必然是全局一致的,所以很容易实现分布式锁。

  • 锁服务有以下两种使用方式:

    • 保持独占,即所有试图获取锁的用户最终只有一个可以得到。etcd为此提供了一套实现分布式锁原子操作CAS(CompareAndSwap)的API。通过设置prevExist值,可以保证在多个节点同时创建某个目录时,只有一个成功,而该用户即可认为是获得了锁。
    • 控制时序,即所有试图获取锁的用户都会进入等待队列,获得锁的顺序是全局唯一的,同时决定了队列执行顺序。etcd为此也提供了一套API(自动创建有序键),对一个目录建值时指定为POST动作,这样etcd会自动在目录下生成一个当前最大的值为键,存储这个新的值(客户端编号)。同时还可以使用API按顺序列出所有当前目录下的键值。此时这些键的值就是客户端的时序,而这些键中存储的值可以是代表客户端的编号。

分布式队列

  • 在保证队列达到某个条件时再统一按顺序执行。这种方法的实现可以在/queue这个目录中另外建立一个/queue/condition节点。

  • condition可以表示队列大小。比如一个大的任务需要很多小任务就绪的情况下才能执行,每次有一个小任务就绪,就给这个condition数字加1,直到达到大任务规定的数字,再开始执行队列里的一系列小任务,最终执行大任务。

  • condition可以表示某个任务在不在队列。这个任务可以是所有排序任务的首个执行程序,也可以是拓扑结构中没有依赖的点。通常,必须执行这些任务后才能执行队列中的其他任务。

  • condition还可以表示其它的一类开始执行任务的通知。可以由控制程序指定,当condition出现变化时,开始执行队列任务。

集群监控与LEADER竞选

  • 通过etcd来进行监控实现起来非常简单并且实时性强,用到了以下两点特性。

  • Watcher机制,当某个节点消失或有变动时,Watcher会第一时间发现并告知用户。
    节点可以设置TTL key,比如每隔30s向etcd发送一次心跳使代表该节点仍然存活,否则说明节点消失。
    这样就可以第一时间检测到各节点的健康状态,以完成集群的监控要求。

etcd启动参数详解

端口说明

  • 2379和2380为etcd在IANA 的注册端口【为默认端口】,以前为私有端口4001和7001。
    • 2379:为客户端提供通讯
    • 2380:为服务器间提供通讯

参数使用方式

  • 下面所有参数的配置文件为:/etc/etcd/etcd.conf【需要安装etcd以后才会自动生成该文件】
  • 如下,是默认的参数
[root@etcd1 etcd]# cat /etc/etcd/etcd.conf
#[Member]
#ETCD_CORS=""
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
#ETCD_WAL_DIR=""
#ETCD_LISTEN_PEER_URLS="http://localhost:2380"
ETCD_LISTEN_CLIENT_URLS="http://localhost:2379"
#ETCD_MAX_SNAPSHOTS="5"
#ETCD_MAX_WALS="5"
ETCD_NAME="default"
#ETCD_SNAPSHOT_COUNT="100000"
#ETCD_HEARTBEAT_INTERVAL="100"
#ETCD_ELECTION_TIMEOUT="1000"
#ETCD_QUOTA_BACKEND_BYTES="0"
#ETCD_MAX_REQUEST_BYTES="1572864"
#ETCD_GRPC_KEEPALIVE_MIN_TIME="5s"
#ETCD_GRPC_KEEPALIVE_INTERVAL="2h0m0s"
#ETCD_GRPC_KEEPALIVE_TIMEOUT="20s"
#
#[Clustering]
#ETCD_INITIAL_ADVERTISE_PEER_URLS="http://localhost:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://localhost:2379"
#ETCD_DISCOVERY=""
#ETCD_DISCOVERY_FALLBACK="proxy"
#ETCD_DISCOVERY_PROXY=""
#ETCD_DISCOVERY_SRV=""
#ETCD_INITIAL_CLUSTER="default=http://localhost:2380"
#ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
#ETCD_INITIAL_CLUSTER_STATE="new"
#ETCD_STRICT_RECONFIG_CHECK="true"
#ETCD_ENABLE_V2="true"
#
#[Proxy]
#ETCD_PROXY="off"
#ETCD_PROXY_FAILURE_WAIT="5000"
#ETCD_PROXY_REFRESH_INTERVAL="30000"
#ETCD_PROXY_DIAL_TIMEOUT="1000"
#ETCD_PROXY_WRITE_TIMEOUT="5000"
#ETCD_PROXY_READ_TIMEOUT="0"
#
#[Security]
#ETCD_CERT_FILE=""
#ETCD_KEY_FILE=""
#ETCD_CLIENT_CERT_AUTH="false"
#ETCD_TRUSTED_CA_FILE=""
#ETCD_AUTO_TLS="false"
#ETCD_PEER_CERT_FILE=""
#ETCD_PEER_KEY_FILE=""
#ETCD_PEER_CLIENT_CERT_AUTH="false"
#ETCD_PEER_TRUSTED_CA_FILE=""
#ETCD_PEER_AUTO_TLS="false"
#
#[Logging]
#ETCD_DEBUG="false"
#ETCD_LOG_PACKAGE_LEVELS=""
#ETCD_LOG_OUTPUT="default"
#
#[Unsafe]
#ETCD_FORCE_NEW_CLUSTER="false"
#
#[Version]
#ETCD_VERSION="false"
#ETCD_AUTO_COMPACTION_RETENTION="0"
#
#[Profiling]
#ETCD_ENABLE_PPROF="false"
#ETCD_METRICS="basic"
#
#[Auth]
#ETCD_AUTH_TOKEN="simple"
[root@etcd1 etcd]# 

成员标志【member flags】

参数使用说明
--name 'default'本member的名字
--data-dir '${name}.etcd'指定节点的数据存储目录,这些数据包括节点ID,集群ID,集群初始化配置,Snapshot文件,若未指定-wal-dir,还会存储WAL文件;如果不指定会用缺省目录。
--listen-peer-urls http://0.0.0.0:2380本member侧使用,用于监听其他member发送信息的地址。ip为全0代表监听本member侧所有接口
--listen-client-urls http://0.0.0.0:2379本member侧使用,用于监听etcd客户发送信息的地址。ip为全0代表监听本member侧所有接口
--wal-dir 'path'到专用wal目录的路径
--snapshot-count '100000'要将快照触发到磁盘的已提交事务数
--heartbeat-interval '100'检测间隔的时间(毫秒)
--election-timeout '1000'超时时间(毫秒)
--initial-election-tick-advance 'true'是否提前初始化选举时钟启动,以便更快的选举
--max-snapshots '5'要保留的最大快照文件数(0是无限的)
--max-wals '5'要保留的最大wal文件数(0是无限的)
--cors ' 'omma单独的设置CORS来源白名单(跨来源资源共享)
--quota-backend-bytes '0'当后端大小超过给定限额时发出警报(0默认为低空间限额)
--max-txn-ops '128'事务中允许的最大操作数
--max-request-bytes '1572864'服务器将接受的最大客户端请求大小(以字节为单位)
--grpc-keepalive-min-time '5s'客户端在ping服务器之前应该等待的最小持续时间间隔
--grpc-keepalive-interval '2h'检查连接是否激活的服务器到客户机ping的频率持续时间(0表示禁用)
--grpc-keepalive-timeout '20s'关闭无响应连接之前的额外等待时间(0表示禁用)

群集标志【clustering flags】

参数使用说明
--initial-advertise-peer-urls 'http://localhost:2380'其他member使用,其他member通过该地址与本member交互信息。一定要保证从其他member能可访问该地址。静态配置方式下,该参数的value一定要同时在–initial-cluster参数中存在。memberID的生成受–initial-cluster-token和–initial-advertise-peer-urls影响。
--initial-cluster 'etcd01=http://localhost01:2380, etcd02=http://localhost02:2380, etcd03=http://localhost03:2380'本member侧使用。描述集群中所有节点的信息,本member根据此信息去联系其他member。memberID的生成受–initial-cluster-token和–initial-advertise-peer-urls影响。
--initial-cluster-state 'new'用于指示本次是否为新建集群。有两个取值new和existing。如果填为existing,则该member启动时会尝试与其他member交互。集群初次建立时,要填为new,经尝试最后一个节点填existing也正常,其他节点不能填为existing。集群运行过程中,一个member故障后恢复时填为existing,经尝试填为new也正常。
--initial-cluster-token 'etcd-cluster'引导期间etcd集群的初始集群令牌。在运行多个集群时,指定此参数可以防止意外的跨集群交互。
--advertise-client-urls 'http://localhost:2379'etcd客户使用,客户通过该地址与本member交互信息。一定要保证从客户侧能可访问该地址
--discovery ' '用于引导集群的发现URL,指定第三方etcd上key地址,要建立的集群各member都会向其注册自己的地址
--enable-v2 'true'接受etcd V2客户端请求
--discovery-fallback 'proxy'当发现服务失败时的预期行为(“exit”或“proxy”)。“proxy”只支持v2 API
--discovery-proxy ' '用于传输到发现服务的HTTP代理
--discovery-srv ' '用于引导集群的dns srv域
--strict-reconfig-check 'true'拒绝可能导致仲裁丢失的重新配置请求
--auto-compaction-retention '0'自动压缩保留长度。0表示禁用自动压缩
--auto-compaction-mode 'periodic'解释“自动压缩保留”之一:周期性丨“修订版”定期’用于基于持续时间的保留,如果没有提供时间单位,则默认为小时(例如’5m’)。’“版本号”用于基于版本号的保留。

代理标志【proxy flags】

注意:“proxy” supports v2 API only.

参数使用说明
--proxy 'off'代理模式设置(‘off’、‘readonly’或’on’)
--proxy-failure-wait 5000终结点处于失败状态的时间(毫秒)
--proxy-refresh-interval 30000端点刷新间隔的时间(毫秒)
--proxy-dial-timeout 1000拨号超时的时间(毫秒)
--proxy-write-timeout 5000写入超时的时间(毫秒)
--proxy-read-timeout 0读取超时的时间(毫秒)

安全标志【security flags】

参数使用说明
--ca-file ' ' [DEPRECATED]客户端服务器TLS CA文件的路径。“-ca-file ca.crt”可以替换为“-trusted-ca-file ca.crt -client-cert-auth”,etcd将执行相同的操作。
--cert-file ' '客户端服务器TLS证书文件的路径
--key-file ''客户端服务器TLS密钥文件的路径
--client-cert-auth 'false'启用客户证书认证
--client-crl-file ' '客户端证书撤销列表文件的路径
--trusted-ca-file ' '客户端服务器TLS信任CA证书文件的路径
--auto-tls 'false'客户端TLS使用生成的证书
--peer-ca-file ' ' [DEPRECATED]对等服务器TLS CA文件的路径。’-peer-ca-file ca.crt’ 可以被替换为’-peer-trusted-ca-file ca.crt -peer-client-cert-auth’ etcd也将执行相同的操作。
--peer-cert-file ' '对等服务器TLS证书文件的路径。
--peer-key-file ' '对等服务器TLS密钥文件的路径。
--peer-client-cert-auth 'false'启用对等客户端证书身份验证。
--peer-trusted-ca-file ' '对等服务器TLS受信任CA文件的路径。
--peer-auto-tls 'false'如果未提供–peer key file和–peer cert file,则使用自生成证书的对等TLS。
--peer-crl-file ' '对等证书吊销列表文件的路径。

日志标志【logging flags】

参数使用说明
--debug 'false'为etcd启用调试级别日志记录。
--log-package-levels ' '为每个etcd包指定一个特定的日志级别(例如:‘etcdmain=CRITICAL,etcdserver=DEBUG’)。
--log-output 'default'指定“stdout”或“stderr”以跳过日志记录,即使在systemd下运行时也是如此。

不安全标志【unsafe flags】

在使用不安全标志时请小心,因为它会破坏保证根据协商一致协议。

参数使用说明
--force-new-cluster 'false'强制创建一个新的单成员集群。

身份验证标志【auth flags】

参数使用说明
--auth-token 'simple'指定v3认证令牌类型及其选项(‘simple’或’jwt’).

分析标志【profiling flags】

参数使用说明
--enable-pprof 'false'通过HTTP服务器启用运行时分析数据。地址在客户处 URL + “/debug/pprof/”
--metrics 'basic'为导出的度量设置详细级别,指定“扩展”以包括直方图度量
--listen-metrics-urls ' '要侦听度量的URL列表

实验标志【experimental flags】

参数使用说明
--experimental-initial-corrupt-check 'false'允许在为任何客户端/对等流量提供服务之前检查数据损坏
--experimental-corrupt-check-time '0s'群集损坏检查通过之间的持续时间
--experimental-enable-v2v3 ' '在给定前缀下通过v3后端服务v2请求

etcd常用v3命令与参数

  • etcd最新的API版本是v3,与v2相比,v3更高效更清晰。
    k8s默认使用的etcd V3版本API,ectdctl默认使用V2版本API。

  • 要使用v3,设置环境变量

    • 临时:export ETCDCTL_API=3
    • 永久:vim /etc/profile后在里面添加export ETCDCTL_API=3,然后执行source /etc/profile
  • 使用v3或v2命令也可在命令前带上ETCDCTL_API=3ETCDCTL_API=2

  • 加密的方式:

	ETCDCTL_API=3 etcdctl \
	 --endpoints=https://172.xxx.xx.xx:2379 \
	 --cacert=/etc/kubernetes/cert/ca.pem \
	 --cert=/etc/etcd/cert/etcd.pem \
	 --key=/etc/etcd/cert/etcd-key.pem 
	version

etcd V3命令

命令用法说明可选参数
getUSAGE:etcdctl get [options] [range_end]获取一个或一个范围内的键和键值OPTIONS: --consistency=“l” 线性化(l)或串行化(s) --from-key[=false] 利用byte(字节)进行比较的方式获取大于或等于给定键的键 --keys-only[=false] 只获取键,不获取键值 --limit=0 显示结果的最大数量 --order="" 结果排序,可设置为ASCEND或 DESCEND (默认为ASCEND ) --prefix[=false] 获取前缀匹配到的键 --print-value-only[=false] 当使用“simple”输出格式时,只写值 --rev=0 指明kv的修订版本 --sort-by="" 按目标排序,可设置的值有CREATE, KEY, MODIFY, VALUE, VERSION
putUSAGE:etcdctl put [options] 设置键和键值OPTIONS: --ignore-lease[=false] 使用当前租约更新key,key不存在时报错 --ignore-value[=false] 使用key当前的value更新key,key不存在时报错 --lease=“0” 请将lease ID(十六进制)附加到key从而指定租约,租约过期key自动删除 --prev-kv[=false] 返回修改前的键值对
delUSAGE:etcdctl del [options] [range_end]删除键[key]和键值[value]OPTIONS: --from-key[=false] 利用byte(字节)进行比较的方式删除大于或等于给定键的键 --prefix[=false] 删除前缀匹配到的键 --prev-kv[=false] 返回已删除的键值对
txnUSAGE:etcdctl txn [options]Txn处理一个事务中的所有请求OPTIONS: -i, --interactive[=false] 在交互模式下输入事务
compactionUSAGE:etcdctl compaction [options] 压缩etcd中的事件历史记录OPTIONS: --physical[=false] “true”用于等待压缩从物理上删除所有旧修订;
alarm disarmUSAGE:etcdctl alarm disarm解除所有警报-
alarm listUSAGE:etcdctl alarm list列出所有警报-
defragUSAGE:etcdctl defrag使用给定端点对etcd成员的存储进行碎片整理OPTIONS: --data-dir="" 可选的。如果存在,对etcd不使用的数据目录进行碎片整理。
endpoint healthUSAGE:etcdctl endpoint health检查–endpoints标志中指定的端点的健康状况-
endpoint statusUSAGE:etcdctl endpoint status打印出–endpoints标志中指定的端点的状态-
endpoint hashkvUSAGE:etcdctl endpoint hashkv在–endpoints中为每个端点打印KV历史记录OPTIONS: --rev=0 最大散列修订(默认:所有修订)
move-leaderUSAGE:etcdctl move-leader 将领导转移到另一个etcd集群成员-
watchUSAGE:etcdctl watch [options] [range_end] [ --] [exec-command arg1 arg2 …]在键或前缀上观察事件流,当监视到时可以执行相应命令OPTIONS: -i, --interactive[=false] 进入交互模式 --prefix[=false] 如果设置了前缀,则监视这个前缀 --prev-kv[=false] 获取事件发生之前的键值对 --rev=0 开始监视这个修订
versionUSAGE:etcdctl version输出版本号-
lease grantUSAGE:etcdctl lease grant 创造租约,可以为key设置超时时间后自动删除key-
lease revokeUSAGE:etcdctl lease revoke 撤销租约 ,并删除所有关联的key-
lease timetoliveUSAGE:etcdctl lease timetolive [options]获取租赁信息OPTIONS: --keys[=false] 获取附在租约上的键
lease listUSAGE:etcdctl lease list列出所有有效租约 -
lease keep-aliveUSAGE:etcdctl lease keep-alive [options] 让租约保持活力(续订)OPTIONS: --once[=false] 将keep-alive时间重置为其原始值并立即退出
member addUSAGE:etcdctl member add [options] 添加一个成员到集群OPTIONS: --peer-urls=""
member removeUSAGE:etcdctl member remove [options]从集群中删除一个成员-
member updateUSAGE:etcdctl member update [options]在集群中更新一个成员OPTIONS: --peer-urls=""
member listUSAGE:etcdctl member list显示集群内所有成员-
snapshot saveUSAGE:etcdctl snapshot save 将etcd节点后端快照存储到给定文件-
snapshot restoreUSAGE:etcdctl snapshot restore [options]将etcd成员快照还原到etcd目录OPTIONS: --data-dir="" 数据目录的路径 --initial-advertise-peer-urls=“http://localhost:2380” 此成员要向集群的其余部分发布的对等url列表 --initial-cluster=“default=http://localhost:2380” 用于恢复引导的初始集群配置 --initial-cluster-token=“etcd-cluster” 恢复引导期间etcd集群的初始集群令牌 --name=“default” 此成员的可读名称 --skip-hash-check[=false] 忽略快照完整性散列值(如果从数据目录复制的请求) --wal-dir="" WAL目录的路径(如果没有指定,则使用–data-dir )
snapshot statusUSAGE:etcdctl snapshot status 获取给定文件的后端快照状态-
make-mirrorUSAGE:etcdctl make-mirror [options] 在目标etcd集群中创建镜像OPTIONS: --dest-cacert="" 使用此CA包验证启用了TLS的安全服务器的证书 --dest-cert="" 使用此TLS证书文件为目标集群标识安全客户端 --dest-insecure-transport[=true] 为客户端连接禁用传输安全性 --dest-key="" 使用此TLS密钥文件识别安全客户端 --dest-prefix="" 将一个前缀映射到目标集群中的另一个前缀 --no-dest-prefix[=false] 将key-values映射到目标集群的root --prefix="" 到镜像的键值前缀
migrateUSAGE:etcdctl migrate将v2存储中的密钥迁移到mvcc存储OPTIONS: --data-dir="" 数据目录的路径 --no-ttl[=false] 不转换TTL keys --transformer="" 用户提供的转换器程序的路径 --wal-dir="" 到WAL目录的路径
lockUSAGE:etcdctl lock [exec-command arg1 arg2 …]获取一个命名锁OPTIONS: --ttl=10 会话超时
electUSAGE:etcdctl elect [proposal]观察并参与领导人选举OPTIONS: -l, --listen[=false] 观察模式
auth enableUSAGE:etcdctl auth enable启用身份认证-
auth disableUSAGE:etcdctl auth disable禁用身份认证-
user addUSAGE:etcdctl user add [options]添加一个新用户OPTIONS: --interactive[=true] 从stdin读取密码,而不是交互式终端
user deleteUSAGE:etcdctl user delete 删除一个用户-
user getUSAGE:etcdctl user get [options]获取用户的详细信息OPTIONS: --detail[=false] 显示授予用户的角色权限
user listUSAGE:etcdctl user list显示所有用户-
user passwdUSAGE:etcdctl user passwd [options]更改用户密码OPTIONS: --interactive[=true] 如果是true则从stdin读取密码,而不是交互式终端
user grant-roleUSAGE:etcdctl user grant-role 授予用户角色-
user revoke-roleUSAGE:etcdctl user revoke-role 撤消用户的角色-
role addUSAGE:etcdctl role add 添加新角色-
role deleteUSAGE:etcdctl role delete 删除一个角色-
role getUSAGE:etcdctl role get 获取角色的详细信息-
role listUSAGE:etcdctl role list显示所有角色-
role grant-permissionUSAGE:etcdctl role grant-permission [options] [endkey]授予钥密给角色OPTIONS: --from-key[=false] 利用byte(字节)进行比较的方式授予大于或等于给定键的键的权限 --prefix[=false] 授予前缀匹配到的键的权限
role revoke-permissionUSAGE:etcdctl role revoke-permission [endkey]从角色中撤消密钥OPTIONS: --from-key[=false] 利用byte(字节)进行比较的方式撤销大于或等于给定键的键的权限 --prefix[=false] 撤销前缀匹配到的键的权限
check perfUSAGE:etcdctl check perf [options]检查etcd集群的性能OPTIONS: --load=“s” 性能检查的工作负载模型。可接受的工作负载:s(小)、m(中)、l(大)、xl(xLarge) --prefix="/etcdctl-check-perf/" 写入性能检查键的前缀。
helpUSAGE:etcdctl help [command]帮助信息-

etcd V3命令全局参数

全局参数说明
--cacert=""使用CA包验证启用了tls的安全服务器的证书
--cert=""使用此TLS证书文件识别安全客户端
--command-timeout=5s短时间运行命令超时(不包括拨号超时)
--debug[=false]启用客户端调试日志记录
--dial-timeout=2s客户端连接的拨号超时
-d, --discovery-srv=""要查询描述集群端点的SRV记录的域名
--endpoints=[127.0.0.1:2379]gRPC端点
--hex[=false]将字节字符串打印为十六进制编码的字符串
--insecure-discovery[=true]接受描述集群端点的不安全SRV记录
--insecure-skip-tls-verify[=false]跳过服务器证书验证
--insecure-transport[=true]为客户端连接禁用传输安全性
--keepalive-time=2s保持客户端连接的存活时间
--keepalive-timeout=6s保持客户端连接的超时
--key=""使用此TLS密钥文件识别安全客户端
--user=""用于身份验证的用户名:password
-w, --write-out=“simple”设置输出格式 (fields, json, protobuf, simple, table)
Kubernetes集群中,etcd扮演着非常重要的角色,用于存储集群状态和元数据。为保证集群的高可用性,需要搭建etcd高可用集群。下面是搭建k8s etcd高可用的详细步骤: 1. 安装etcd 在所有etcd节点上安装etcd。可以从etcd的官方网站下载二进制文件进行安装。在安装完成后,需要在每个etcd节点上创建一个etcd配置文件,配置文件示例如下: ``` # cat /etc/etcd/etcd.conf # etcd configuration # [member] ETCD_NAME=default ETCD_DATA_DIR="/var/lib/etcd/default.etcd" #ETCD_WAL_DIR="" ETCD_LISTEN_PEER_URLS="http://192.168.0.1:2380" ETCD_LISTEN_CLIENT_URLS="http://192.168.0.1:2379" #[cluster] ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.0.1:2380" ETCD_ADVERTISE_CLIENT_URLS="http://192.168.0.1:2379" ETCD_INITIAL_CLUSTER="default=http://192.168.0.1:2380,default=http://192.168.0.2:2380,default=http://192.168.0.3:2380" ETCD_INITIAL_CLUSTER_STATE="new" ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster" ``` 在每个etcd节点上需要修改配置文件中的IP地址和端口号,以及节点的名称。需要注意的是,ETCD_INITIAL_CLUSTER中需要列出集群中所有的etcd节点。 2. 启动etcd 在所有etcd节点上启动etcd服务: ``` # systemctl enable etcd # systemctl start etcd ``` 3. 配置etcd集群自动发现 在每个etcd节点上创建一个etcd集群自动发现的配置文件,配置文件示例如下: ``` # cat /etc/systemd/system/etcd2.service.d/etcd2.conf [Service] Environment=ETCDCTL_ENDPOINTS=http://192.168.0.1:2379,http://192.168.0.2:2379,http://192.168.0.3:2379 ``` 在每个etcd节点上需要修改配置文件中的IP地址和端口号,以及集群中所有etcd节点的地址。 4. 配置kubeadm 在kubeadm配置文件中,需要配置etcd集群的地址和端口号,以及etcd集群中的所有节点。配置文件示例如下: ``` apiVersion: kubeadm.k8s.io/v1beta2 kind: ClusterConfiguration etcd: external: endpoints: - http://192.168.0.1:2379 - http://192.168.0.2:2379 - http://192.168.0.3:2379 caFile: /etc/kubernetes/pki/etcd/ca.crt certFile: /etc/kubernetes/pki/apiserver-etcd-client.crt keyFile: /etc/kubernetes/pki/apiserver-etcd-client.key ``` 在配置文件中需要修改etcd集群的地址和端口号,以及etcd集群中所有节点的地址。 5. 创建kubernetes集群 使用kubeadm创建kubernetes集群时,需要指定etcd集群的地址和端口号,以及etcd集群中所有节点的地址。命令示例如下: ``` # kubeadm init --config=kubeadm.yaml ``` 在创建集群时需要注意,etcd集群中至少需要有3个节点才能保证高可用性。如果etcd集群中有节点出现故障,可以在其它的etcd节点上执行etcd容器恢复。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

҉人间无事人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值