### 概述
etcd 是一個分布式一致性k-v存儲系統,可用于服務注冊發現與共享配置,具有以下優點。
- 簡單 : 相比于晦澀難懂的paxos算法,etcd基于相對簡單且易實現的raft算法實現一致性,并通過gRPC提供接口調用
- 安全:支持TLS通信,并可以針對不同的用戶進行對key的讀寫控制
- 高性能:10,000 /秒的寫性能
> etcd release [下載地址](https://github.com/coreos/etcd/releases/) 頁面下載最新版本的二進制文件
### etcd 依賴go,需要先到官方站點下載最新go
tar -xf go1.8.3.linux-amd64.tar.gz -C /usr/local/
cat > /etc/profile.d/go.sh <<EOF
export PATH=/usr/local/go/bin/:$PATH
EOF
### 安裝 etcd
tar xf etcd-v3.2.7-linux-amd64.tar.gz -C /usr/local/
ln -sv /usr/local/etcd-v3.2.7-linux-amd64/ /usr/local/etcd
cat > /etc/profile.d/etcd.sh <<EOF
export PATH=/usr/local/etcd/:$PATH
EOF
useradd -r -s /sbin/nologin etcd
mkdir /data/lib/etcd/ -p
chown -R etcd:etcd /data/lib/etcd
> etcd-v3.2.1 有bug 解決方法參考鏈接 [link](http://dockone.io/question/1408)
### 修改/etc/etcd/etcd.conf 注意修改每個node ip
[member]
ETCD_NAME=cd-test-001.drcloud.com
ETCD_DATA_DIR="/data/lib/etcd/"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_ADVERTISE_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://172.16.200.100:2380"
[cluster]
ETCD_INITIAL_CLUSTER="cd-test-001.drcloud.com=http://172.16.200.100:2380,cd-test-002.drcloud.com=http://172.16.200.101:2380,cd-test-003.drcloud.com=http://172.16.200.102:2380"
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
### 參數說明
name 節點名稱
data-dir 指定節點的數據存儲目錄
listen-peer-urls 監聽URL,用于與其他節點通訊
listen-client-urls 對外提供服務的地址:比如 http://ip:2379,http://127.0.0.1:2379 ,客戶端會連接到這里和 etcd 交互
initial-advertise-peer-urls 該節點member(同伴)監聽地址,這個值會告訴集群中其他節點
initial-cluster 集群中所有節點的信息,格式為 node1=http://ip1:2380,node2=http://ip2:2380,… 。注意:這里的 node1 是節點的 --name 指定的名字;后面的 ip1:2380 是 --initial-advertise-peer-urls 指定的值
initial-cluster-state 新建集群的時候,這個值為 new ;假如已經存在的集群,這個值為 existing
initial-cluster-token 創建集群的 token,這個值每個集群保持唯一。這樣的話,如果你要重新創建集群,即使配置和之前一樣,也會再次生成新的集群和節點 uuid;否則會導致多個集群之間的沖突,造成未知的錯誤
advertise-client-urls 對外公告的該節點客戶端監聽地址,這個值會告訴集群中其他節點
### systemd 啟動配置文件, 默認rpm 安裝的
cat > /usr/lib/systemd/system/etcd.service << EOF
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target
[Service]
Type=notify
WorkingDirectory=/data/lib/etcd/
EnvironmentFile=-/etc/etcd/etcd.conf
User=etcd
# set GOMAXPROCS to number of processors
ExecStart=/bin/bash -c "GOMAXPROCS=$(nproc) /usr/local/etcd/etcd --name=\"${ETCD_NAME}\" --data-dir=\"${ETCD_DATA_DIR}\" --listen-client-urls=\"${ETCD_LISTEN_CLIENT_URLS}\" --initial-advertise-peer-urls=\"${ETCD_INITIAL_ADVERTISE_PEER_URLS}\" --listen-peer-urls=\"${ETCD_LISTEN_PEER_URLS}\" --initial-cluster=\"${ETCD_INITIAL_CLUSTER}\" --advertise-client-urls=\"${ETCD_ADVERTISE_CLIENT_URLS}\" --initial-cluster-token=\"${ETCD_INITIAL_CLUSTER_TOKEN}\" --initial-cluster-state=\"${ETCD_INITIAL_CLUSTER_STATE}\""
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
EOF
### 配置防火墻規則
firewall-cmd --zone=public --add-port=2379/tcp --permanent
firewall-cmd --zone=public --add-port=2380/tcp --permanent
### etcd集群運行過程中的改配
主要用于故障節點替換,集群擴容需求。
集群運行過程中的改配不區分static和discovery方式。
1、替換的步驟:
比如集群中某一member重啟后仍不能恢復時,就需要替換一個新member進來。
a、從集群中刪除老member
etcdctl member remove 1609b5a3a078c227
b、向集群中新增新member
etcdctl member add <name> <peerURL>
例子:敲命令
etcdctl member add etcd2 http://192.168.2.56:2380
后返回如下信息
Added member named etcd2 with ID b7d510356ee2e68b to cluster
ETCD_NAME="etcd2"
ETCD_INITIAL_CLUSTER="etcd0=http://192.168.2.55:2380,etcd2=http://192.168.2.56:2380,etcd1=http://192.168.2.54:2380"
ETCD_INITIAL_CLUSTER_STATE="existing"
c、刪除老節點data目錄
如果不刪除,啟動后節點仍舊沿用之前的老id, 其他正常節點不認,不能建立聯系
d、在新member上啟動etcd進程
2、擴容的步驟:
執行上面第b,d兩步即可。
### etcd 集群健康檢查
curl http://172.16.200.206:2379/health
etcdctl cluster-health
member 37460b828c8625a0 is healthy: got healthy result from http://0.0.0.0:2379
member 52b98a730bb6d77c is healthy: got healthy result from http://172.16.200.208:2379
member 7f453c22b9758161 is healthy: got healthy result from http://172.16.200.206:2379
- 第一章 kubernetes 功能介紹
- 第二章 在CentOS上部署kubernetes1.7.6集群
- 第三章 創建TLS證書和秘鑰
- 第四章 安裝kubectl命令行工具
- 第五章 創建kubeconfig 文件
- 第六章 etcd 集群部署
- 第七章 部署k8s-master-v1.7.6節點
- 第八章 部署k8s-v1.7.6 node 節點
- 第九章 kubectl 操作示例
- 第十章 在kubernetes 部署第一個應用
- 第十一章 kubernetes之pod 調度
- 第十二章 K8S服務組件之kube-dns&Dashboard
- 第十三章 Kubernetes中的角色訪問控制機制(RBAC)支持
- 第十四章 部署nginx ingress
- 第十五章 使用Prometheus監控Kubernetes集群和應用
- 第十六章 使用helm 應用部署工具
- 第十七章 kubernetes 從1.7 到1.8升級記錄
- 第十八章 在kubernetes 使用ceph
- 第十九章 基于 Jenkins 的 CI/CD(一)
- 第二十章 基于jenkins的CI/CD(二)
- 第二十一章 基于prometheus自定指標HPA彈性伸縮