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]\nname=ftp\nbaseurl=ftp://10.0.0.100/pub/centos7\ngpgcheck=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]\nname=ftp\nbaseurl=ftp://10.0.0.100/pub/centos7\ngpgcheck=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    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM