基于Docker创建20台Linux虚拟机,通过Ansible批量管理20台机器
提前安装和启动Docker服务;
systemctl start docker.service
查看Docker进程状态;
ps -ef|grep -aiE docker
创建一个基础的 Dockerfile(可选)
虽然可以直接运行容器而不必创建自定义镜像,但为了更好地适应你的需求,你可以创建一个简单的 Dockerfile:
FROM swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/ubuntu:latest
RUN apt-get update && apt-get install -y openssh-server python3-minimal sudo
RUN mkdir /var/run/sshd
RUN echo 'root:root' | chpasswd
RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
# SSH login fix. Otherwise user is kicked off after login
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
ENV NOTVISIBLE "in users profile"
RUN echo "export VISIBLE=now" >> /etc/profile
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
基于ubuntu镜像创建20台虚拟机;
[root@gitlab ansible-docker]# cat start_20_containers.sh
#!/bin/bash
# 清空现有的 inventory 文件
echo "[docker_hosts]" > ./inventory
for i in $(seq 1 20); do
PORT=$((2222 + $i))
NAME="docker_host_$i"
docker run -d --name $NAME -p $PORT:22 my-ubuntu
IP="localhost"
echo "$IP:$PORT ansible_user=root ansible_ssh_pass=root" >> ./inventory
done
查看已经启动的20台Linux虚拟机的状态;
docker ps|grep -aiE ubuntu
查看已经启动的20台Linux虚拟机的IP地址;
for i in $(docker ps | grep my-ubuntu | awk '{print $1}'); do docker inspect --format='{{.Network
Settings.IPAddress}}' $i; done
将20台Linux虚拟机的IP信息写入/etc/ansible/hosts文件中;
for i in $(docker ps | grep my-ubuntu | awk '{print $1}'
); do docker inspect --format='{{.NetworkSettings.IPAddress}}' $i; done >>/etc/ansible
/hosts
给所有容器安装ssh服务并启动
for container in $(docker ps --format "{{.Names}}"); do
echo "Setting up SSH in container: $container"
docker exec -it $container apt update > /dev/null
docker exec -it $container apt install -y openssh-server sudo > /dev/null
docker exec -it $container sh -c "echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config"
docker exec -it $container /usr/sbin/sshd
done
给所有容器上传公钥,方便互信
for i in {2..21}; do
sshpass -p 'root' ssh-copy-id -o StrictHostKeyChecking=no root@172.172.0.$i
done
最后测试
ansible cicd -m shell -a 'w
'