崔先生烹饪课

崔先生烹饪课 - 初识chef

前言

chef 是DevOps中常用的自动化平台,一般用来创建、部署、变更基础设施环境和应用。说人话,chef就是一个指挥中心,可以管理很多服务器,在这些服务器上按照自动化脚本来运行相应命令。计算机中的自动化平台类似于一个菜谱,根据这个菜谱其他人都可以去做出菜品来。从今天开始,崔先生将带大家一起开始烹饪之旅,我们的目标是用chef征服自动化平台!

安装chef

崔先生是一个实战派,既然要开始学习烹饪,首先要准备好烹饪环境。熟悉崔先生的朋友都知道,我比较喜欢吃海鲜,鲸鱼就很美味,所以我们先去捕鲸鱼做为食材。

第一步肯定是去,菜市场买条鲸鱼。

# 自动化安装docker和docker-compose cat /root/dockerInstall.sh ``` #!/bin/bash getPath(){ this_dir=`pwd` dirname $0 | grep "^/" >/dev/null if [ $? -eq 0 ];then this_dir=`dirname $0` else dirname $0 | grep "^\." >/dev/null retval=$? if [ $retval -eq 0 ];the this_dir=`dirname $0 | sed "s#^.#$this_dir#"` else this_dir=`dirname $0 | sed "s#^#$this_dir/#"` fi fi echo `dirname $this_dir` } ​ ## usage usage(){ cat<

菜谱

鲸鱼都买好了,菜板也准备好了,接下来就是正在的烹饪时刻了!不过为了做出完美的食材,我们需要一份菜谱。

好在我们现在已经拥有了一份菜谱,那就是recipe.rb。别急我们刚刚用docker-compose部署了一个官方chef环境,我们只需进入到workstation容器既可以看到,官方为我们准备的菜谱,我们只需要理解菜谱,并按照菜谱料理即可。

# 进入workstation容器 docker exec -it workstation bash # 查看recipe.rd菜谱 cat recipe.rd ``` apt_update package 'figlet' directory '/tmp' execute 'write_hello_world' do command 'figlet Hello World! > /tmp/hello.txt' not_if { File.exist?('/tmp/hello.txt') } end ``` # 执行菜谱,开始料理 chef-run web1 recipe.rb # 查看最终的成品 ssh web1 cat /tmp/hello.txt

这里我解释一下,一些概念。

由于之前docker-compose部署了官方chef实例。我们现在有这几个容器,workstation是我们运行chef命令的中枢容器,web1是我们管理的其中一个容器。我们通过在workstation容器上运行chef命令,直接控制web1容器进行菜谱操作。查看了菜谱之后,我们可以发现菜谱中指定了软件包应当是最新的,应当安装一个figlet包,执行的目录应该是/tmp,执行command中设置的命令,最后检查一下有没有生成hello.txt文件。

recipe.rd 这个菜谱的效果:在指定的机器上,安装figlet包,然后将Hello World!用空体字体写到hello.txt文件中。

今天的就到此结束了,若明天还能抽出时间,我们将继续烹饪鲸鱼~~