文档章节

#综合实践#通过puppet管理远程docker容器——配置puppet和实现变更

Hochikong
 Hochikong
发布于 2014/08/29 11:23
字数 1105
阅读 308
收藏 0


前提准备:

1.master和docker节点上分别安装好puppet master和puppet agent;

2.docker节点上安装好docker1.2.0、nsenter(被脚本用于连接容器),并pull一个镜像:training/webapp


master上的准备工作:

创建docker模块:

mkdir -p /etc/puppet/modules/docker/{manifests,files,templates}
vi /etc/puppet/modules/docker/manifests/init.pp

#编写docker类
class docker {
    exec { "dockerlaunch" :
        command => "/usr/bin/docker run -d -p 1000:5000 --name webbase training/webapp python app.py && /usr/bin/docker run -d -p 2000:5000 --name web1 --link webbase:webbase training/webapp python app.py",
         }
         
    exec { "dockerlogs" :
        command => "/bin/mkdir -p /var/log/dockerlaunch && /usr/bin/docker inspect webbase >> /var/log/dockerlaunch/webbase.log && /usr/bin/docker inspect web1 >> /var/log/dockerlaunch/web1.log",
         }
         
    file { "/root/status.log" :
        ensure  => file,
        mode    => '740',
        content => "docker container is running:webbase and web1 please use broswer access the ip address of docker.hzg.com and the 1000 or the 2000 port.You can use the control.sh script help you to manage the container",
         }
         
    file { "/root/control.sh" :
        ensure  => file,
        mode    => '1777',
        source  => "puppet:///modules/docker/control.sh",
         }
         
    notify { "Docker container is running on node $fqdn !": }
}

编写管理脚本,并放置到/etc/puppet/modules/docker/files目录中:

vi control.sh

#脚本如下

#!/bin/bash
#used for access the specific container
#written by Hochikong
while true
do
{
read -p "What you want to do?try input 'help' to get some tips(please input the words in ''): " what

if [ $what = 'help' ];
then
   echo "################################################################################################################################";
   echo "                                            The helping information about this script                                           ";
   echo "################################################################################################################################";
   echo "COMMAND                                       INFO                                                                              ";
   echo "################################################################################################################################";
   echo "'status'                                      get the info about the running containers.                                        ";
   echo "'access'                                      access the specific contianer.                                                    ";
   echo "'manage'                                      manage the contianer,such as 'start','stop' and 'delete'.                         ";
   echo "'exit'                                        exit this script.                                                                 ";
   echo "'statusa'                                     show the infomation about all containers.                                         ";          
   echo "'statusl'                                     show the latest infomation about container.                                       ";
   echo "################################################################################################################################";
   echo "MAINCOMMAND                  SUBCOMMAND                  INFO                                                                   ";
   echo "################################################################################################################################";
   echo "'manage'                     'start'                     launch a exist contianer                                               ";
   echo "'manage'                     'stop'                      stop a running container                                               ";
   echo "'manage'                     'delete'                    detele a not-running container                                         ";
   echo "'manage'                     'status'                    get the info about the running containers                              ";
   echo "'manage'                     'statusa'                   show the infomation about all containers.                              ";
   echo "'manage'                     'statusl'                   show the latest infomation about container.                            ";
   echo "################################################################################################################################";
fi   
   
if [ $what = 'status' ];
then
    echo "The running containers are:\n";
    docker ps;
fi

if [ $what = 'statusa' ];
then 
    echo "All containers's status:\n";
    docker ps -a;
fi

if [ $what = 'statusl' ];
then
    echo "The latest infomation about containers:\n";
    docker ps -l;
fi	

if [ $what = 'access' ];
then
    read -p "Please input the specific container's name:" name;
    CPID=$(docker inspect --format '{{.State.Pid}}' $name);
    nsenter --target $CPID --mount --uts --ipc --net --pid;
fi

if 
    [ $what = 'manage' ];
then
    while true
	do
	{
	
    read -p "Please input the container name which you want to manage,or 'exit',or 'help'?: " name2;
	
	if [ $name2 = 'help' ];
	then
	    echo "#############################################################################################################";
        echo "          SUBCOMMAND                  INFO                                                                   ";
        echo "#############################################################################################################";
        echo "          'start'                     launch a exist contianer                                               ";
        echo "          'stop'                      stop a running container                                               ";
        echo "          'delete'                    detele a not-running container                                         ";
        echo "          'status'                    get the info about the running containers                              ";
        echo "          'statusa'                   show the infomation about all containers.                              ";
        echo "          'statusl'                   show the latest infomation about container.                            ";
        echo "#############################################################################################################";
		break;
	fi	
	
	if [ $name2 = 'status' ];
	then 
	   echo "Running container:";
       docker ps;continue;
	fi	
	
	if [ $name2 = 'exit' ];
	then 
	   echo "Exiting";
	   break;
	fi
	
	if [ $name2 = 'statusa' ];
	then 
	    echo "All infomation about containers:\n";
		docker ps -a;continue;
	elif [ $name2 = 'statusl' ];
	then
	    echo "The latest infomation about containers:\n";
		docker ps -l;continue;
	fi	
	
    read -p "Do you want to 'start' or 'stop' or 'delete' your container?: " what2;
	
	if [ $what2 = 'start' ];
    then
        echo "Notice:Please make sure this container is not running";
        docker start $name2;continue
    elif [ $what2 = 'stop' ];
    then
        echo "Notice:container is stopping";
        docker stop $name2;continue;
    elif [ $what2 = 'delete' ];
    then
        echo "Notice:You cannot delete a running container,if the container is running,please stop it first!";
        docker rm $name2;continue;
	else
	    echo "Error:Command Error,no such command!";continue;
    fi		
    }
done
fi


if [ $what = 'exit' ];
then 
    exit;
fi
}
done

