手动部署很简单,这里花了10分钟搞定

部署etcd


3台机器

  • etcd:由于 raft 算法的特性,集群的节点数必须是奇数
  1. [root@linux-node1 ~]# cat /etc/hosts
  2. 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
  3. ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
  4. 192.168.56.111 linux-node1 linux-node1.k8s.com
  5. 192.168.56.112 linux-node2 linux-node2.k8s.com
  6. 192.168.56.113 linux-node3 linux-node3.k8s.com
  7. [root@linux-node1 ~]# cat /etc/redhat-release
  8. CentOS Linux release 7.3.1611 (Core)
  9. [root@linux-node1 ~]#

  

三台服务器分别创建 etcd 用户并指定用户组为etcd

  1. groupadd etcd

  

分别在三台服务器创建 conf、data、bin 目录:

  1. mkdir -p /home/etcd/{conf,data,bin}

  

将 etcd-v3.2.18-linux-amd64.tar.gz 分别上传至三台服务器中,解压后将 etcdctl、etcd 复制到 /home/etcd/bin 目录下,并将 /home/etcd/bin 目录配置到系统环境变量下

  1. [root@linux-node2 ~]# mkdir -p /home/etcd/{conf,data,bin}
  2. [root@linux-node2 ~]# tar xfz etcd-v3.2.18-linux-amd64.tar.gz
  3. [root@linux-node2 ~]# ll
  4. total 10320
  5. -rw-------. 1 root root 1259 Jun 11 18:14 anaconda-ks.cfg
  6. drwxr-xr-x 3 478493 89939 123 Mar 30 01:49 etcd-v3.2.18-linux-amd64
  7. -rw-r--r-- 1 root root 10562874 Mar 30 01:58 etcd-v3.2.18-linux-amd64.tar.gz
  8. [root@linux-node2 ~]# cd etcd-v3.2.18-linux-amd64/
  9. [root@linux-node2 ~/etcd-v3.2.18-linux-amd64]# ls
  10. Documentation etcd etcdctl README-etcdctl.md README.md READMEv2-etcdctl.md
  11. [root@linux-node2 ~/etcd-v3.2.18-linux-amd64]# cp etcd /home/etcd/bin/
  12. [root@linux-node2 ~/etcd-v3.2.18-linux-amd64]# cp etcdctl /home/etcd/bin/
  13. [root@linux-node2 ~/etcd-v3.2.18-linux-amd64]#

  

三台服务器分别编辑 systemd 启动文件:
vim /usr/lib/systemd/system/etcd.service

  1. [root@linux-node1 ~]# cat /usr/lib/systemd/system/etcd.service
  2. [Unit]
  3. Description=Etcd Server
  4. After=network.target
  5. After=network-online.target
  6. Wants=network-online.target
  7.  
  8. [Service]
  9. Type=notify
  10. WorkingDirectory=/home/etcd/data
  11. EnvironmentFile=-/home/etcd/conf/etcd.conf
  12. User=etcd
  13. ExecStart=/bin/bash -c "GOMAXPROCS=$(nproc) /home/etcd/bin/etcd \
  14. --name ${ETCD_NAME} \
  15. --initial-advertise-peer-urls ${ETCD_INITIAL_ADVERTISE_PEER_URLS} \
  16. --listen-peer-urls ${ETCD_LISTEN_PEER_URLS} \
  17. --listen-client-urls ${ETCD_LISTEN_CLIENT_URLS},http://127.0.0.1:2379 \
  18. --advertise-client-urls ${ETCD_ADVERTISE_CLIENT_URLS} \
  19. --initial-cluster-token ${ETCD_INITIAL_CLUSTER_TOKEN} \
  20. --initial-cluster ${ETCD_CLUSTER_ADDRESS} \
  21. --initial-cluster-state new \
  22. --data-dir=${ETCD_DATA_DIR}"
  23. Restart=on-failure
  24. LimitNOFILE=65536
  25.  
  26. [Install]
  27. WantedBy=multi-user.target
  28. [root@linux-node1 ~]#

  

