先記錄參考信息:
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.conf
api
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
其它應用場景見文章開頭的連接。本文完結, 寫下來 纔會記憶深入