最近打算用ansible写部署HA的k8s集群,部署etcd集群是第一步,写了一个部署etcd集群的role,特记录下来。
1 创建相关目录
2 创建ansible inventory文件,文件里需要写etcd集群的每个member的名字作为主机变量,另外环境写的是需要执行的主机的主机名,需要主机名写入/etc/hosts文件或者dns解析。
3 把etcd集群的初始化信息写入group变量。
4 roles中etcd.conf的template对变量的引用
5 执行playbook
6、执行结果
7 总结分析
7.1 利用ansible执行部署或者变更,前提是对某个应用手工部署非常了解,部署流程和配置项了然如胸,在此基础上,把一些手工执行的命令用ansible对应模块实现,仅此而已。
7.2 etd集群role中tasks文件的main.yml,操作无非是传输文件,创建目录,用户等,难点在etcd集群启动配置中,ETCD_NAME(etcd启动的--name参数)是每个主机标识自己在集群中名字的,在集群中要唯一,适合作为每个主机自己的变量,但是ETCD_INITIAL_CLUSTER(etcd启动的-initial-cluster参数)又是group参数,且是建立每个主机变量组合的基础上,笔者搜索很多ansible脚本,实现都是将ETCD_INITIAL_CLUSTER在变量中写死(笔者上述演示基于此重方法.group_vars中写死变量),灵活性不够。
https://github.com/gjmzj/kubeasz/blob/master/example/hosts.m-masters.example
https://github.com/gjmzj/kubeasz/blob/master/roles/etcd/templates/etcd.service.j2
7.3 将主机变量组合为group变量的解决办法(利用jinja2的macro方式)
下载:http://download.csdn.net/download/qqhappy8/10217937
参考:
1 https://github.com/kubernetes/contrib/tree/master/ansi