配置文件解释

  • 规划三个节点 etcd name 分别为:etcd1、etcd2、etcd3
  • 下列配置文件内容中包含中文处需要根据当前服务器实际信息进行修改,ETCD_CLUSTER_ADDRESS 的值也要根据自己实际的 IP 就行修改,切记请勿直接 copy 后就立即使用
  1. # [member]
  2. ETCD_NAME=当前节点的etcd name,例如:etcd1
  3. ETCD_DATA_DIR="/home/etcd/data"
  4. ETCD_LISTEN_PEER_URLS="http://当前服务器IP:2380"
  5. ETCD_LISTEN_CLIENT_URLS="http://当前服务器IP:2379"
  6. #ETCD_WAL_DIR=""
  7. #ETCD_SNAPSHOT_COUNT="10000"
  8. #ETCD_HEARTBEAT_INTERVAL="100"
  9. #ETCD_ELECTION_TIMEOUT="1000"
  10. #ETCD_MAX_SNAPSHOTS="5"
  11. #ETCD_MAX_WALS="5"
  12. #ETCD_CORS=""
  13.  
  14. #[cluster]
  15. ETCD_INITIAL_ADVERTISE_PEER_URLS="http://当前服务器IP:2380"
  16. ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
  17. ETCD_ADVERTISE_CLIENT_URLS="http://当前服务器IP:2379"
  18. ETCD_CLUSTER_ADDRESS="etcd1=http://192.168.56.111:2380,etcd2=http://192.168.56.112:2380,etcd3=http://192.168.56.113:2380"
  19.  
  20. #ETCD_INITIAL_ADVERTISE_PEER_URLS="http://localhost:2380"
  21. # if you use different ETCD_NAME (e.g. test), set ETCD_INITIAL_CLUSTER value for this name, i.e. "test=http://..."
  22. #ETCD_INITIAL_CLUSTER="default=http://localhost:2380"
  23. #ETCD_INITIAL_CLUSTER_STATE="new"
  24. #ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
  25. #ETCD_ADVERTISE_CLIENT_URLS="http://localhost:2379"
  26. #ETCD_DISCOVERY=""
  27. #ETCD_DISCOVERY_SRV=""
  28. #ETCD_DISCOVERY_FALLBACK="proxy"
  29. #ETCD_DISCOVERY_PROXY=""
  30. #ETCD_STRICT_RECONFIG_CHECK="false"
  31. #ETCD_AUTO_COMPACTION_RETENTIO:N="0"
  32. #
  33. #[proxy]
  34. #ETCD_PROXY="off"
  35. #ETCD_PROXY_FAILURE_WAIT="5000"

  

配置文件,对于etcd1

  1. # [member]
  2. ETCD_NAME=etcd1
  3. ETCD_DATA_DIR="/home/etcd/data"
  4. ETCD_LISTEN_PEER_URLS="http://192.168.56.111:2380"
  5. ETCD_LISTEN_CLIENT_URLS="http://192.168.56.111:2379"
  6. #ETCD_WAL_DIR=""
  7. #ETCD_SNAPSHOT_COUNT="10000"
  8. #ETCD_HEARTBEAT_INTERVAL="100"
  9. #ETCD_ELECTION_TIMEOUT="1000"
  10. #ETCD_MAX_SNAPSHOTS="5"
  11. #ETCD_MAX_WALS="5"
  12. #ETCD_CORS=""
  13.  
  14. #[cluster]
  15. ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.56.111:2380"
  16. ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
  17. ETCD_ADVERTISE_CLIENT_URLS="http://192.168.56.111:2379"
  18. ETCD_CLUSTER_ADDRESS="etcd1=http://192.168.56.111:2380,etcd2=http://192.168.56.112:2380,etcd3=http://192.168.56.113:2380"
  19.  
  20. #ETCD_INITIAL_ADVERTISE_PEER_URLS="http://localhost:2380"
  21. # if you use different ETCD_NAME (e.g. test), set ETCD_INITIAL_CLUSTER value for this name, i.e. "test=http://..."
  22. #ETCD_INITIAL_CLUSTER="default=http://localhost:2380"
  23. #ETCD_INITIAL_CLUSTER_STATE="new"
  24. #ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
  25. #ETCD_ADVERTISE_CLIENT_URLS="http://localhost:2379"
  26. #ETCD_DISCOVERY=""
  27. #ETCD_DISCOVERY_SRV=""
  28. #ETCD_DISCOVERY_FALLBACK="proxy"
  29. #ETCD_DISCOVERY_PROXY=""
  30. #ETCD_STRICT_RECONFIG_CHECK="false"
  31. #ETCD_AUTO_COMPACTION_RETENTIO:N="0"
  32. #
  33. #[proxy]
  34. #ETCD_PROXY="off"
  35. #ETCD_PROXY_FAILURE_WAIT="5000"

  

