etcd 研究研究

先記錄參考信息:
etcd 場景
https://blog.csdn.net/bbwangj/article/details/82584988

etcd 集羣部署
https://www.jianshu.com/p/85803026a9a1html

http://www.javashuo.com/article/p-hqyiloax-cz.html    (docker 方式)

使用
http://www.javashuo.com/article/p-fibkqjfu-mg.html

官網
https://etcd.io/node


系統全面簡介
http://www.javashuo.com/article/p-gdvnojyw-eb.htmlpython



工具:
etcdkeeper3
etcd-browser算法

 ETCD 概念docker

Raft:etcd所採用的保證分佈式系統強一致性的算法。
Node:一個Raft狀態機實例。
Member: 一個etcd實例。它管理着一個Node,而且能夠爲客戶端請求提供服務。
Cluster:由多個Member構成能夠協同工做的etcd集羣。
Peer:對同一個etcd集羣中另一個Member的稱呼。
Client: 向etcd集羣發送HTTP請求的客戶端。
WAL:預寫式日誌,etcd用於持久化存儲的日誌格式。
snapshot:etcd防止WAL文件過多而設置的快照,存儲etcd數據狀態。
Proxy:etcd的一種模式,爲etcd集羣提供反向代理服務。
Leader:Raft算法中經過競選而產生的處理全部數據提交的節點。
Follower:競選失敗的節點做爲Raft中的從屬節點,爲算法提供強一致性保證。
Candidate:當Follower超過必定時間接收不到Leader的心跳時轉變爲Candidate開始競選。
Term:某個節點成爲Leader到下一次競選時間,稱爲一個Term。
Index:數據項編號。Raft中經過Term和Index來定位數據。

 



部署
json

配置文件centos

/opt/etcd/cfg/etcd.confapi

ETCD_NAME="etcd01" 
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://10.0.52.13:2380"
ETCD_LISTEN_CLIENT_URLS="https://10.0.52.13:2379,http://127.0.0.1:2379"
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://10.0.52.13:2380" ETCD_ADVERTISE_CLIENT_URLS="https://10.0.52.13:2379"
ETCD_INITIAL_CLUSTER="etcd01=https://10.0.52.13:2380,etcd02=https://10.0.52.14:2380,etcd03=https://10.0.52.6:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new" #[Security]
ETCD_CERT_FILE="/opt/etcd/ssl/server.pem"
ETCD_KEY_FILE="/opt/etcd/ssl/server-key.pem"
ETCD_TRUSTED_CA_FILE="/opt/etcd/ssl/ca.pem"
ETCD_CLIENT_CERT_AUTH="true"
ETCD_PEER_CERT_FILE="/opt/etcd/ssl/server.pem"
ETCD_PEER_KEY_FILE="/opt/etcd/ssl/server-key.pem"
ETCD_PEER_TRUSTED_CA_FILE="/opt/etcd/ssl/ca.pem"
ETCD_PEER_CLIENT_CERT_AUTH="true"

 
把配置文件裏的信息解析成命令行參數

bash

--name etcd0      本member 的名字
--initial-advertise-peer-urls http://192.168.2.55:2380  本member地址,給其它member 同步數據用. 
--listen-peer-urls  http://0.0.0.0:2380 必須爲 0.0.0.0 不能localhost , 同步數據
--listen-client-urls http://0.0.0.0:2379 必須爲 0.0.0.0 不能localhost , api 接口

--advertise-client-urls http://192.168.2.55:2379  本member地址, 提供api 服務

--initial-cluster-token etcd-cluster-2 設置集羣token ( 名稱)

--initial-cluster etcd0=http://192.168.2.55:2380,
etcd1=http://192.168.2.54:2380
,etcd2=http://192.168.2.56:2380

指定集羣成員

--initial-cluster-state new     new 或  existing,  新建仍是加入其它,仍是 補充節點
-data-dir   數據目錄 , 默認設置看配置文件。

-discovery http://192.168.1.163:20003/v2/keys/discovery/78b12ad7-2c1d-40db-9416-3727baf686cb   // 不明白其意



單節點部署網絡

ubt  直接  執行 apt-get install   etcd 
centos 直接執行  yum install etcd 
經過 一下命令對服務進行控制

systemctl start etcd
systemctl stop etcd
systemctl restart etcd
systemctl status etcd

經過
/etc/systemd/etcd.service 配置文件設置啓動參數

使用
etcdctl 命令行 進行 驗證, 和操做api  

---------------------------------------------------------------------------------------------------------------------------------
如下是應用部分
ETCD  主要功能:
1. 鍵值存儲  (查, 建, 改, 刪)
2.有序鍵
3.watch  觀察, 觀察鍵值/node 修改


應用場景:
1. 集羣負載均衡 
服務程序啓動後, 在同一的node下寫入 本身的ip 信息
客戶端/代理  watch node ,  更新服務 ip列表, 按策略找 ip 訪問 。

2.微服務
其實相似上面 

3.k8s 如何使用 ETCD
保存了 flannel 等網絡插件配置信息
k8s 自己信息,  各類對象信息:pod , deploy, svc 等

查看網絡信息

$ etcdctl --ca-file=/etc/kubernetes/ssl/ca.pem --cert-file=/etc/kubernetes/ssl/kubernetes.pem --key-file=/etc/kubernetes/ssl/kubernetes-key.pem ls /kube-centos/network -r
2018-01-19 18:38:22.768145 I | warning: ignoring ServerName for user-provided CA for backwards compatibility is deprecated
/kube-centos/network/config
/kube-centos/network/subnets
/kube-centos/network/subnets/172.30.31.0-24
/kube-centos/network/subnets/172.30.20.0-24

$ etcdctl --ca-file=/etc/kubernetes/ssl/ca.pem --cert-file=/etc/kubernetes/ssl/kubernetes.pem --key-file=/etc/kubernetes/ssl/kubernetes-key.pem get /kube-centos/network/config 

2018-01-19 18:38:22.768145 I | warning: ignoring ServerName for user-provided CA for backwards compatibility is deprecated

{ "Network": "172.30.0.0/16", "SubnetLen": 24, "Backend": { "Type": "host-gw" } }

 

 

使用 v3 api  能夠在  /registry  目錄下查看到  k8s 的各類對象信息

ThirdPartyResourceData
apiextensions.k8s.io
apiregistration.k8s.io
certificatesigningrequests
clusterrolebindings
clusterroles
configmaps
controllerrevisions
controllers
daemonsets
deployments
events
horizontalpodautoscalers
ingress
limitranges
minions
monitoring.coreos.com
namespaces
persistentvolumeclaims
persistentvolumes
poddisruptionbudgets
pods
ranges
replicasets
resourcequotas
rolebindings
roles
secrets
serviceaccounts
services
statefulsets
storageclasses
thirdpartyresources

好比查看  pod 信息

ETCDCTL_API=3 etcdctl get /registry/pods --prefix -w json|python -m json.tool

 

參考了 :
http://www.javashuo.com/article/p-obgsrzsu-ks.htmlhttps://blog.csdn.net/bbwangj/article/details/82866927

 

其它應用場景見文章開頭的連接。本文完結,  寫下來 纔會記憶深入

相關文章
相關標籤/搜索