【星海出品】ansible入门(四)playbook kolla开源例子

news2024/9/29 13:22:31

简介
Kolla-ansible项目提供一个完整的Ansible Playbook,来部署Docker的镜像,再完成openstack组件的自动化部署。并提供all-in-one和multihost的环境。

安装后会将kolla-ansible内置为一个shell启动文件。
kolla-ansible: /usr/local/bin/kolla-ansible

shell中会配置一些基础信息
shell中的信息

INVENTORY="${BASEDIR}/ansible/inventory/all-in-one"  # INVENTORY默认值
PLAYBOOK="${BASEDIR}/ansible/site.yml"  # 若不指定PLAYBOOK变量,则默认值/usr/local/share/kolla-ansible/ansible/site.yml

会根据ansible后面传的第一个参数是什么,而设置一些全局shell默认的变量

case "$1" in
(prechecks)
        ACTION="Pre-deployment checking"
        EXTRA_OPTS="$EXTRA_OPTS -e kolla_action=precheck"
;;
(mariadb_recovery)
        ACTION="Attempting to restart mariadb cluster"
        EXTRA_OPTS="$EXTRA_OPTS -e kolla_action=deploy"
        PLAYBOOK="${BASEDIR}/ansible/mariadb_recovery.yml"
        ;;
(bootstrap-servers)
        ACTION="Bootstrapping servers"
        PLAYBOOK="${BASEDIR}/ansible/kolla-host.yml"
        EXTRA_OPTS="$EXTRA_OPTS -e kolla_action=bootstrap-servers"
        ;;
(deploy)
        ACTION="Deploying Playbooks"
        EXTRA_OPTS="$EXTRA_OPTS -e kolla_action=deploy"
(......)
esac   
  • 源码地址:https://github.com/openstack/kolla-ansible.git
  • 其他下载点:https://github.com/openstack/kolla.git

目录结构

kolla-ansible
├── ansible # Ansible的playbook和roles在这个目录下面
├── doc # 一些文档说明书
├── etc_examples # Openstack部署需要的一些配置模板文件
├── init-runonce # 初始化配置脚本
├── init-vpn # 配置VPNaas的脚本
├── setup.cfg # 安装配置入口文件
└── tools # 和kolla交互的脚本工具

setup.cfg

[metadata]
name = kolla-ansible  // 项目名称
summary = Ansible Deployment of Kolla containers
description-file = README.rst
author = OpenStack
author-email = openstack-dev@lists.openstack.org
home-page = http://docs.openstack.org/developer/kolla-ansible/
license = Apache License, Version 2.0
classifier =
    Environment :: OpenStack
    Intended Audience :: Information Technology
    Intended Audience :: System Administrators
    License :: OSI Approved :: Apache Software License
    Operating System :: POSIX :: Linux
    Programming Language :: Python
    Programming Language :: Python :: 2
    Programming Language :: Python :: 2.7
    Programming Language :: Python :: 3
    Programming Language :: Python :: 3.5
 
 [files]
