【Ansible】ansible容器學習環境搭建

大夢想家發表於2022-03-27

想要學習ansible,只有一個節點肯定是不行的,而搭建虛擬機器又是一件非常費時費力費資源的事情,所以通過docker 快速搭建一個容器學習環境是一個不錯的選擇

1. 瞭解ansible部署

1.1 需要安裝些什麼

Ansible預設通過 SSH 協議管理機器。
安裝Ansible之後,不需要啟動或執行一個後臺程式,或是新增一個資料庫。只要在一個節點上安裝好,就可以通過這臺電腦管理一組遠端的機器。在遠端被管理的機器上,不需要安裝執行任何軟體,因此升級Ansible版本不會有太多問題.

1.2 對管理主機的要求

  • 目前,只要機器上安裝了 Python 2.6 或 Python 2.7 (windows系統不可以做控制主機),都可以執行Ansible.
  • 主機的系統可以是 Red Hat, Debian, CentOS, OS X, BSD的各種版本,等等.
  • 自2.0版本開始,ansible使用了更多控制程式碼來管理它的子程式,對於OS X系統,你需要增加ulimit值才能使用15個以上子程式,方法 sudo launchctl limit maxfiles 1024 2048,否則你可能會看見”Too many open file”的錯誤提示.

1.3 對託管節點的要求

通常我們使用 ssh 與託管節點通訊,預設使用 sftp.如果 sftp 不可用,可在 ansible.cfg 配置檔案中配置成 scp 的方式. 在託管節點上也需要安裝 Python 2.4 或以上的版本.如果版本低於 Python 2.5 ,還需要額外安裝一個模組:

  • python-simplejson

2. ansible環境部署

所以通過第一部分介紹,我們的學習環境準備4個節點,所有節點安裝相同的python版本,然後在一個節點安裝ansible即可。

ansible
host1
host2
host3

2.1 構建映象

Dockerfile.host

# Latest version of centos7
FROM centos:centos7
RUN yum clean all && \
    yum -y install epel-release && \
    yum -y install PyYAML python-jinja2 python-httplib2 python-keyczar python-paramiko python-setuptools git python-pip vim net-tools openssh-server
# sshd
RUN sed -i "s/#PermitRootLogin.*/PermitRootLogin yes/g" /etc/ssh/sshd_config && \
    ssh-keygen -t rsa -P "" -f /etc/ssh/ssh_host_rsa_key && \
    ssh-keygen -t ecdsa -P "" -f /etc/ssh/ssh_host_ecdsa_key && \
    ssh-keygen -t ed25519 -P "" -f /etc/ssh/ssh_host_ed25519_key
EXPOSE 22
RUN echo "root:123456" | chpasswd
CMD ["/usr/sbin/sshd", "-D"]

Dockerfile.ansible

# Latest version of centos7
FROM centos:centos7
RUN yum clean all && \
    yum -y install epel-release && \
    yum -y install PyYAML python-jinja2 python-httplib2 python-keyczar python-paramiko python-setuptools git python-pip vim net-tools openssh-server ansible
# sshd
RUN sed -i "s/#PermitRootLogin.*/PermitRootLogin yes/g" /etc/ssh/sshd_config && \
    ssh-keygen -t rsa -P "" -f /etc/ssh/ssh_host_rsa_key && \
    ssh-keygen -t ecdsa -P "" -f /etc/ssh/ssh_host_ecdsa_key && \
    ssh-keygen -t ed25519 -P "" -f /etc/ssh/ssh_host_ed25519_key
EXPOSE 22
RUN echo "root:123456" | chpasswd
CMD ["/usr/sbin/sshd", "-D"]

構建命令

# 構建ansible映象
docker build -t myansible/asible:1.0 -f Dockerfile.ansible .
docker build -t myansible/host:1.0 -f  Dockerfile.host .

2.2 執行容器

# 執行容器
## host
for ((i=1;i<=3;i++));do echo "start host$i";docker run -td --name host${i} --hostname host${i} myansible/host:1.0 ;done

## ansible
docker run -itd --name myansible --hostname myansible myansible/asible:1.0 /bin/bash


2.3 ansible容器配置ssh免密

#獲取容器ip
for ((i=1;i<=3;i++));do docker inspect --format '{{.NetworkSettings.IPAddress}}' host${i};done

# 進入ansible容器
docker exec -it myansible /bin/bash

cat >> /etc/hosts <<EOF
172.17.0.2    host1
172.17.0.3    host2
172.17.0.4    host3
EOF

ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa

ssh-copy-id root@host1
ssh-copy-id root@host2
ssh-copy-id root@host3

2.4 測試ansible是否可用

# 配置hosts
vim /etc/ansible/hosts
[group1]
host1
host2
[group2]
host3

3. 清除容器及映象

使用完了清除命令

# 清除容器
docker stop myansible && docker rm myansible
for ((i=1;i<=3;i++));do echo "clean host$i";docker stop host${i} && docker rm host${i} ;done
# 清除映象
docker rmi myansible/asible:1.0  myansible/host:1.0

相關文章