最常用的CM系统:Ansible、Salt、Puppet、Chef
配置管理术语解读
我们使用的术语 | Ansible | Salt |
---|---|---|
operation(操作) | task(任务) | state(状态) |
op type(操作类型) | module(模板) | function(功能) |
op list(操作列表) | tasks(多个任务) | states(状态集) |
binding(绑定) | playbook(剧本) | top file(配置管理入口文件) |
master host(控制主机) | control(控制) | master(主控) |
client host(客户机) | host(主机) | minion(受控) |
Ansible易用
Saltstack快
两者都需要借助yaml
Ansible没有服务器守护进程,也不在客户端安装自己的软件,所以它实际上就是一组命令(其中最值得注意的是ansible-plybook、ansible-vault,以及ansible),安装在你希望用于管理客户端的系统上。
Ansible的主配置文件的默认位置位于/etc/ansible/ansible.cfg。推荐将下列行添加到文件末尾。
[ssh_connection]
pipelining = true
这两行启用了SSH的流水线特性(pipelining),能够显著提高性能。
Ansible能够轻松地将系统范围的配置和个人配置结合起来。不要删除系统配置,只需通过创建~/.ansible.cfg
并设置清单文件和角色目录的位置来覆盖它。
[defaults]
inventory = ./hosts
roles_path = ./roles
清单是客户端系统的列表,角色是将客户端配置的各个方面进行抽象的操作集。
客户端设置
[wedservers]
www[01:100].example.com
[dbservers]
db-[a:f].example.com
$ ansible 'web*' -m ping
任务列表
Ansible将操作称之为“任务”(task),将单个文件中的任务集合称之为任务列表(task list)。和大部分Ansible配置一样,任务列表也都是YAML,所以文件名后缀为.yml。
变量赋值:每个主机都拥有各自以YAML格式定义的一组变量。默认情况下,这些定义保存在/etc/ansible/host_vars和/etc/ansible/group_vars目录下以主机或组命名的文件中。如果需要,可以使用.yml作为文件名后缀。
如下:将sudoers文件的位置和管理员的用户名,将这些信息放入单独的变量文件中,比如说,group_vars/all/admin.yml
sudoers_path: /etc/sudoers
admins:
- {
username: kolor }
- {
username: kolor }
admins的值是一个散列数组,通过迭代该数组来创建所有账户。迭代通过with_items(它是任务的属性,并不是任务执行的操作)
- name: Create personal groups for admins
groups: name={
{
item.username }}
with_items: "{
{ admins }}"
- name: Create admin accounts
user:
name: "{
{ item.username }}"
comment: "{
{ item.fullname }}"
group: "{
{ item.username }}"
groups: wheel
with_items: "{
{ admins }}"
从YAML和JSON的角度来看,各项任务形成了一个列表。左侧空白处的每个破折号表示开始了一项新任务,任务本身用散列描述。
state参数
在Ansible中,操作模块经常根据你所请求的state执行不同的任务。例如,对于package模块,state=present会安装该软件包,state=absent会删除该软件包,state=lastest确保该软件包存在且是最新的。
具体看:https://blog.csdn.net/qq_39578545/article/details/106795139
Salt的通信总线在服务端使用TCP端口4505和4506,确保位于服务器和客户端之间的防火墙或分组过滤器允许这些端口上的流量通过。
无论是在主服务器还是客户端(minion),Salt的配置文件都位于/etc/salt。
Salt在设置变量值的配置文件(pillar)和定义操作的配置文件(states)之间保持分离。这种区分一直延伸到顶层:你必须为这两个配置层级结构安排不同的位置。两者默认位于/srv之下,后者相当于/etc/salt/master文件。
file_roots:
base:
- /srv/salt
pillar_roots:
base:
- /srv/pillar
Pillar是在master端求值,然后作为单个统一的JSON层级结构传递给minion。
minion
minion设置:/etc/salt/minion中设置master,修改完文件后重启salt-minion。
master: salt.example.com
id: new-client.example.com
salt-master可以接受来自任意机器的客户端注册,只要这些机器能够访问到它,但是你必须在主配置服务器上使用salt-key命令批准之后,各个客户端才能变为活动状态。
$ sudo salt-key -l unaccepted
$ sudo salt-key -yA
接受key之后通过test模块检测服务器的连通性。
$ sudo salt new-client.example.com test.ping
new-client.example.com看起来像是个主机名,但其实并非如此。
它只是机器的Salt ID,该ID是一个字符串,默认和主机名一样,
但可以在/etc/salt/minion文件中将其设置为喜欢的任何内容,如上所示
minion匹配
示例:
base:
'*.example.com':
- baseline
'G@os:FreeBSD':
- freebsd
其中,星号匹配example.com中的所有客户端ID。这里可以只用’*’,这是一个扩展匹配模式。前缀G@用于匹配grain值。所要检查的grain名为os,所要查找的值为freebsd,此处也可以使用扩展匹配。
另外一种比较直观的写法。
'os:FreeBSD':
- match: grain
- freebsd
不过@的写法能够清晰地扩展成设计括号和布尔操作的复杂表达式。
匹配的grain或pillar的值是什么,可以通过
$ salt minion grains.items
或
$ salt minion pillar.items
saltstack的state.sls和state.highstate之区别
state.sls默认的运行环境是base环境,但是它并不读取top.sls(top.sls定义了运行环境以及需要运行的sls)。关于state.sls的官方文档说明如下:
salt.modules.state.sls(mods, saltenv='base', test=None, exclude=None, queue=False, env=None,**kwargs)
这里saltenv指的是运行环境,默认是base环境。
state.highstate: 这个是全局的所有环境,以及所有状态都生效。它会读取每一个环境的top.sls,并且对所有sls都生效。
具体看:https://blog.csdn.net/qq_39578545/article/details/114994167
Hypervisor
Hypervisor,又称虚拟机监视器(英语:virtual machine monitor,缩写为 VMM),是用来建立与执行虚拟机器的软件、固件或硬件。被Hypervisor用来执行一个或多个虚拟机器的电脑称为主体机器(host machine),这些虚拟机器则称为客体机器(guest machine)。
KVM:https://blog.csdn.net/qq_39578545/article/details/115052958
Docker:https://blog.csdn.net/qq_39578545/article/details/107741565
K8s:https://blog.csdn.net/qq_39578545/category_10080396.html
Jenkins:https://blog.csdn.net/qq_39578545/article/details/115042126
Git:https://blog.csdn.net/qq_39578545/article/details/115584985
CI&CD:
我们可以通过jenkins工具平台实现全自动部署+测试,是一个可扩展的持续集成引擎,是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。Jenkins非常易于安装和配置,简单易用。方便如下人员:
安装Jenkins并关联Gitlab:https://blog.csdn.net/weixin_45310323/article/details/107497121
基于gitlab和jenkins的自动化部署实例:https://blog.csdn.net/aaaaaab_/article/details/82012044
git官方的第三方服务集成jenkins:https://gitee.com/help/articles/4193#article-header13
自动化运维系列二:Jenkins与gitlab实战:https://blog.csdn.net/pcn01/article/details/105412495
利用gitlab的webhook触发jenkins:https://www.jianshu.com/p/2b2c204dcbe2
安装Jenkins出现以下情况:该Jenkins实例似乎已离线。
修改/var/lib/jenkins/hudson.model.UpdateCenter.xml
该文件为jenkins下载插件的源地址,改地址默认jenkins默认为:https://updates.jenkins.io/update-center.json
其他国内备用地址(也可以选择使用):
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
http://mirror.esuni.jp/jenkins/updates/update-center.json
重新在浏览器上登录jenkins,并在linux机器上生成一对秘钥
# ssh-keygen -f ~/.ssh/jenkins #生成密钥对
系统管理–>系统设置,找到之前安装的Publish over SSH插件,Passphrase填写之前生成秘钥时设置的密码,没有则留空,Path to key留空,Key粘贴/root/.ssh/jenkins
文件内容。
然后新增SSH Servers,填入对应的hostname,这就是PHP代码要发布的机器
接下来还需要把公钥拷贝到对应的hostname机器(web)上
Jenkins机器:
# cat jenkins.pub
hostname机器:
# cd ~/.ssh/
# vim authorized_keys #写入内容
浏览器上测试连接有没有问题,点击Test Configuration,如果没问题,左侧会显示Success。
gitlab+jenkins服务简述:https://blog.csdn.net/aaaaaab_/article/details/82012044
GitLab是一个代码仓库,用来管理代码。Jenkins是一个自动化服务器,可以运行各种自动化构建、测试或部署任务。
所以这两者结合起来,就可以实现开发者提交代码到GitLab,Jenkins以一定频率自动运行测试、构建和部署的任务,帮组开发团队更高效的集成和发布代码。
配置gitlab的免密连接:
[root@localhost ~]# cd .ssh/
[root@localhost .ssh]# ls
authorized_keys id_rsa id_rsa.pub known_hosts
[root@localhost .ssh]# cat id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDLfbD7Cp9UddglMLJgc+FHXXk54MrOi7ufyPhRcY2Ugibk8fIgnVKnhjxn5LjkXgqFb09hVeiM6iMnnn0/QkHLv6TuLAJkO5lFQWvivmzXZAvn/hbTyRoBX/Dokre0IGJSS+b/JUG9kXRYxt3GD38D6NbnCszkv+v/3VkzRvmkPxim2WsXu0tqUrU7ZmLxSehHQ0Rso9uChW3UeR+yEczOyuqOSxPuPJ1Vjm+K7KuyS+TPw49Uz/O9zD6bClWaFX8lrBZ6cxNXNSBfpJQqzPOdk/odTPeGyLx5/oiLC+iPpUjuhzBYHsgMTskTNOthcKNEzL9zStpNnC8rl2v2P0R3 root@localhost.localdomain
Access token:
qcbgha3JxqZTX1ZBDqc8
jenkins执行以下命令,通过qcbgha3JxqZTX1ZBDqc8获取认证
[root@jenkins ~]# curl -X PUT --header "PRIVATE-TOKEN: qcbgha3JxqZTX1ZBDqc8" 'http://10.0.100.129/api/v4/application/settings?allow_local_requests_from_hooks_and_services=true'
下图的Secret Toekn是jenkins触发器生成的 60d60e9f8499e16ce142adf4ddb34779,
然后回到gitlab项目的settings,URL是jenkins项目的地址,Secret Toekn是jenkins触发器生成的。
拉下去,点击Add webhook
准备推上去
[root@localhost demo]# git add hello.txt
[root@localhost demo]# git commit -m "add hello.txt"
*** Please tell me who you are.
Run
git config --global user.email "[email protected]"
git config --global user.name "Your Name"
to set your account's default identity.
Omit --global to set the identity only in this repository.
fatal: unable to auto-detect email address (got 'root@localhost.(none)')
解决:
git config --global user.name "root"
git config --global user.email 123456@qq.com
git config --global user.email "你的邮箱就是git的邮箱"
git config --global user.name "你的用户名"
[root@web demo]# git add hello.txt
[root@web demo]# git commit -m "add hello.txt"
[master 6fb9c0c] add hello.txt
1 file changed, 3 insertions(+)
create mode 100644 hello.txt
[root@web demo]# git push origin master
Counting objects: 4, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 287 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
To git@10.0.100.129:root/demo.git
242722d..6fb9c0c master -> master
在jenkins网页可以看到提交信息,简单的gitlab集成Jenkins就是这样。后面还可以设置邮箱通知,
剩下的章节都是文绉绉,实际工作可能用不太到,就此,《Linux系统管理技术手册》就大致看完了。
与普通屏幕中播放的视频相对,裸眼3D屏幕需要先将裸眼3D视频分成两部分,分别呈现在左右两个视窗上,因此后者需要更高的分辨率,以及更精细的图像处理能力,以此使裸眼3D屏幕的画面展示效果更加细腻,进而加深每个物体和场景的深度感和空间感,让每个驻足于此的观众惊叹于裸眼3D屏幕的震撼视觉效果。另外,裸眼3D屏幕的色彩表现,也比大多的普通屏幕更加丰富和鲜艳,能够展现出电影级别的画面质量,总而言之,裸眼3D屏幕比之普通屏幕的显示效果,有着巨大的优势,这也是使裸眼3D成为重要显示技术的重要原因!
飞驰云联是中国领先的数据安全传输解决方案提供商,长期专注于安全可控、性能卓越的数据传输技术和解决方案,公司产品和方案覆盖了跨网跨区域的数据安全交换、供应链数据安全传输、数据传输过程的防泄漏、FTP的增强和国产化替代、文件传输自动化和传输集成等各种数据传输场景。飞驰云联主要服务于集成电路半导体、先进制造、高科技、金融、政府机构等行业的中大型客户,现有客户超过500家,其中500强和上市企业150余家,覆盖终端用户超过40万,每年通过飞驰云联平台进行数据传输和保护的文件量达到4.4亿个。
大语言模型的词向量表示由于其在预训练阶段学习到的通用语言特征,可以在多种NLP任务中作为强大的工具,提高任务的性能和准确性。大语言模型与词向量表示之间的关系是NLP领域的一个活跃研究方向,随着模型规模的增加和训练技术的改进,这些模型在理解和生成自然语言方面的能力不断提高。
文章浏览阅读927次。前言本项目是使用三段分离的设计前台使用materialize框架搭建的前台页面,后端使用的django写的接口后台使用Amazon UI 模板搭建的界面,管理各个部分的内容项目环境python3.7.2django2.2.9vue axiosjQuerymaterializemysql摘 要本设计采用前后端分离的设计模式,前端通过vue的axios发送ajax请求来..._xdh实例
文章浏览阅读2.7k次。什么?刚刚买回来点亮的树莓派是个哑巴?放音乐没声音,不是缺少输出设备,那就是默认设置不对啦。如何设置,并且可以让树莓派播放 1080p 的视频,看这里呀~连接输出设备首先,检查你树莓派的输出设备是否正确连接,不管是使用带有音响的显示器 HDMI 接口,还是 3.5mm 耳机或扬声器设备,确保他们正确连接并且供电正常。设定输出设备打开树莓派设置:sudo raspi-config进入 Advance..._树莓派播放不了音乐
文章浏览阅读2.3k次。经过几个月的爬坑,终于解决了在阿里云上架设vnpy的问题。开心啊。官方教程并未详细写清楚(官方UBUNTU环境配置链接)应该怎么样在阿里云上面编译安装vnpy。总是卡在编译完成安装编译环节,而且内存会突然奇高直接挂掉服务器。原因居然是因为,talib的c语言库没有安装。以下是我跳坑经历,仅供参考。什么anaconda,pip,mongdb,qtpy什么的鬼,就看官方文档吧。我这里仅仅说明我安装_vnpy 编译
文章浏览阅读1.3w次,点赞28次,收藏367次。第一章 引言一.填空题1.数字图像是用一个数字阵列来表示的图像。数字阵列中的每个数字,表示数字图像的一个最小单位,称为 。2.数字图像处理可以理解为两个方面的操作:一是从图像到图像的处理,如图像增强等; 二是 ,如图像测量等。3.数字图像处理可以理解为两个方面的操作:一是 ,如图像增强等; 二是从图像到非图像的一种表示,如图像测量等。4.图像可以分为物理图像和虚拟图像两种。其中,采用数学的方法,将由概念形成的物体进行表示的图像是 。5.数字图像处理包含很多方面的研究内容。其中, 的目的是根据二维_已知roberts算子的作用模板为
文章浏览阅读303次。本方法适用于NAT方式上网(前提:主机已经处于联网状态)首先检查一下VMware的服务是否开启了①点击【我的电脑】,右键选择【管理】,选择【服务和应用程序】-【服务】②找到VMware的相关服务(如下图中的,共5个)③选中VMware相关的服务,【右键】-【属性】 全部设置为自动,然后 【应用】-【确定】④在VMware界面下单击【编辑】-【虚拟网络编辑器】,进入虚拟网络编辑器界面..._嵌入式网络连接失败
文章浏览阅读4.6k次。office tab enterprise是什么:Office Tab Enterprise是超级微软office多标签插件---高效办公必备神器_比officetab好用的标签管理
文章浏览阅读896次,点赞5次,收藏2次。问题:在配置阿里云视频上传的时候出现以下情况从名字看是说存储地址找不到如何解决?存储地址在你的阿里云视频点播控制台的配置管理》媒资管理配置》存储管理如果更改之后还是出现以上问题!那就是依赖问题了!导入最新版的依赖 <!-- 上传视频到阿里云--> <dependencies> <dependency> <groupId>com.aliyun</groupId> ._dependency 'com.aliyun:aliyun-java-sdk-core:4.5.14' not found
文章浏览阅读2.1k次,点赞8次,收藏13次。闲来无事,手头有一块F4的板子,马上也该嵌入式芯片设计大赛了,就用F4上了一下阿里云。文章目录前言一、演示效果二、问题三、主要代码总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、演示效果二、问题中间遇到了一些问题,我刚开始是直接一直F1上的代码,移植的过程遇到了好多奇奇怪怪的问题,上网查了一些资料,终于把问题都解._stm32 esp8266连接阿里云连接不稳定
文章浏览阅读4.8k次。 开始研究最重要的多线程读写全局数据了,结合书上的例子,我修改成下面的情况: unit Tst_Thread3U; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls; type TForm1 _delphi thread memo