Linux系统管理(四)运维_application linux category is set to default "util-程序员宅基地

技术标签: 读书笔记  运维  linux  

第二十三章 配置管理Ansible与Saltstack

1、配置管理系统

最常用的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

2、Ansible

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

清单是客户端系统的列表,角色是将客户端配置的各个方面进行抽象的操作集。

客户端设置

  • SSH访问;
  • python解释器
  • 客户端并不会向Ansible自报家门,所以你要将其添加到Ansible的主机清单中。在默认情况下,清单是一个名为/etc/ansible/hosts的文件。
    [wedservers]
    www[01:100].example.com
    [dbservers]
    db-[a:f].example.com
    
  • 例如,下列命令使用扩展匹配表达式选择了webservers组,对组中的每个成员执行Ping操作。
    $ 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

3、Saltstack

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

第二十六章 持续集成与交付 CI/CD

Jenkins:https://blog.csdn.net/qq_39578545/article/details/115042126

Git:https://blog.csdn.net/qq_39578545/article/details/115584985

CI&CD:

  • 持续集成注重将各个开发者的工作集合到一个代码仓库中,通常每天会进行几次, 主要目的是尽早发现集成错误,使团队更加紧密结合,更好地协作。
  • 持续交付的目的是最小化部署或发布过程中团队固有的摩擦,它的实现通常能够将构建部署的每个步骤自动化,以便任何时刻能够安全地完成代码发布(理想情况下)。
  • 持续部署是一种更高程度的自动化,无论何时代码有较大改动, 都会自动进行构建/部署。

我们可以通过jenkins工具平台实现全自动部署+测试,是一个可扩展的持续集成引擎,是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。Jenkins非常易于安装和配置,简单易用。方便如下人员:

  1. 开发人员:写好代码,不需要自己进行源码编译、打包等工作,直接将代码分支存放在SVN、GIT仓库即可。 war 源码多 自动把代码放到服务器上面
  2. 运维人员:减轻人工干预的错误率,ansible 一键完成了 同时解放运维人员繁杂的上传代码、手动备份、更新

安装Jenkins并关联Gitlabhttps://blog.csdn.net/weixin_45310323/article/details/107497121

基于gitlab和jenkins的自动化部署实例https://blog.csdn.net/aaaaaab_/article/details/82012044

git官方的第三方服务集成jenkinshttps://gitee.com/help/articles/4193#article-header13
自动化运维系列二:Jenkins与gitlab实战https://blog.csdn.net/pcn01/article/details/105412495
利用gitlab的webhook触发jenkinshttps://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系统管理技术手册》就大致看完了。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_39578545/article/details/116248106

智能推荐

普通屏幕已过时?裸眼3D屏幕显示效果更胜一筹!

与普通屏幕中播放的视频相对,裸眼3D屏幕需要先将裸眼3D视频分成两部分,分别呈现在左右两个视窗上,因此后者需要更高的分辨率,以及更精细的图像处理能力,以此使裸眼3D屏幕的画面展示效果更加细腻,进而加深每个物体和场景的深度感和空间感,让每个驻足于此的观众惊叹于裸眼3D屏幕的震撼视觉效果。另外,裸眼3D屏幕的色彩表现,也比大多的普通屏幕更加丰富和鲜艳,能够展现出电影级别的画面质量,总而言之,裸眼3D屏幕比之普通屏幕的显示效果,有着巨大的优势,这也是使裸眼3D成为重要显示技术的重要原因!

如何安全可控的进行跨区域数据交换,提高数据价值?

飞驰云联是中国领先的数据安全传输解决方案提供商,长期专注于安全可控、性能卓越的数据传输技术和解决方案,公司产品和方案覆盖了跨网跨区域的数据安全交换、供应链数据安全传输、数据传输过程的防泄漏、FTP的增强和国产化替代、文件传输自动化和传输集成等各种数据传输场景。飞驰云联主要服务于集成电路半导体、先进制造、高科技、金融、政府机构等行业的中大型客户,现有客户超过500家,其中500强和上市企业150余家,覆盖终端用户超过40万,每年通过飞驰云联平台进行数据传输和保护的文件量达到4.4亿个。

大语言模型与词向量表示

大语言模型的词向量表示由于其在预训练阶段学习到的通用语言特征,可以在多种NLP任务中作为强大的工具,提高任务的性能和准确性。大语言模型与词向量表示之间的关系是NLP领域的一个活跃研究方向,随着模型规模的增加和训练技术的改进,这些模型在理解和生成自然语言方面的能力不断提高。

基于django和vue的xdh官网设计_xdh实例-程序员宅基地

文章浏览阅读927次。前言本项目是使用三段分离的设计前台使用materialize框架搭建的前台页面,后端使用的django写的接口后台使用Amazon UI 模板搭建的界面,管理各个部分的内容项目环境python3.7.2django2.2.9vue axiosjQuerymaterializemysql摘 要本设计采用前后端分离的设计模式,前端通过vue的axios发送ajax请求来..._xdh实例

