用docker快速布署cobbler装机系统

好久没写过博客了,上来撸一篇。。。。
最近在看K8s,刚好机房环境里需要加个cobbler 装机系统,便有了下面的折腾

环境:原有cobbler几台(因有多个机房,故有多个cobbler)
需求:新机房需要cobbler 自动装机系统

先做个cobbler2.8的镜像(为什么用2.8版本?2.6版本安装exsi会报错)

docker file 参照https://github.com/jasonlix5/docker-cobbler 修改

FROM bd2fd3afdba2
ADD cobbler-*  /
ADD entrypoint.sh  /entrypoint.sh
ADD supervisord.d/conf.ini /etc/supervisord.d/conf.ini
RUN yum localinstall cobbler-2.8.0-4.el7.x86_64.rpm cobbler-web-2.8.0-4.el7.noarch.rpm -y  && yum install  tftp-server dhcp supervisor -y && yum clean a
ll &&  rm -rf /var/cache/yum/* /tmp/*

CMD /entrypoint.sh

其中bd2fd3afdba2是我自己的centos7镜像,需要更改为自己环境的镜像 ,比如官方的镜像

cat entrypoint.sh
#!/bin/sh

set -ex

if [ ! $SERVER_IP ]
then
        echo "Please use $SERVER_IP set the IP address of the need to monitor."
        exit 1
elif [ ! $DHCP_RANGE ]
then
        echo "Please use $DHCP_RANGE set up DHCP network segment."
        exit 1
elif [ ! $NEXT_SERVER ]
then
        echo "Please use $NEXT_SERVER set TFTP PXE booting ."
        exit 1
elif [ ! $ROOT_PASSWORD ]
then
        echo "Please use $ROOT_PASSWORD set the root password."
        exit 1
elif [ ! $DHCP_SUBNET ]
then
        echo "Please use $DHCP_SUBNET set the dhcp subnet."
        exit 1
elif [ ! $DHCP_ROUTER ]
then
        echo "Please use $DHCP_ROUTER set the dhcp router."
        exit 1
elif [ ! $DHCP_DNS ]
then
        echo "Please use $DHCP_DNS set the dhcp dns."
        exit 1
elif [ ! $COBBLER_MASTER ]
then
        echo "Please use $COBBLER_MASTER set the cobbler master to rsync."
        exit 1
else
        PASSWORD=`openssl passwd -1 -salt hLGoLIZR $ROOT_PASSWORD`
        sed -i "s/^server: 127.0.0.1/server: $SERVER_IP/g" /etc/cobbler/settings
        sed -i "s/^next_server: 127.0.0.1/next_server: $NEXT_SERVER/g" /etc/cobbler/settings
        sed -i ‘s/pxe_just_once: 0/pxe_just_once: 1/g‘ /etc/cobbler/settings
        sed -i ‘s/manage_dhcp: 0/manage_dhcp: 1/g‘ /etc/cobbler/settings
        sed -i "s#^default_password.*#default_password_crypted: \"$PASSWORD\"#g" /etc/cobbler/settings
        sed -i ‘s/$pxe_menu_items//‘ /etc/cobbler/pxe/pxedefault.template
        sed -i "s/192.168.1.0/$DHCP_SUBNET/" /etc/cobbler/dhcp.template
        sed -i "s/192.168.1.5/$DHCP_ROUTER/" /etc/cobbler/dhcp.template
        sed -i "s/192.168.1.1;/$DHCP_DNS;/" /etc/cobbler/dhcp.template
        sed -i "s/192.168.1.100 192.168.1.254/$DHCP_RANGE/" /etc/cobbler/dhcp.template
        sed -i "s/^#ServerName www.example.com:80/ServerName localhost:80/" /etc/httpd/conf/httpd.conf
        sed -i "s/service %s restart/supervisorctl restart %s/g" /usr/lib/python2.7/site-packages/cobbler/modules/sync_post_restart_services.py

        rm -rf /run/httpd/*
        apachectl
        cobblerd

        cobbler sync
        cobbler replicate --master=$COBBLER_MASTER --distros=* --profiles=*
        pkill cobblerd
        pkill httpd
        rm -rf /run/httpd/*

        exec supervisord -n -c /etc/supervisord.conf
fi

supervisord 管理进程

supervisord.d/conf.ini
参照       https://github.com/jasonlix5/docker-cobbler/blob/master/supervisord.d/conf.ini

docker build -t cobbler:2.8 .

把创建的镜像上传到自己的私有仓库

为了使用原cobbler资源,避免大量的文件同步
新的cobbler 挂载旧cobbler的几个文件和目录
挂载文件(web_api 用户名密码)

/etc/cobbler/users.digest

NFS共享文件夹,只读

/var/www/cobbler/repo_mirror/

/var/www/cobbler/ks_mirror/
/var/lib/cobbler/loaders

在原有的cobbler 安装nfs服务,用于新的cobbler挂载
NFS 服务器

yum install rpcbind nfs-utils -y

vim /etc/exports
/opt/data/cobbler/ks_mirror  10.0.0.0/8(ro,sync)
/opt/data/cobbler/repo_mirror  10.0.0.0/8(ro,sync)
/var/lib/cobbler/loaders      10.0.0.0/8(ro,sync)

启动NFS服务

在新的cobbler主机上安装docker-ce

启动docker

copy kubelet 二进制文件到/bin/kubelet

创建kubelet监视目录

mkdir /etc/kubernetes/manifests/ 

启动kubelet

nohup kubelet --allow-privileged=true --pod-manifest-path=/etc/kubernetes/manifests/   --fail-swap-on=false --pod-infra-container-image=10.8.15.127:5000/rhel7/pod-infrastructure:latest --v=2 --runtime-cgroups=/systemd/system.slice --kubelet-cgroups=/systemd/system.slice &

最好放supervisord 管理

把老的web api密码文件 放到主机 /etc/cobbler/users.digest ,我这样做是保持用户名密码一致,看官需要根据自己的环境更改
新建cobbler配置文件

vim /etc/kubernetes/manifests/cobbler.yaml

apiVersion: v1
kind: Pod
metadata:
  name: cobbler28
  labels:
    app: cobbler28
spec:
  hostNetwork: true
  containers:
  - image: 10.8.15.127:5000/cobbler:2.8
    name: cobbler28
    volumeMounts:
    - mountPath: /etc/cobbler/users.digest
      name: webaccess
    - mountPath: /var/www/cobbler/repo_mirror
      name: repo
    - mountPath: /var/www/cobbler/ks_mirror
      name: ksmirror
    - mountPath: /var/lib/cobbler/loaders
      name: loaders
    env:
        - name: SERVER_IP
          value: "10.8.14.234"
        - name: NEXT_SERVER
          value: "20.8.14.234"
        - name: ROOT_PASSWORD
          value: "iforgot"
        - name: DHCP_RANGE
          value: "20.8.14.230 20.8.14.235"
        - name: DHCP_SUBNET
          value: "20.8.14.0"
        - name: DHCP_ROUTER
          value: "20.8.14.234"
        - name: DHCP_DNS
          value: "20.8.14.234"
        - name: COBBLER_MASTER
          value: "10.8.15.234"

  volumes:
  - name: webaccess
    hostPath:
      path: /etc/cobbler/users.digest
      type: File
      readOnly: true
  - name: ksmirror
    nfs:
      server: 10.20.10.61
      path: "/var/www/cobbler/ks_mirror"
      readOnly: true
  - name: repo
    nfs:
      server: 10.20.10.61
      path: "/var/www/cobbler/repo_mirror"
      readOnly: true
  - name: loaders
    nfs:
      server: 10.20.10.61
      path: "/var/lib/cobbler/loaders"
      readOnly: true

注意上面的 DHCP_RANGE 等部分,我这里是cobbler配置了第二个20网段的ip,是为了避免分配Ip地址冲突

COBBLER_MASTER 是需要同步的旧cobbler

查看cobbler容器是否启动
docker ps

docker logs cobbler-contain 查看同步是否完成

同步完成后
使用登录cobbler_web查看Distros和Profiles 是否同步过来了

添加api配置到自己的装机系统中

done

原文地址:http://blog.51cto.com/qingwa/2129931

时间: 2024-10-04 14:28:21

用docker快速布署cobbler装机系统的相关文章

Ubuntu 16.04系统布署小记

前段时间趁着双11打折,又将阿里云主机续费了3年.之前布署的系统是Ubuntu 12.04,从系统发布到现在也有四年半了,其官方支持的生命周期也将止于明年春,且这在几年里出现了很多新的事物,我也需要跟上时代的步伐,于是着手将整个环境更新至最新的Ubuntu 16.04,现将布署过程记录如下 系统布署 环境布署 应用布署 10. 停止服务器实例,选择更换系统盘,选择Ubuntu 16.04 64bit,重启实例 20. 挂载虚拟内存 mkdir /swap && cd /swap &

在linux中快速使用docker搭建ELK日志监控分析系统

在linux中使用docker安装ELK日志监控分析系统 网上的教程非常零散或者很多都已经过时了,我这里总结了相比于其他更新的日志系统搭建.并且使用docker镜像,更加简化了安装.在这开始之前先附上我的成功配置截图: linux的安装 linux的安装很简单,但是要使用docker必须安装centos7及以上,不然出现的各种兼容性问题自行百度解决.这里有两种方法: 如果是学生可以购买阿里或者腾讯的linux服务器,简单方便,每个月只要10元钱,其实挺划算的.这是阿里linux的购买地址:htt

Dokuwiki布署小记

最近个人写作风格全面转向Markdown模式,但之前使用的Mediawiki并未原生支持,且本人在布署时为了实现其所见即所得的方案和别的一些个性化需求,添加了太多插件和自定义设置,两年多过去了,很多设置细节已不甚记得,所以想进行Wiki的重新布署与实施.经研究,最终选择Dokuwiki.其优点很多,如功能强大,更新及时,插件丰富,结构简单,布署方便等.现将布署过程记录如下,以示备忘. 10.从官网上下载程序包,如果本地没有PHP环境,注意在“Include Web-Server”处勾选“Micr

企业级中间件应用WebLogic11g/12c集群安装布署配置培训视频课程全套

企业级中间件应用WebLogic11g/12c集群安装布署配置培训视频课程全套 套餐介绍:高薪必学的企业级中间件应用WebLogic实施教程. 基础:中间件的概念,WebLogic概念,域,JDK,JVM,数据源,连接池,控制台,集群相关. 实战:1.企业级应用系统项目的实施流程,如调研,方案,规划等;2.Oracle WebLogic11g与WebLogic12c集群配置与实施维护;4.WebLogic在windows与Linux平台下的实施与维护;5.不同平台下JDK安装与JVM参数优化;6

IIS6.0中布署MVC站点(转)

昨晚我写的API上线,API是vs2010 + MVC4开发的,需要布署到windows 2003 server + IIS6.0的环境中,之前一直是布在IIS7.0,比较熟悉, 换到IIS6.0,添加网站,修改配置后,发现网站无法访问. 在网上找了一些文章,综合了几个,才终于搞定了. 服务器环境要求: Windows 2003 server + IIS6.0 1.必须安装.net framework 4.0, MVC 2.最好能安装.net framework 的sp1, 我们服务器上装的是.

Ubuntu 16.04环境布署小记

本系列文章记录了升级Ubuntu 16.04的布署过程 回到目录 10. 安装Mono, Xsp 当前版本16.04.1的系统源的Mono版本为4.2.1,如需使用最新版本(本文书写时稳定版本为4.6.2),则需添加Mono官方源地址 sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF echo "deb http://dow

[转]okuwiki布署小记

okuwiki布署小记 原文地址:http://www.cnblogs.com/ljzforever/ 最近个人写作风格全面转向Markdown模式,但之前使用的Mediawiki并未原生支持,且本人在布署时为了实现其所见即所得的方案和别的一些个性化需求,添加了太多插件和自定义设置,两年多过去了,很多设置细节已不甚记得,所以想进行Wiki的重新布署与实施.经研究,最终选择Dokuwiki.其优点很多,如功能强大,更新及时,插件丰富,结构简单,布署方便等.现将布署过程记录如下,以示备忘. 10.从

用Docker快速打造企业Paas云计算平台

用Docker快速打造企业Paas平台 课程特色 Docker就像一场森林大火重新创造了一个全新的云计算领域,Docker作为云计算分布式软件工程的革命正在深刻地改变传统分布式系统的开发.测试和部署.其影响的神速远胜于云计算第一代技术OpenStack等:Docker不仅是历史上最流行的开源项目之一,而且也从根本上改变了人们构 建应用程序的思维方式.它可以把程序及依赖的二进制文件.第三方库等封装在一起,运行在任何安装 Docker Daemon 的服务器上,它有望成为未来软件自动化部署的标准.

高性能数据库连接和易于布署控件dbExpress

最近发现MDT推出去的系统的有不同问题,其问题就不说了,主要是策略权限被域继承了.比如我们手动安装的很多东东都是未配置壮态,推的就默认为安全壮态了,今天细找了一下,原来把这个关了就可以了. 高性能数据库连接和易于布署控件dbExpress