对于etcd2

  1. # [member]
  2. ETCD_NAME=etcd2
  3. ETCD_DATA_DIR="/home/etcd/data"
  4. ETCD_LISTEN_PEER_URLS="http://192.168.56.112:2380"
  5. ETCD_LISTEN_CLIENT_URLS="http://192.168.56.112:2379"
  6. #ETCD_WAL_DIR=""
  7. #ETCD_SNAPSHOT_COUNT="10000"
  8. #ETCD_HEARTBEAT_INTERVAL="100"
  9. #ETCD_ELECTION_TIMEOUT="1000"
  10. #ETCD_MAX_SNAPSHOTS="5"
  11. #ETCD_MAX_WALS="5"
  12. #ETCD_CORS=""
  13.  
  14. #[cluster]
  15. ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.56.112:2380"
  16. ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
  17. ETCD_ADVERTISE_CLIENT_URLS="http://192.168.56.112:2379"
  18. ETCD_CLUSTER_ADDRESS="etcd1=http://192.168.56.111:2380,etcd2=http://192.168.56.112:2380,etcd3=http://192.168.56.113:2380"
  19.  
  20. #ETCD_INITIAL_ADVERTISE_PEER_URLS="http://localhost:2380"
  21. # if you use different ETCD_NAME (e.g. test), set ETCD_INITIAL_CLUSTER value for this name, i.e. "test=http://..."
  22. #ETCD_INITIAL_CLUSTER="default=http://localhost:2380"
  23. #ETCD_INITIAL_CLUSTER_STATE="new"
  24. #ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
  25. #ETCD_ADVERTISE_CLIENT_URLS="http://localhost:2379"
  26. #ETCD_DISCOVERY=""
  27. #ETCD_DISCOVERY_SRV=""
  28. #ETCD_DISCOVERY_FALLBACK="proxy"
  29. #ETCD_DISCOVERY_PROXY=""
  30. #ETCD_STRICT_RECONFIG_CHECK="false"
  31. #ETCD_AUTO_COMPACTION_RETENTIO:N="0"
  32. #
  33. #[proxy]
  34. #ETCD_PROXY="off"
  35. #ETCD_PROXY_FAILURE_WAIT="5000"

  

对于etcd3

  1. # [member]
  2. ETCD_NAME=etcd3
  3. ETCD_DATA_DIR="/home/etcd/data"
  4. ETCD_LISTEN_PEER_URLS="http://192.168.56.113:2380"
  5. ETCD_LISTEN_CLIENT_URLS="http://192.168.56.113:2379"
  6. #ETCD_WAL_DIR=""
  7. #ETCD_SNAPSHOT_COUNT="10000"
  8. #ETCD_HEARTBEAT_INTERVAL="100"
  9. #ETCD_ELECTION_TIMEOUT="1000"
  10. #ETCD_MAX_SNAPSHOTS="5"
  11. #ETCD_MAX_WALS="5"
  12. #ETCD_CORS=""
  13.  
  14. #[cluster]
  15. ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.56.113:2380"
  16. ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
  17. ETCD_ADVERTISE_CLIENT_URLS="http://192.168.56.113:2379"
  18. ETCD_CLUSTER_ADDRESS="etcd1=http://192.168.56.111:2380,etcd2=http://192.168.56.112:2380,etcd3=http://192.168.56.113:2380"
  19.  
  20. #ETCD_INITIAL_ADVERTISE_PEER_URLS="http://localhost:2380"
  21. # if you use different ETCD_NAME (e.g. test), set ETCD_INITIAL_CLUSTER value for this name, i.e. "test=http://..."
  22. #ETCD_INITIAL_CLUSTER="default=http://localhost:2380"
  23. #ETCD_INITIAL_CLUSTER_STATE="new"
  24. #ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
  25. #ETCD_ADVERTISE_CLIENT_URLS="http://localhost:2379"
  26. #ETCD_DISCOVERY=""
  27. #ETCD_DISCOVERY_SRV=""
  28. #ETCD_DISCOVERY_FALLBACK="proxy"
  29. #ETCD_DISCOVERY_PROXY=""
  30. #ETCD_STRICT_RECONFIG_CHECK="false"
  31. #ETCD_AUTO_COMPACTION_RETENTIO:N="0"
  32. #
  33. #[proxy]
  34. #ETCD_PROXY="off"
  35. #ETCD_PROXY_FAILURE_WAIT="5000"

  