树莓派python播放音频文件_树莓派开启声音及视频播放-程序员宅基地

文章浏览阅读2.7k次。什么?刚刚买回来点亮的树莓派是个哑巴?放音乐没声音,不是缺少输出设备,那就是默认设置不对啦。如何设置,并且可以让树莓派播放 1080p 的视频,看这里呀~连接输出设备首先,检查你树莓派的输出设备是否正确连接,不管是使用带有音响的显示器 HDMI 接口,还是 3.5mm 耳机或扬声器设备,确保他们正确连接并且供电正常。设定输出设备打开树莓派设置:sudo raspi-config进入 Advance..._树莓派播放不了音乐

阿里云上安装编译vnpy1.7版本_vnpy 编译-程序员宅基地

文章浏览阅读2.3k次。经过几个月的爬坑,终于解决了在阿里云上架设vnpy的问题。开心啊。官方教程并未详细写清楚(官方UBUNTU环境配置链接)应该怎么样在阿里云上面编译安装vnpy。总是卡在编译完成安装编译环节,而且内存会突然奇高直接挂掉服务器。原因居然是因为,talib的c语言库没有安装。以下是我跳坑经历,仅供参考。什么anaconda,pip,mongdb,qtpy什么的鬼,就看官方文档吧。我这里仅仅说明我安装_vnpy 编译

随便推点

数字图像处理期末复习题_已知roberts算子的作用模板为-程序员宅基地

文章浏览阅读1.3w次,点赞28次,收藏367次。第一章 引言一.填空题1.数字图像是用一个数字阵列来表示的图像。数字阵列中的每个数字,表示数字图像的一个最小单位,称为 。2.数字图像处理可以理解为两个方面的操作:一是从图像到图像的处理,如图像增强等; 二是 ,如图像测量等。3.数字图像处理可以理解为两个方面的操作:一是 ,如图像增强等; 二是从图像到非图像的一种表示,如图像测量等。4.图像可以分为物理图像和虚拟图像两种。其中,采用数学的方法,将由概念形成的物体进行表示的图像是 。5.数字图像处理包含很多方面的研究内容。其中, 的目的是根据二维_已知roberts算子的作用模板为

嵌入式Linux学习笔记2——虚拟机中Ubuntu无法连接网络的有效解决办法_嵌入式网络连接失败-程序员宅基地

文章浏览阅读303次。本方法适用于NAT方式上网(前提:主机已经处于联网状态)首先检查一下VMware的服务是否开启了①点击【我的电脑】,右键选择【管理】,选择【服务和应用程序】-【服务】②找到VMware的相关服务(如下图中的,共5个)③选中VMware相关的服务,【右键】-【属性】 全部设置为自动,然后 【应用】-【确定】④在VMware界面下单击【编辑】-【虚拟网络编辑器】,进入虚拟网络编辑器界面..._嵌入式网络连接失败

office tab enterprise是什么:Office Tab Enterprise是超级微软office多标签插件---高效办公必备神器_比officetab好用的标签管理-程序员宅基地

文章浏览阅读4.6k次。office tab enterprise是什么:Office Tab Enterprise是超级微软office多标签插件---高效办公必备神器_比officetab好用的标签管理

在配置阿里云视频上传的时候出现ErrorCode=InvalidStorage.NotFound_dependency 'com.aliyun:aliyun-java-sdk-core:4.5.14-程序员宅基地

文章浏览阅读896次,点赞5次,收藏2次。问题:在配置阿里云视频上传的时候出现以下情况从名字看是说存储地址找不到如何解决?存储地址在你的阿里云视频点播控制台的配置管理》媒资管理配置》存储管理如果更改之后还是出现以上问题!那就是依赖问题了!导入最新版的依赖 <!-- 上传视频到阿里云--> <dependencies> <dependency> <groupId>com.aliyun</groupId> ._dependency 'com.aliyun:aliyun-java-sdk-core:4.5.14' not found

STM32F407通过ESP8266连接阿里云_stm32 esp8266连接阿里云连接不稳定-程序员宅基地

文章浏览阅读2.1k次,点赞8次,收藏13次。闲来无事,手头有一块F4的板子,马上也该嵌入式芯片设计大赛了,就用F4上了一下阿里云。文章目录前言一、演示效果二、问题三、主要代码总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、演示效果二、问题中间遇到了一些问题,我刚开始是直接一直F1上的代码,移植的过程遇到了好多奇奇怪怪的问题,上网查了一些资料,终于把问题都解._stm32 esp8266连接阿里云连接不稳定

Delphi多线程编程之同步读写全局数据 _delphi thread memo-程序员宅基地

文章浏览阅读4.8k次。 开始研究最重要的多线程读写全局数据了,结合书上的例子,我修改成下面的情况: unit Tst_Thread3U; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls; type TForm1 _delphi thread memo