编辑/etc/puppet/manifests/nodes/docker.hzg.com.pp,加载docker类:

node 'docker.hzg.com' {
    include docker
}

编辑/etc/puppet/manifests/site.pp,加载docker节点的配置,增加这么一行:

import "nodes/docker.hzg.com.pp"

编辑/etc/puppet/fileserver.conf,授权docker对modules和files的访问,添加内容:

[files]
  path /etc/puppet/files
  allow docker.hzg.com
#  allow *.example.com
#  deny *.evil.example.com
#  allow 192.168.0.0/24

[files]
  path /etc/puppet/modules
  allow *.hzg.com

编辑/etc/puppet/puppet.conf,在[main]那一段增加以下内容(可选):

modulepath = /etc/puppet/modules


PS:因为我使用puppet kick实现配置,要为agent做点配置工作:

agent上:

编辑puppet.conf,在[agent]那段增加以下内容(可选):

listen = true


实现配置:

master上:

root@workgroup:~# puppet kick docker.hzg.com
Warning: Puppet kick is deprecated. See http://links.puppetlabs.com/puppet-kick-deprecation
Warning: Failed to load ruby LDAP library. LDAP functionality will not be available
Triggering docker.hzg.com
Getting status
status is success
docker.hzg.com finished with exit code 0
Finished

因为我没有配置LDAP,所以有些警告内容。


检查docker节点上的信息:

root@docker:~# ls
BACKUPDockerfile  control.sh  Dockerfile  hzg.sh  init.pp  status.log  test2.sh  test.py  util-linux-2.24
root@docker:~# cd /var/log/dockerlaunch/
root@docker:/var/log/dockerlaunch# ls
web1.log  webbase.log
root@docker:/var/log/dockerlaunch# cd ~
root@docker:~# docker ps
CONTAINER ID        IMAGE                    COMMAND             CREATED              STATUS              PORTS                    NAMES
050ebb07cf25        training/webapp:latest   "python app.py"     About a minute ago   Up About a minute   0.0.0.0:2000->5000/tcp   web1                   
0ef5d56e4c89        training/webapp:latest   "python app.py"     About a minute ago   Up About a minute   0.0.0.0:1000->5000/tcp   web1/webbase,webbase

 可以看到相应的东西都创建了。

© 著作权归作者所有

Hochikong

Hochikong

粉丝 19
博文 113
码字总数 59961
作品 1
广州
程序员
私信 提问
开源的自动化部署工具探索

1 前言 即使是在传统的企业当中,日常的备份、服务器状态监控和日志,通过手动的方式来进行的效率也很低,是一种人力的浪费。因此,自动化早已是每个运维都必须掌握的看家本领。 在不同的企业...

双月通天
2016/03/18
5.1K
0
五步走战略建立良好的持续交付流程

在Caylent[1],我们相信成功实施DevOps的关键之一就是持续交付(CD)和持续部署都可以完全自动化。在你的IT团队中实现完整的CD可以让你感受到DevOps生态系统所提供的许多优势,同时可以确保你...

Docker
2018/01/28
0
0
浅析DevOps解决方案的变迁

前言 最近Puppet和RightScale相继发布了DevOps 2016报告,其中Puppet的报告侧重于DevOps的价值ROI的调查结果,用调查结果佐证了DevOps给企业研发生产力和质量带来大幅的提升。RightScale的报...

English0523
2017/09/11
0
0
Fuel部署OpenStack架构分析

问题导读 1.什么是fuel? 2.fuel有什么特点? 3.openstack支持哪些hypervisor? 4.Fuel-OpenStack如何工作? 一.什么是fuel1.简介   这是Mirantis出品的部署安装工具,2013年10月份,推出...

English0523
2016/01/07
0
0
7款DevOps云计算基础设施自动化工具

  【IT168 技术】DevOps的诞生极大的推动了云计算行业的快速发展。因为使用正确的工具,现在可以进行从配置、代码部署到服务器配置和自动化的所有工作。而选择的工具主要取决于现有的基础设...

it168网站
2017/04/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

node.js中__dirname和./有什么区别?

在Node.js中编程并引用位于与当前目录相关的文件时,是否有任何理由使用__dirname变量而不仅仅是常规./ ? 到目前为止,我一直在使用./并且刚刚发现了__dirname的存在,并且基本上想知道将....

javail
15分钟前
17
0
Hive安装

下载上传apache-hive-2.1.1-bin.tar.gz文件并解压 tar -zxvf apache-hive-2.1.1-bin.tar.gz -C /export/servers 配置环境变量 vi /etc/profileexport HIVE_HOME=/export/servers/apache......

长臂猿猴
21分钟前
11
0
OS X:相当于Linux的wget

如何从库存OS X系统上的Un * x shell脚本执行HTTP GET? (安装第三方软件不是一种选择,因为这必须在我无法控制的许多不同系统上运行)。 例如,如果我在本地启动Mercurial服务器执行hg服务...

技术盛宴
31分钟前
25
0
Fedora 31 - 荣耀魔法本问题记录

最近荣耀魔法本装了Fedora31系统,没有像Deepin 15.11那样出现亮度不能调节和网卡不能用的问题。但是也有不少小问题: 触摸板有时启动后失效,需要重启。 触摸板的右键失效。 待机后进入桌面...

wffger
34分钟前
14
0
ElasticSearch深入:内部机制浅析(三)@

前言 上篇从分布式的角度阐述了 ES 的分布式设计和思想,这一篇打算与 Lucene 结合起来,摸透一些 ES 的常遇到的概念,我们可以将了解到的这些东西应用到优化实践中去。 一、Shard Shard 实际...

HLee
今天
30
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部