启动和检查

  1. systemctl daemon-reload
  2. systemctl start etcd
  1. [root@linux-node1 ~]# etcdctl cluster-health
  2. member 2b4c476820842810 is healthy: got healthy result from http://192.168.56.112:2379
  3. member 68dbdf0635b07025 is healthy: got healthy result from http://192.168.56.113:2379
  4. member 9f025eed2d120b69 is healthy: got healthy result from http://192.168.56.111:2379
  5. cluster is healthy
  6. [root@linux-node1 ~]#

  

配置完毕

参考

https://www.jianshu.com/p/0045ef6a64a7

https://www.cnblogs.com/skymyyang/p/9067280.html

  • 编写/etc/etcd/etcd.conf文件
  1. vim /etc/etcd/etcd.conf
  2. # [member]
  3. ETCD_NAME=etcd1 #etcd实例名称
  4. ETCD_DATA_DIR="/var/lib/etcd" #etcd数据保存目录
  5. ETCD_LISTEN_CLIENT_URLS="http://192.168.142.161:2379,http://127.0.0.1:2379"
  6. #供外部客户端使用的url
  7. ETCD_ADVERTISE_CLIENT_URLS="http://192.168.142.161:2379,http://127.0.0.1:2379"
  8. #广播给外部客户端使用的url
  9.  
  10. #[cluster]
  11. ETCD_LISTEN_PEER_URLS="http://192.168.142.161:2380" #集群内部通信使用的URL
  12. ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.142.161:2380"
  13. #广播给集群内其他成员访问的URL
  14. ETCD_INITIAL_CLUSTER="etcd1=http://192.168.142.161:2380,etcd2=http://192.168.142.162:2380,etcd3=http://192.168.142.163:2380"
  15. #初始集群成员列表
  16. ETCD_INITIAL_CLUSTER_STATE="new"
  17. #初始集群状态,new为新建集群
  18. ETCD_INITIAL_CLUSTER_TOKEN="k8s-etcd-cluster" #集群的名称

  

