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

需要部署etcd的主机信息如下:

node1 192.168.61.11
node2 192.168.61.12
node3 192.168.61.13

配置管理项目目录结构

├── inventories
│   ├── staging
│   │   ├── group_vars
│   │   │   ├── all.yml
│   │   │   └── etcd-nodes.yml
│   │   ├── host_vars
│   │   │   ├── node1.yml
│   │   │   ├── node2.yml
│   │   │   └── node3.yml
│   │   └── hosts
│   └── production
├── roles
│   ├── common
│   │   ├── defaults
│   │   │   └── main.yml
│   │   └── tasks
│   │   └── main.yml
│   ├── etcd3
│      ├── defaults
│      │   └── main.yml
│      ├── files
│      │   └── make-ca-cert.sh
│      ├── meta
│      │   └── main.yml
│      ├── tasks
│      │   ├── create_etcd_user.yml
│      │   ├── etcd-restart.yml
│      │   ├── etcd-start.yml
│      │   ├── etcd-stop.yml
│      │   ├── gen-etcd-certs.yml
│      │   ├── gen-etcd-systemd.yml
│      │   ├── install_etcd_bin.yml
│      │   └── main.yml
│      └── templates
│      ├── etcd.conf.j2
│      └── etcd.service.j2
├── deploy-etcd3.yml

roles/etcd3/defaults/main.yml:

---

etcd_version: 3.2.0

etcd_download_url_base: "https://github.com/coreos/etcd/releases/download/v{{ etcd_version }}"
etcd_release: "etcd-v{{ etcd_version }}-linux-amd64"
etcd_download_url: "{{ etcd_download_url_base }}/{{ etcd_release}}.tar.gz" etcd_bin_path: /usr/bin
etcd_data_dir: /var/lib/etcd etcd_conf_dir: /etc/etcd
etcd_certs_dir: "{{ etcd_conf_dir }}/ssl"
etcd_cert_group: root
etcd_ca_file: "{{ etcd_certs_dir }}/ca.crt"
etcd_cert_file: "{{ etcd_certs_dir }}/server.crt"
etcd_key_file: "{{ etcd_certs_dir }}/server.key"
etcd_peer_ca_file: "{{ etcd_certs_dir }}/ca.crt"
etcd_peer_cert_file: "{{ etcd_certs_dir }}/peer.crt"
etcd_peer_key_file: "{{ etcd_certs_dir }}/peer.key"
etcd_client_cert_file: "{{ etcd_certs_dir }}/client.crt"
etcd_client_key_file: "{{ etcd_certs_dir }}/client.key" etcd_client_cert_auth: true
etcd_peer_client_cert_auth: true etcd_client_port: 2379
etcd_peer_port: 2380 etcd_initial_cluster_state: new
etcd_initial_cluster_token: etcd-k8s-cluster etcd_initial_advertise_peer_urls: "https://{{ etcd_machine_address }}:{{ etcd_peer_port }}"
etcd_listen_peer_urls: "https://{{ etcd_machine_address }}:{{ etcd_peer_port }}"
etcd_advertise_client_urls: "https://{{ etcd_machine_address }}:{{ etcd_client_port }}"
etcd_listen_client_urls: "https://{{ etcd_machine_address }}:2379,https://127.0.0.1:2379"

创建etcd用户和数据目录

创建etcd用户、用户组和数据目录。

- name: create system etcd group
group:
name: etcd
state: present - name: create system etcd user
user:
name: etcd
comment: "etcd user"
shell: /sbin/nologin
state: present
system: yes
home: "{{ etcd_data_dir }}"
groups: etcd - name: ensure etcd_data_dir exists
file:
path: "{{ etcd_data_dir }}"
recurse: yes
state: directory
owner: etcd
group: etcd

下载和解压etcd

下载和解压缩etcd release tar包,并将可执行文件etcd, etcdctl拷贝到/usr/bin。

---

- name: set github s3 host on the first etcd server
lineinfile:
dest: /etc/hosts
regexp: '.*github-production-release-asset-2e65be\.s3\.amazonaws\.com$'
line: "219.76.4.4 github-production-release-asset-2e65be.s3.amazonaws.com"
state: present
delegate_to: "{{ groups['etcd-nodes'][0] }}"
run_once: true - name: check whether etcd release tar extracted on the first etcd server
stat:
path: "{{ ansible_temp_dir }}/{{ etcd_release }}"
register: etcd_release_tar_check
delegate_to: "{{ groups['etcd-nodes'][0] }}"
run_once: true - name: download etcd release tar file on first the etcd server
get_url:
url: "{{ etcd_download_url }}"
dest: "{{ ansible_temp_dir }}"
validate_certs: no
timeout: 20
register: download_etcd
delegate_to: "{{ groups['etcd-nodes'][0] }}"
run_once: true
when: not etcd_release_tar_check.stat.exists - name: extract etcd tar file
unarchive:
src: "{{ download_etcd.dest }}"
dest: "{{ ansible_temp_dir }}"
remote_src: yes
run_once: true
delegate_to: "{{ groups['etcd-nodes'][0] }}"
when: not etcd_release_tar_check.stat.exists - name: fetch etcd bins from the first etcd server
fetch:
src: "{{ ansible_temp_dir }}/{{ etcd_release }}/{{ item }}"
dest: "tmp/etcd3/{{ item }}"
flat: yes
register: fetch_etcd
run_once: true
delegate_to: "{{ groups['etcd-nodes'][0] }}"
with_items:
- etcd
- etcdctl - name: copy etcd binary
copy:
src: "tmp/etcd3/{{ item }}"
dest: "{{ etcd_bin_path }}"
owner: etcd
group: etcd
mode: 0750
with_items:
- etcd
- etcdctl

