一 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