手动部署etcd-2018-0731的更多相关文章

  1. k8s笔记0528-基于KUBERNETES构建企业容器云手动部署集群记录-2

    三.ETCD集群部署 类似于走zookeeper集群分布式协调服务,可做以key v形式存储在ETCD中. 官方链接:https://github.com/coreos/etcd 分布式kv存储,为分 ...

  2. 手动部署 kubernetes HA 集群

    前言 关于kubernetes HA集群部署的方式有很多种(这里的HA指的是master apiserver的高可用),比如通过keepalived vip漂移的方式.haproxy/nginx负载均 ...

  3. 离线手动部署docker镜像仓库——harbor仓库(HTTPS)

    实验环境: harbor服务器系统:CentOS Linux release 7.5.1804 (Core)harbor服务器IP:10.1.12.114harbor版本:v1.5.0docker版本 ...

  4. 基于TLS证书手动部署kubernetes集群(下)

    一.master节点组件部署 承接上篇文章--基于TLS证书手动部署kubernetes集群(上),我们已经部署好了etcd集群.flannel网络以及每个节点的docker,接下来部署master节 ...

  5. 基于TLS证书手动部署kubernetes集群(上)

    一.简介 Kubernetes是Google在2014年6月开源的一个容器集群管理系统,使用Go语言开发,Kubernetes也叫K8S. K8S是Google内部一个叫Borg的容器集群管理系统衍生 ...

  6. 手动部署一个单节点kubernetes

    目录 简要说明 安装环境说明 部署 生成相关证书 证书类型说明 安装cfssl证书生成工具 生成CA证书 生成Kubernetes master节点使用的证书 生成kubectl证书 生成kube-p ...

  7. 使用Ansible部署etcd 3.2高可用集群

    之前写过一篇手动搭建etcd 3.1集群的文章<etcd 3.1 高可用集群搭建>,最近要初始化一套新的环境,考虑用ansible自动化部署整套环境, 先从部署etcd 3.2集群开始. ...

  8. 手动部署 OpenStack Rocky 双节点

    目录 文章目录 目录 前言 OpenStack 架构 Conceptual architecture Logical architecture 网络选型 Networking Option 1: Pr ...

  9. (转)基于TLS证书手动部署kubernetes集群(下)

    转:https://www.cnblogs.com/wdliu/p/9152347.html 一.master节点组件部署 承接上篇文章--基于TLS证书手动部署kubernetes集群(上),我们已 ...

随机推荐

  1. 使用ext httpProxy代理获取列表但列表展示不全的问题解决

    今天项目中遇到一个奇葩的事情,使用ext的jsonstore通过httpproxy代理想要获取一个列表,页面显示是有五条数据的但是却只展示了2条,于是各种排查,后台确定无误后开始检查前台,发现浏览器中 ...

  2. request 的下载文件

    前言:Content-Type类型为octets/stream,这种一般是文件类型了,比如有时候需要导出excel数据,下载excel这种场景如何用python来实现呢? 1.点击导出按钮 2.代码实 ...

  3. MySQL:数据库的基本操作

    第二篇.数据库的基本操作 一.创建数据库 附:创建数据库并不意味输入数据在这个数据库中,只有用切换数据库才可以输数据到这个数据库中. 1.创建数据库 格式:create database数据库名字 [ ...

  4. error_log

    对于我们做php开发的人员,上了生产环境,一定要把相关debug,display_errors错误提示等关掉.谁还难免不犯个错呢?这样能防止非致命性报错下,导致项目路径.数据库等信息泄漏. 问:那么问 ...

  5. python scrapy 数据处理时间格式转换

    def show(self,response): # print(response.url) title = response.xpath('//main/div/div/div/div/h1/tex ...

  6. Wrapper

    开放封闭原则: 开放对扩展 封闭修改源代码 改变了人家调用方式 装饰器结构 """ 默认结构为三层!!!每层返回下一层内存地址就可以进行执行函数, 传参:语法糖中的传参可 ...

  7. 使用Redis构建支持程序

    在Linux和Unix世界中,有两种常见的记录日志的方法.第一种是将日志记录到文件里面,然后随着时间流逝不断地将一个有一个日志行添加到文件里面,并在一段时间之后创建新的日志文件.包括Redis在内的很 ...

  8. ecmall 开发一个新模块

    要开发新模块,要借鉴原有模块的代码并进行修改. 首先打开目录external/modules 会有一个datacall文件夹,这个文件夹对应的就是一个模块. 复制datacall文件夹,重命名为tes ...

  9. Kaggle:House Prices: Advanced Regression Techniques 数据预处理

    本博客是博主在学习了两篇关于 "House Prices: Advanced Regression Techniques" 的教程 (House Prices EDA 和 Comp ...

  10. JavaScript循环语句-6---for语句,while语句的应用逻辑

    JavaScript循环语句 学习目标 1.掌握for语句的语法结构 2.掌握for语句的应用逻辑 for语句 语法: For(语句1:语句2:语句3){ 被执行的代码块: } 语句1:在循环(代码块 ...