生成并分发etcd TLS证书

---

- name: ensure etcd certs directory
file:
path: "{{ etcd_certs_dir }}"
state: directory
owner: etcd
group: etcd
mode: 0750
recurse: yes - name: copy make-ca-cert.sh
copy:
src: make-ca-cert.sh
dest: "{{ etcd_certs_dir }}"
owner: root
group: root
mode: "0500"
run_once: true
delegate_to: "{{ groups['etcd-nodes'][0] }}" - name: gen certs on the first etcd server
command:
"{{ etcd_certs_dir }}/make-ca-cert.sh"
args:
creates: "{{ etcd_certs_dir }}/server.crt"
run_once: true
delegate_to: "{{ groups['etcd-nodes'][0] }}"
environment:
NODE_IPS: "{% for host in groups['etcd-nodes'] %}{{ hostvars[host]['etcd_machine_address'] }}{% if not loop.last %},{% endif %}{% endfor %}"
NODE_DNS: "{{ groups['etcd-nodes']|join(',') }}"
CERT_DIR: "{{ etcd_certs_dir }}"
CERT_GROUP: "{{ etcd_cert_group }}" - name: slurp etcd certs
slurp:
src: "{{ item }}"
register: pki_certs
run_once: true
delegate_to: "{{ groups['etcd-nodes'][0] }}"
with_items:
- "{{ etcd_ca_file }}"
- "{{ etcd_cert_file }}"
- "{{ etcd_key_file }}"
- "{{ etcd_peer_ca_file }}"
- "{{ etcd_peer_cert_file }}"
- "{{ etcd_peer_key_file }}"
- "{{ etcd_client_cert_file }}"
- "{{ etcd_client_key_file }}" - name: copy etcd certs to other etcd servers
copy:
dest: "{{ item.item }}"
content: "{{ item.content | b64decode }}"
owner: etcd
group: "{{ etcd_cert_group }}"
mode: 0400
with_items: "{{ pki_certs.results }}"
when: inventory_hostname != groups['etcd-nodes'][0]

systemd和配置

---

- name: create etcd systemd unit file
template:
src: etcd.service.j2
dest: /etc/systemd/system/etcd.service - name: create etcd env conf
template:
src: etcd.conf.j2
dest: /etc/etcd/etcd.conf
owner: etcd
group: etcd
mode: 0540

启动etcd

---

- name: start etcd
systemd:
name: etcd
daemon_reload: yes
state: started
enabled: yes - name: restart etcd
systemd:
name: etcd
state: restarted

查看集群状态

检查集群是否健康,在任一节点执行:

etcdctl \
--ca-file=/etc/etcd/ssl/ca.crt \
--cert-file=/etc/etcd/ssl/client.crt \
--key-file=/etc/etcd/ssl/client.key \
--endpoints=https://node1:2379,https://node2:2379,https://node3:2379 \
cluster-health member 1e3da2bf674fd07 is healthy: got healthy result from https://192.168.61.11:2379
member 88548a72a2e9a749 is healthy: got healthy result from https://192.168.61.13:2379
member c3bda13bf78ed2ab is healthy: got healthy result from https://192.168.61.12:2379
cluster is healthy
etcdctl \
--ca-file=/etc/etcd/ssl/ca.crt \
--cert-file=/etc/etcd/ssl/client.crt \
--key-file=/etc/etcd/ssl/client.key \
--endpoints=https://node1:2379,https://node2:2379,https://node3:2379 \
member list 1e3da2bf674fd07: name=node1 peerURLs=https://192.168.61.11:2380 clientURLs=https://192.168.61.11:2379 isLeader=false
88548a72a2e9a749: name=node3 peerURLs=https://192.168.61.13:2380 clientURLs=https://192.168.61.13:2379 isLeader=false
c3bda13bf78ed2ab: name=node2 peerURLs=https://192.168.61.12:2380 clientURLs=https://192.168.61.12:2379 isLeader=true
标题:使用Ansible部署etcd 3.2高可用集群
本文链接:http://blog.frognew.com/2017/06/using-ansible-deploy-etcd-cluster.html
转载请注明出处。
 