packages = kolla_ansible   //包名
data_files =        //pbr方式打包对应的文件映射
    share/kolla-ansible/ansible = ansible/*
    share/kolla-ansible/tools = tools/validate-docker-execute.sh
    share/kolla-ansible/tools = tools/cleanup-containers
    share/kolla-ansible/tools = tools/cleanup-host
    share/kolla-ansible/tools = tools/cleanup-images
    share/kolla-ansible/tools = tools/stop-containers
share/kolla-ansible/doc = doc/*
share/kolla-ansible/etc_examples = etc/*
share/kolla-ansible = tools/init-runonce
share/kolla-ansible = tools/init-vpn
share/kolla-ansible = tools/openrc-example
share/kolla-ansible = setup.cfg
 
scripts =        //可执行脚本
    tools/kolla-ansible
 
[entry_points]
console_scripts =   //控制台可执行脚本,执行两个Python文件的main函数
kolla-genpwd = kolla_ansible.cmd.genpwd:main
kolla-mergepwd = kolla_ansible.cmd.mergepwd:main
 
[global]
setup-hooks =
pbr.hooks.setup_hook
 
[pbr]  //打包方式
 
[build_sphinx]
all_files = 1
build-dir = doc/build
source-dir = doc
 
[build_releasenotes]
all_files = 1
build-dir = releasenotes/build
source-dir = releasenotes/source
ansible
├── action_plugins # 自定义插件,用户yml和config的配置合并
├── filter_plugins # 自定义过滤器插件,用来处理变量数据
├── group_vars # 存放ansible的全局变量,比如:配置文件路径、网卡、IP、端口、服务的开启等。
├── inventory # 主机清单 分为单节点、多节点
├── library # 自定义的ansible模块
	bslurp.py:# 作用是从其他节点拷贝文件然后再复制给其他节点
	kolla_docker.py:# 作用是控制管理docker,通过连接docker API去对容器进行创建、删除等一些操作
	kolla_toolbox.py:# 负责容器的启动以及初始化的操作
	kolla_container_facts.py:# 用于检查容器是否正在运行
├── mariadb_backup.yml
├── mariadb_recovery.yml
├── nova.yml
├── post-deploy.yml
├── roles # 目录下有不同组件业务的playbook、定义的变量以及模板文件等
├── site.yml
└── vmha.yml

neutron目录下有5个文件夹:

default: 定义了部署neutron各服务的各类参数
handlers: 定义了启动neutron各服务容器的操作
meta: 定义了部署neutron的依赖
tasks: 部署neutron的各playbook
templates: neutron各服务配置文件的模板

kolla-ansible -i /etc/kolla/all-in-one bootstrap-servers
kolla-ansible -i /etc/kolla/all-in-one deploy

CMD结构:
CMD="ansible-playbook -i $INVENTORY $CONFIG_OPTS $EXTRA_OPTS $PLAYBOOK $VERBOSITY"
 
参数解释:
INVENTORY参数,即INVENTORY文件,用于ansible配置主机组信息;(Ansible可同时操作属于一个组的多台主机,组和主机之间的关系通过 inventory 文件配置. 默认的文件路径为/etc/ansible/hosts)
CONFIG_OPTS,用于指定globals.yml,passwords.yml,配置文件目录,主要是指定一些配置相关;
EXTRA_OPTS主要是指定执行的动作,例如”-e kolla_action=deploy”;
PLAYBOOK为roles的入口文件site.yml.(Playbooks是Ansible的配置、部署、编排语言.可以被描述为一个需要远程主机执行命令的方案,或者一组IT程序运行的命令集合。)
 
Deploy动作的调用过程为:kolla-ansible -i multinode deploy ---->
调用/usr/local/share/kolla-ansible/ansible/site.yml ---->
根据site.yml文件的task调用执行各role
[root@ksfusion1 ]# kolla-ansible -i ./multinode bootstrap-servers
Bootstrapping servers : ansible-playbook -i ./multinode -e @/etc/kolla/globals.yml -e @/etc/kolla/passwords.yml -e CONFIG_DIR=/etc/kolla  -e kolla_action=bootstrap-servers /usr/local/share/kolla-ansible/ansible/kolla-host.yml
 playbook通过参数-e传入变量,作为全局变量在整个playbook中被调用

总结

# kolla-ansible -i ./multinode bootstrap-servers
在kolla-ansible脚本中的相关处理:
(bootstrap-servers)
        ACTION="Bootstrapping servers"
        PLAYBOOK="${BASEDIR}/ansible/kolla-host.yml"  # 此处即/usr/local/share/kolla-ansible/ansible/kolla-host.yml
        EXTRA_OPTS="$EXTRA_OPTS -e kolla_action=bootstrap-servers"
        ;;
具体调用:
# ansible-playbook -i ./multinode -e @/etc/kolla/globals.yml -e @/etc/kolla/passwords.yml -e CONFIG_DIR=/etc/kolla  -e kolla_action=bootstrap-servers /usr/local/share/kolla-ansible/ansible/kolla-host.yml

优先级最高的是 -e,次之是 playbook 当前定义的变量,再次之就是主机清单里定义的变量。

cat /usr/local/share/kolla-ansible/ansible/kolla-host.yml
---
- import_playbook: gather-facts.yml
- name: Apply role baremetal
  hosts: baremetal
  serial: '{{ kolla_serial|default("0") }}'
  gather_facts: false
  roles:
    - { role: baremetal,
        tags: baremetal }

一 serial:强制当前task串行执行。使用该装饰器后,即使用户通过参数–parallel指定需要并行执行,当执行呗serial装饰器修改过的task时,依然会串行执行。这样就达到了部分task可以串行执行
二 gather_facts:获取远程主机facts基础信息
三 Playbook剧本每次执行facts采集变量,这会耗费资源和时间。主机少的时候影响不大,当主机多的会严重耗费性能。所以不需要的时候可以关闭。
四 import_playbook主playbook可以导入子playbook,./kolla-ansible/ansible/gather-facts.yml用于获取远程主机信息
五 ansible过滤器default #如果变量没有定义,则临时返回一个指定的默认值 #注:如果定义了变量,变量值为空字符串,则会输出空字符
六 hosts值为baremetal,在all-in-one节点,baremetal指向control组;在multinode节点,baremetal指向control、network、compute等所有物理节点
七 roles能够根据层次型结构自动装载变量文件、tasks以及handlers等。roles就是通过分别将变量、文件、任务、模块及处理器放置于单独的目录中、并可以便捷地include他们的一种机制。
在这里插入图片描述
在这里插入图片描述

all-in-one node:
[baremetal:children]
control
multinode node:
[baremetal:children]
control
network
compute
storage
monitoring
八)role和tags都为baremetal,接下来进入roles的baremetal目录中执行
九)roles/baremetal/defaults/main.yml文件中,定义了default变量。
十)roles/baremetal/tasks/main.yml文件,为入口文件

内容如下,使用include_tasks分散调用tasks:

---
- include_tasks: "{{ kolla_action }}.yml"

即调用执行bootstrap-servers.yml

---
- include_tasks: pre-install.yml
- include_tasks: install.yml
- include_tasks: post-install.yml
- include_tasks: configure-containerd-for-zun.yml
  when: containerd_configure_for_zun|bool and
        inventory_hostname in groups['zun-cni-daemon']```

pre-install.yml、install.yml、post-install.yml等文件中,直接展示的是task的内容。
因此,执行 kolla-ansible -i ./multinode bootstrap-servers,实际执行的是pre-install.yml、install.yml、post-install.yml等文件的tasks任务清单。

pre-install.yml文件task内容分析
共有6个task和一个block
task1:Ensure localhost in /etc/hosts
task2:Ensure hostname does not point to 127.0.1.1 in /etc/hosts
task3:把所有节点信息写入/etc/hosts
task4:检查cloud-init是否已安装,确保manage_etc_hosts配置disabled。
task5:确保sudo组状态为present
task6:确保kolla组状态为present
block(当前只分析RedHat,包含四个task):
(1)确保/etc/yum.repos.d/目录存在
(2)启动docker的yum仓库yum_repository
(3)确保/etc/yum.repos.d/docker.repo中module_hotfixes = True
(4)安装docker rpm gpg key
7)install.yml文件task内容分析
共有12个task和一个bolck,主要功能如下:
更新Debian apt缓存;关闭Debian防火墙;检查RedHat下firewalld是否安装;关闭RedHat下firewalld;检查是否有docker运行;
安装apt/RPM包(从roles/baremetal/defaults/main.yml的对应变量中读取安装包列表,例如redhat_pkg_install);
启动docker,并等待Docker启动成功;
当环境是virtualenv,在对应virtualenv中安装最新的pip;
为python安装docker SDK;
删除配置文件列表中指定的待删除包(roles/baremetal/defaults/main.yml中的ubuntu_pkg_removals和redhat_pkg_removals);
 
8)post-install.yml文件task内容分析
共有35个task,主要功能如下:
创建kolla用户、添加kolla用户的公钥、授权kolla用户无密码sudo权限;
确保virtualenv权限正确;确保node_config_directory对应目录存在
且给kolla用户使用【node_config_directory参数再main.yml没有,global.yml也没有??】;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1073257.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

获取手机号归属地详情,精准高效的API接口服务

在现代社会中,通讯工具如手机成为了人们生活中不可缺少的部分。但是,有时我们会收到陌生电话,需要了解电话号码的归属地以判断其可信性。这个时候,获取手机号归属地的API接口服务就会发挥重要作用。 一、API接口服务简介 API接口…

解决video层级过高在app的问题

直接上代码,写一个组件 <template><iframe :onload"inner"></iframe> </template> <script>export default {props: {src: {}},data() {return {inner: }},created() {this.inner this.contentWindow.document.body.innerHTML <v…

一文搞懂二叉树后序遍历的三种方法

系列文章&#xff1a; 相关题目&#xff1a; 145. 二叉树的后序遍历 先序遍历结果为&#xff1a;4 5 2 6 7 3 1 总体上分为两种框架&#xff0c;递归框架和非递归框架&#xff0c;递归框架又分为两种思路&#xff1a;分解思路和遍历思路。 递归 1、分解思路 【分解为子问题】…

直线模组的应用场景

直线模组是一种由直线导轨、滑块、驱动部件等组成的直线运动系统&#xff0c;具有高精度、高速度、高效率等特点。直线模组被广泛应用于各种机械设备中&#xff0c;以下是其主要的应用场景&#xff1a; 1、数控机床&#xff1a;直线模组是数控机床中的重要组成部分&#xff0c;…

过滤器的实现及其原理责任链设计模式

Filter过滤器 过滤器的应用 DeptServlet,EmpServlet,OrderServlet三个业务类的业务方法执行之前都需要编写判断用户是否登录和解决的中文乱码的代码,代码没有得到重复利用 Filter是过滤器可以用来编写请求的过滤规则和多个Servlet都会执行的公共代码,Filter中的业务代码既可…

docker安装Jenkins完整教程

1.docker拉取 Jenkins镜像并启动容器 新版本的Jenkins依赖于JDK11 我们选择docker中jdk11版本的镜像 # 拉取镜像 docker pull jenkins/jenkins:2.346.3-2-lts-jdk11 2.宿主机上创建文件夹 # 创建Jenkins目录文件夹 mkdir -p /data/jenkins_home # 设置权限 chmod 777 -R /dat…

【C/C++】指针与函数传参

1、值传递 2、地址传递 注意&#xff1a;如果实参是一个普通变量&#xff0c;地址传参的话就需要形参是一级指针&#xff0c; 如果实参是一个一级指针&#xff0c;地址传参的话就需要形参是一个二级指针&#xff0c; 以此类推 3、传数组&#xff1a; 将数组作为参数传递给函…

DATA URL:嵌入 URL 中的数据资源

文章目录 参考环境DATA URL概念结构DATA URL 的优缺点优点缺点 DATA URL 与图片获取图片的 Base64 编码结果在 HTML 中应用 DATA URL 以展示图片 DATA URL 与 allow_url_fopen 及 allow_url_include 配置项allow_url_fopen 配置项allow_url_include 配置项allow_url_fopen 与 a…

Word中设置粘贴为纯文本的自定义快捷键

1、依次点击左上角 File(文件)->options(选项)-> Customize ribbon(自定义功能区)->Customize (自定义快捷键) 2、选择 All commands(所有命令)->PasteTextOnly(粘贴纯文本)&#xff0c; 在 Press new shortcut key (键入新快捷键)中输入自己喜欢的快捷键&#xff…

华为云云耀云服务器L实例评测|华为云上的CentOS性能监测与调优指南

目录 引言 ​编辑1 性能调优的基本要素 2 性能监控功能 2.1 监控数据指标 2.2 数据历史记录 2.3 多种统计指标 3 性能优化策略 3.1 资源分配 3.2 磁盘性能优化 3.3 网络性能优化 3.4 操作系统参数和内核优化 结论 引言 在云计算时代&#xff0c;性能优化和调优对于…

视觉效果绝佳的制作电子宣传册的网站

随着数字技术与设计理念的融合&#xff0c;电子宣传册不再是平面的文字与图片堆砌&#xff0c;而是通过多媒体元素、动画效果和交互性功能营造出沉浸式的阅读体验。小编向大家推荐一款名为FLBOOK的制作电子宣传册的网站。 首先&#xff0c;打开FLBOOK电子杂志制作网站然后点击模…

长城网络靶场第五题,流量包分析

关卡描述&#xff1a;1.小利访问最频繁的网站是&#xff1f;&#xff08;只填写一级域名&#xff09; 因为是一级域名所以只要 gamersky.com 关卡描述&#xff1a;2.小利的IP是多少&#xff1f; 看数据包很明显 标准答案&#xff1a;192.168.12.126 关卡描述&#xff1a;3.黑…

Win11通过注册表或者kernel32.dll的SetUserGeoName等方式设置国家或地区后重启过一会就自动变回原来的值...

最近同事 panwangvie 尝试通过代码设置国家或地区&#xff0c;尝试过注册表或者kernel32.dll的SetUserGeoName等方式设置&#xff0c;重启过一会就自动变回原来的值 我也尝试了以下方式均不行&#xff1a; 1. 一开始怀疑是自动时钟影响&#xff0c;所以把自动时钟关闭了 2. 然后…

c++桥接模式,中介者模式应用实现状态跳转

上图为例&#xff0c;按上述两种方式实现的模式跳转&#xff0c;如果在原先的三种模式之间再增加多一种模式&#xff0c;就会引起每个模式都会要求改变&#xff0c;并且逻辑混乱&#xff0c;因此更改模式为桥接中介者访问&#xff0c;将抽象和实现分离&#xff0c;实现之间采用…

STM32单片机裸机程序怎么处理大量网络数据?

STM32单片机裸机程序怎么处理大量网络数据? 无论是在中断中处理数据&#xff0c;还是在主循环里处理数据&#xff0c;你用于处理数据的时间是不变的。 你可以算一下&#xff0c;处理数据的时间&#xff08;速率&#xff09;和单片机的处理能力相差有多大&#xff0c;单片机是…

Android原生实现控件圆角方案(API28及以上)

Android控件的圆角效果的实现方式有很多种&#xff0c;这里介绍一下另一种Android原生的圆角实现方案&#xff08;API28及以上&#xff09;。 我们利用ShapeAppearanceModel、MaterialShapeDrawable来实现一个圆角/切角的Button。 实现效果如下图 我们在为控件添加阴影的基础上…

【软考设计师】S01 数据结构 E01 线性结构 P01 线性表

线性表 前言——线性结构线性表线性表的定义线性表的特点线性表的存储结构顺序存储链式存储单链表双向链表循环链表静态链表 前言——线性结构 线性结构是一种基本的数据结构&#xff0c;主要用于对客观世界中具有单一前驱和后继的数据关系进行描述。线性结构的特点是数据元素…

漏刻有时数据可视化Echarts组件开发(43)水球图svg温度计动画

SVG是一种用XML定义的语言&#xff0c;用来描述二维矢量及矢量/栅格图形。具体来说&#xff0c;SVG图形是可伸缩的矢量图形&#xff0c;其图像质量不会因放大或改变尺寸而损失。 在SVG中&#xff0c;可以创建和修改图像、对图像进行搜索和索引、对其进行脚本化或压缩。此外&am…

【网络安全入门】学习网络安全必须知道的100 个网络基础知识

前言 话不多说&#xff0c;完整的资料已经上传至CSDN官方&#xff0c;需要的可以点击链接自取【282G】网络安全&黑客技术零基础到进阶全套学习大礼包&#xff0c;免费分享&#xff01; 1 什么是链接? 链接是指两个设备之间的连接。它包括用于一个设备能够与另一个设备…

Zabbix“专家坐诊”第206期问答汇总

问题一 Q&#xff1a;老师&#xff0c;我想配置一下监控项和触发器&#xff0c;目前我想要三个&#xff0c;内存的使用情况百分比、磁盘的剩余多少G、CPU的使用情况百分比&#xff0c;用自带的模板修改&#xff0c;该怎么做&#xff1f; A&#xff1a;可以用100减去内置键值cp…