zoukankan      html  css  js  c++  java
  • Linux 运维工作中的经典应用ansible(批量管理)Docker容器技术(环境的快速搭建)

    一 Ansible自动化运维工具

    Python 在运维工作中的经典应用
    
    ansible(批量管理操作)
    
    1.安装ansible(需要bese epel 2种源)
    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    
    curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    
    yum install ansible -y
          
        
    克隆虚拟机
    
    hostnamectl set-hostname standby
    vim /etc/sysconfig/network-scripts/ifcfg-eth0
    IPADDR=10.0.0.200 #改
    UUID行            #删掉
    
    vim /etc/hosts
    10.0.0.200 standby #最后一行添加
    systemctl restart network #重启网卡
    
    
    +++++++++++++++++++++++++++++++
    Linux的 SSHD(22)
    验证方式:
    (1)用户+密码(PAM)
    (2)秘钥验证(公钥:钥匙和私钥:锁)
        通过秘钥对实现,需要将公钥分发到各节点
    +++++++++++++++++++++++++++++++
    2.管理被控端,管理机先生成秘钥,然后推送公钥
    
    ssh-keygen   #执行,一路回车
    ssh-copy-id -i ~/.ssh/id_rsa.pub root@10.0.0.200
    ssh-copy-id -i ~/.ssh/id_rsa.pub root@10.0.0.100
    #注意每台都要分发mi钥
    [root@demo ~]# for i in {1..12};do ssh-copy-id -i ~/.ssh/id_rsa.pub root@10.0.0.$i;done
    
    
    
    3.配置被管理的主机清单
    [root@demo ~]# vim /etc/ansible/hosts
    #覆盖原来内容
    [web]
    10.0.0.100
    10.0.0.200
    
    4.使用ansible的ad-hoc测试
    ansible all -m ping      #ansible 主机组或all -m 命令
    10.0.0.12 | SUCCESS => {
        "changed": false, 
        "ping": "pong"
    }
    10.0.0.11 | SUCCESS => {
        "changed": false, 
        "ping": "pong"
    }
    
    #执行远程命令
    [root@demo ~]# ansible all -m shell -a "df -h"
    10.0.0.12 | CHANGED | rc=0 >>
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/sda3        98G  3.4G   95G   4% /
    devtmpfs        477M     0  477M   0% /dev
    tmpfs           488M     0  488M   0% /dev/shm
    tmpfs           488M  7.7M  480M   2% /run
    tmpfs           488M     0  488M   0% /sys/fs/cgroup
    /dev/sda1       197M  102M   96M  52% /boot
    tmpfs            98M     0   98M   0% /run/user/0
    
    10.0.0.11 | CHANGED | rc=0 >>
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/sda3        98G  1.6G   97G   2% /
    devtmpfs        981M     0  981M   0% /dev
    tmpfs           992M  124K  992M   1% /dev/shm
    tmpfs           992M  9.6M  982M   1% /run
    tmpfs           992M     0  992M   0% /sys/fs/cgroup
    /dev/sda1       197M  102M   96M  52% /boot
    tmpfs           199M     0  199M   0% /run/user/0
    
    
    5.ansible playbook自动化安装nginx
    [root@demo ~]# vim  playbook_nginx.yml 
    - hosts: web
      remote_user: root
      vars:
        http_port: 80
      tasks:
        - name: Add Nginx Yum Repository
          yum_repository:
            name: nginx
            description: Nginx Repository
            baseurl: http://nginx.org/packages/centos/7/$basearch/
            gpgcheck: no
    
        - name: Install Nginx Server
          yum: 
            name=nginx state=present
    
        - name: Configure Nginx Server
          template: src=./default.conf.template dest=/etc/nginx/conf.d/default.conf
          notify: Restart Nginx Server
    
        - name: Start Nginx Server
          service: name=nginx state=started enabled=yes
    
      handlers:
        - name: Restart Nginx Server
          service: name=nginx state=restarted
          
         
         
    6.
    default.conf.template文件如下
    
    [root@demo ~]#vim default.conf.template 
    server {
        listen       {{ http_port }};
        server_name  localhost;
    
        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
        }
    }
    
    
    7.执行ansible-playbook
    检查语法
    [root@demo ~]# ansible-playbook --syntax playbook_nginx.yml     
    
    模拟执行
    [root@demo ~]# ansible-playbook -C playbook_nginx.yml 
    
    执行
    [root@demo ~]# ansible-playbook playbook_nginx.yml       
    
    =============================================================

    二 Docker容器技术

    0、环境准备类:
    #docker.repo
    curl  http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
    #base源
    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    
    #依赖包
    yum install -y yum-utils device-mapper-persistent-data lvm2
    
    #查询dockr版本情况
    yum list docker-ce.x86_64 --showduplicates | sort -r
    
    #docker
    yum install -y --setopt=obsoletes=0 
    docker-ce-17.03.2.ce-1.el7.centos.x86_64 
    docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch
    
    #重载
    systemctl daemon-reload
    #重启docker
    systemctl restart docker
    
    #查看docker版本,详细
    docker version
    docker  info
    
    
    配置镜像加速
    
    
    阿里云Docker-hub
    
    https://cr.console.aliyun.com/cn-hangzhou/mirrors
    
    mkdir -p /etc/docker
    
    tee /etc/docker/daemon.json <<-'EOF'
    {
       "registry-mirrors": ["https://68rmyzg7.mirror.aliyuncs.com"]
    }
    EOF      
          
          
    或者:
    
    vim   /etc/docker/daemon.json
    
        {
             "registry-mirrors": ["https://68rmyzg7.mirror.aliyuncs.com"]
        }
    
    
    1. pull常用镜像
    docker pull  centos:6.9
    docker pull  centos:7.5.1804
    docker pull  nginx
    
    
    
    CPU   MEM   IO
    
    OS  :  Kernel
    docker技术三部分:image镜像,container容器,registry仓库
    镜像:传统虚拟机上面安装的镜像包含两个部分,一个是Linux内核的发行版(比如Linux3.13内核),一个是操作系统的发行版(docker镜像)。
    容器:镜像是静态的,每一层都 只是可读的,通过镜像创建容器就是在镜像上加一个可读可写的层。
    
    1. 镜像管理
        1.1 下载镜像
        docker search centos   #查看镜像有哪些版本
        docker pull centos:6.9 #下载镜像
        docker pull centos:7.5.1804
        docker pull nginx
        1.2 查询以下载的镜像信息
        docker images    #下载镜像信息
        docker images -q #只看id
        docker inspect ID/name:tag #更详细
        1.3 删除镜像
        docker rmi  ID 
        docker rmi `docker images -q`
        docker rmi $(docker images -q)
        
        1.4 导入导出镜像
        [root@docker ~]# docker image save nginx>/opt/nginx.tar.gz
        [root@docker ~]# docker image load -i /opt/nginx.tar.gz
        
        
        1.5 启动容器并获取镜像
        [root@docker ~]# docker  run -d -p 80:80 httpd #后台启动
        [root@docker ~]# docker ps -a
        [root@docker ~]# docker images
    
    定制镜像: centos7.5+vim+net-tools+iproute+sshd
    (本质 打包:基础镜像+定制功能)
        1.启动新容器(镜像上加个可读写层)
        docker run -it --name "centos7.5" 76d6bc25b8a5
        #                      新容器命名   基础镜像id
        2.优化yum源(这里是本地base源优化) (按实际情况操作要不要优化)
        mv /etc/yum.repos.d/*.repo /tmp
        echo -e "[ftp]
    name=ftp
    baseurl=ftp://10.0.0.100/pub/centos7
    gpgcheck=0">/etc/yum.repos.d/ftp.repo
        注释:echo -e 处理特殊字符
        3. 安装必须软件包(容器定制功能)
        yum install -y vim net-tools  iproute   openssh-*   -y
    
        4.启动SSHD(服务型镜像,要hang住)
    
         mkdir /var/run/sshd
         echo 'UseDNS no' >> /etc/ssh/sshd_config
         sed -i -e '/pam_loginuid.so/d' /etc/pam.d/sshd
         echo 'root:123456' | chpasswd
         /usr/bin/ssh-keygen -A
         /usr/sbin/sshd -D           #hang住
         
         注意: 以上操作做完之后,会一直不退出,需要用以下命令退回到宿主机,并不关闭容器
         ctrl p  q
    
        5.制作镜像
        docker commit centos7.5  oldguo/centos7_sshd:v2
        #             容器名/id     制作的镜像名:版本
    
    
    
    #dockerfile定制镜像 ## Centos7.5
    #基础镜像 功能分离 
    [root@docker sshd]# vim  dockerfile 
    FROM centos:7.5.1804
    RUN mv /etc/yum.repos.d/*.repo /tmp
    RUN echo -e "[ftp]
    name=ftp
    baseurl=ftp://10.0.0.100/pub/centos7
    gpgcheck=0">/etc/yum.repos.d/ftp.repo
    RUN yum install -y vsftpd         #ftp协议
    RUN yum install -y openssh-server #对外开放远程端口用
    RUN yum install -y openssh-clients
    RUN yum install net-tools* -y   #网络管理
    RUN yum install iproute-* -y    #网络管理
    RUN yum install -y wget   #下载工具
    RUN mkdir /var/run/sshd         
    RUN echo 'UseDNS no' >> /etc/ssh/sshd_config
    RUN sed -i -e '/pam_loginuid.so/d' /etc/pam.d/sshd
    RUN echo 'root:123456' | chpasswd
    RUN /usr/bin/ssh-keygen -A
    EXPOSE 22
    CMD ["/usr/sbin/sshd", "-D"]
    
    注意:/opt/dockerfile/dockerfile
    docker build -t "oldguo/centos7_sshd:v3" /opt/dockerfile 
    #根据文档 制作 镜像
    
    
    ===========================================
     docker run -i 与-t 一起用 交互模式
                --name  -p端口映射 80:80  -v 数据持久化/opt:/test  -d后台运行     
    2. 容器基本管理        
        2.0 容器的类型
            工具类:vim
                 docker run -it --name="test_vim"  3fe2fe0dab2e /bin/bash
            注意:一般都是交互式
            服务类:nginx 
                docker run -d -p 8080:80 --name="discuz" nginx:1.14
            注意:通常要hang住,就像redis-server服务启动卡在那里。
        2.1 容器的多类启动方式
         (1)交互式启动
         [root@docker ~]# docker run -it --name "testcentos" centos:6.9 /bin/bash
         主要是针对于工具类的容器,一旦exit容器,容器就自动关闭
         (2)守护式启动
          1.交互式启动容器+Ctrl+p+q
          [root@docker ~]# docker run  -it --name "testnginx" nginx /bin/bash
          加ctrl+p+q
            [root@docker ~]# docker attach testnginx  进入(正在运行中的容器)
          2.死循环
         docker run  --name testnginx1  -d nginx /bin/sh -c "while true ;do echo hello world; sleep 1;done"
          3.服务前台运行
           sshd -D  
           nginx -g ""
     
           各种服务hang夯住方式
          
        2.2 容器的常用管理命令
        docker ps -a  -q -l
        
        docker rm 容器ID|容器名称
        批量删除已关闭
        docker rm -v $(docker ps -aq -f status=exited)
        批量强制删除所有
        docker rm -f `docker ps -a –q`
        
        docker top nginx
        docker inspect nginx
        docker attach 容器ID|容器名称(工具类)配合ctrl+p+q
        docker exec  -i -t  容器ID|容器名称 /bin/bash(服务类),一般是做服务类容器调试用
        [root@docker ~]# docker exec -it  centos6.9   /bin/bash
    
    
        docker stop
        docker kill
    
        docker  start -i
        docker  restart 容器ID|容器名称
    
        
        
    3. 数据卷的使用(持久化)
    #方式1
    docker -it --name 'test' -v /opt:/test centos:7.5.1804
    #                        将主机的/opt 映射到容器/test      
    #方式2
    通过dockerfile配置
    
    4.制作私有仓库
    
    4.1 配置私有仓库
    docker pull registry
    docker run -d -p 5000:5000 --restart=always --name registry -v /opt/Registry:/var/lib/registry  registry    
    #restart=always 表示docker重启仓库也跟着重启
    #相当于创建了一个容器
    #用5000端口
    
    
    vim /etc/docker/daemon.json
    
    {
       "registry-mirrors": ["https://68rmyzg7.mirror.aliyuncs.com"],
       "insecure-registries": ["10.0.0.100:5000"]
    }
    
    
    systemctl  restart docker
        
        
        
    4.2 使用本地镜像:
    4.2.1 制作本地镜像并push到
    
    [root@docker ~]# docker tag nginx 10.0.0.100:5000/oldguo/nginx:v1
    # 给已存在的镜像打上tag标记
    [root@docker ~]# docker images
    [root@docker ~]# docker push 10.0.0.100:5000/oldguo/nginx:v1
    #使用 docker push 上传标记的镜像
    
    4.2.2 异地进行pull镜像
    [root@docker ~]# docker pull  10.0.0.100:5000/oldguo/nginx:v1    
  • 相关阅读:
    JAVA多线程之线程的挂起与恢复(suspend方法与resume方法)
    基于Andoird 4.2.2的同步框架源代码学习——同步发起端
    C#MD5为密码加密
    YOUYOU深入学习Ganglia之三(gmetad的软件架构)
    js原生appendChild的bug
    复选框输入Android Studio 如果修改LogCat的颜色,默认全是黑色看着挺不舒服的
    输出目录文件被多个中间文件输出目录相同的工程包含
    数据对象ajax学习篇9
    function设置jsp页面使用js控制文本框只读,并且按下backspace删除按钮后停在原页面
    资源下载南方cass视频教程,包括文档,数据,很全的
  • 原文地址:https://www.cnblogs.com/3sss-ss-s/p/10226874.html
Copyright © 2011-2022 走看看