©2012-2017, frognew , 总访问量44209次 , 访客15227人

使用Ansible部署etcd 3.2高可用集群的更多相关文章

  1. [转帖]Breeze部署kubernetes1.13.2高可用集群

    Breeze部署kubernetes1.13.2高可用集群 2019年07月23日 10:51:41 willblog 阅读数 673 标签: kubernetes 更多 个人分类: kubernet ...

  2. 部署kubernetes1.8.3高可用集群

    Kubernetes作为容器应用的管理平台,通过对pod的运行状态进行监控,并且根据主机或容器失效的状态将新的pod调度到其他node上,实现了应用层的高可用. 针对kubernetes集群,高可用性 ...

  3. 七台机器部署Hadoop2.6.5高可用集群

    1.HA架构注意事项 两个Namenode节点在某个时间只能有一个节点正常响应客户端请求,响应请求的节点状态必须是active standby状态要能够快速无缝切换成active状态,两个NN节点必须 ...

  4. centos7下部署mariadb+galera数据库高可用集群

    [root@node1 ~]# cat /etc/yum.repos.d/mariadb.repo # MariaDB 10.1 CentOS repository list - created 20 ...

  5. kubeadm使用外部etcd部署kubernetes v1.17.3 高可用集群

    文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247483891&idx=1&sn=17dcd7cd ...

  6. kubeadm 使用 Calico CNI 以及外部 etcd 部署 kubernetes v1.23.1 高可用集群

    文章转载自:https://mp.weixin.qq.com/s/2sWHt6SeCf7GGam0LJEkkA 一.环境准备 使用服务器 Centos 8.4 镜像,默认操作系统版本 4.18.0-3 ...

  7. ProxySQL Cluster 高可用集群环境部署记录

    ProxySQL在早期版本若需要做高可用,需要搭建两个实例,进行冗余.但两个ProxySQL实例之间的数据并不能共通,在主实例上配置后,仍需要在备用节点上进行配置,对管理来说非常不方便.但是Proxy ...

  8. 使用开源Breeze工具部署Kubernetes 1.12.1高可用集群

    Breeze项目是深圳睿云智合所开源的Kubernetes图形化部署工具,大大简化了Kubernetes部署的步骤,其最大亮点在于支持全离线环境的部署,且不需要FQ获取Google的相应资源包,尤其适 ...

  9. 使用 Sealos 在 3 分钟内快速部署一个生产级别的 Kubernetes 高可用集群

    本文首发于:微信公众号「运维之美」,公众号 ID:Hi-Linux. 「运维之美」是一个有情怀.有态度,专注于 Linux 运维相关技术文章分享的公众号.公众号致力于为广大运维工作者分享各类技术文章和 ...

随机推荐

  1. java.lang.Object类

    Object类是java所有对象的基类,包含着java最核心和最基础的类,在编译时会自动导入.具体的类结构图: 1.构造器 public Object(); 大部分情况下,Java中通过形如 new ...

  2. [UE4]目标是Pawn、Get Player Character

    “目标是Pawn”表示这一个定义继承与Pawn类的方法. 这样可以很清楚的看到这个是方法是在什么地方定义的 “Get Player Character”可以获得当前控制的角色实例,可以转换成真正具体的 ...

  3. How to use POST method in Tornado?

    http://stackoverflow.com/questions/10367981/how-to-use-post-method-in-tornado

  4. Hadoop恢复namenode数据

    情景再现: 在修复hadoop集群某一个datanode无法启动的问题时,搜到有一个答案说要删除hdfs-site.xml中dfs.data.dir属性所配置的目录,再重新单独启动该datanode即 ...

  5. IIS7根据PID查找对应的站点

    runas /user:administrator cmd cd \Windows\System32\inetsrv appcmd.exe list wp

  6. jquery knob旋钮插件

    <!DOCTYPE html> <html> <head> <title>jQuery Knob 尝试</title> <script ...

  7. webserver有哪些

    http://blog.csdn.net/mfsh_1993/article/details/70245380 常用web服务器有Apache.Nginx.Lighttpd.Tomcat.IBM We ...

  8. spring mvc 解决json 不能转换的问题

    在要转的实体上加一个 @JsonIgnoreProperties(value = { "hibernateLazyInitializer", "handler" ...

  9. RabbitMQ-从基础到实战(4)— 消息的交换(中)

    转自:https://www.cnblogs.com/4----/p/6590459.html 1.简介 本章节和官方教程相似度较高,英文好的可以移步官方教程 在上一章的例子中,我们创建了一个消费者, ...

  10. Python之filter函数

    描述 filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表. 该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 Tru ...