博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
#综合实践#通过puppet管理远程docker容器——配置puppet和实现变更
阅读量:5919 次
发布时间:2019-06-19

本文共 9257 字,大约阅读时间需要 30 分钟。

hot3.png

112308_p45R_987833.jpg

前提准备:

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 Hochikongwhile truedo{read -p "What you want to do?try input 'help' to get some tips(please input the words in ''): " whatif [ $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;fiif [ $what = 'statusa' ];then     echo "All containers's status:\n";    docker ps -a;fiif [ $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;fiif     [ $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     }donefiif [ $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.comWarning: Puppet kick is deprecated. See http://links.puppetlabs.com/puppet-kick-deprecationWarning: Failed to load ruby LDAP library. LDAP functionality will not be availableTriggering docker.hzg.comGetting statusstatus is successdocker.hzg.com finished with exit code 0Finished

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

检查docker节点上的信息:

root@docker:~# lsBACKUPDockerfile  control.sh  Dockerfile  hzg.sh  init.pp  status.log  test2.sh  test.py  util-linux-2.24root@docker:~# cd /var/log/dockerlaunch/root@docker:/var/log/dockerlaunch# lsweb1.log  webbase.logroot@docker:/var/log/dockerlaunch# cd ~root@docker:~# docker psCONTAINER ID        IMAGE                    COMMAND             CREATED              STATUS              PORTS                    NAMES050ebb07cf25        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

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

转载于:https://my.oschina.net/hochikong/blog/307889

你可能感兴趣的文章
poj - 1860 Currency Exchange
查看>>
【JS学习】慕课网8-17编程练习 网页的返回与跳转
查看>>
chgrp命令
查看>>
Java集合框架GS Collections具体解释
查看>>
为什么要在下班后努力学习?你不知道的秘密...... ...
查看>>
洛谷 P2486 BZOJ 2243 [SDOI2011]染色
查看>>
Spring Cloud 2.x系列之整合rocketMQ
查看>>
答疑解惑:Linux与Windows的那些事儿(2)
查看>>
Java的Socket网络编程以及多线程
查看>>
百万连接之路
查看>>
关于传输自环导致中兴2826交换机无法网管的故障案例
查看>>
Fsutil文件的具体用法
查看>>
7月第3周邮件通信网站综合排行Top10:163居首
查看>>
linux 笔记本的温度提示
查看>>
【转载】nginx反向代理(proxy_pass)tomcat的过程中,session失效的问题解决
查看>>
项目管理实践教程
查看>>
(转)DOTA新版地图6.78发布:大幅改动 增两位新英雄
查看>>
合成模式
查看>>
HelloWorld App of ffmpeg JNI
查看>>
banana pi与中科院先研院举行开源硬件介绍交流活动
查看>>