|
|
51CTO旗下网站
|
|
移动端

如何使用Ansible部署容器?

容器不可逃避,因为它们继续在企业IT部署中唱主角。你可以将它们部署为应用程序和服务等。

作者:布加迪编译来源:51CTO|2020-01-02 10:44

【51CTO.com快译】容器不可逃避,因为它们继续在企业IT部署中唱主角。你可以将它们部署为应用程序和服务等。此外,部署容器的方法与部署它们的原因一样迥然不同:

•Docker

•Kubernetes

•Rancher

•Solaris Containers

•Rocket

•MicroK8s

•Tectonic

不一而足。但是你是否知道还有另一种部署容器的方法,这种方法可能让远程管理员想试一试?这种方法就是通过Red Hat的开源自动化工具Ansible。

简单介绍一下,Ansible是一种在Linux上运行的开源软件供应、配置管理和应用程序部署工具。Ansible含有自己的声明性语言,使用的剧本(playbook)创建用于在远程计算机上运行简单或异常复杂的命令(或一组命令)的环境。

当然,Ansible可用于部署容器。

在你深入了解之前,我要展示的不一定是最佳实践场景。由于每个人的情况和需求各不相同,下面介绍的只是使用Ansible来部署容器。有更好的方法吗?当然。但这是否会让你进而可以创建高度灵活且可行的Ansible剧本?肯定会。

你需要什么?

你至少需要两台服务器,一台服务器已安装并运行Ansible。我将演示Ubuntu Server 18.04的两个实例。你还需要拥有sudo特权的用户帐户。最后,你需要在服务器之间建立了SSH密钥验证机制。若没有SSH密钥验证,这种方法没法使用。

以上就是你所需要的。

安装Ansible

如果你尚未在一台服务器上运行Ansible,请按照以下步骤来安装:

1. 登录到将托管Ansible的Ubuntu服务器。

2. 使用命令sudo apt-add-repository ppa:ansible/ansible安装必要的存储库。

3. 使用命令sudo apt-get update更新apt。

4. 使用命令sudo apt-get install ansible -y安装Ansible。

5. 如有必要,使用命令sudo apt-get install python -y安装Python解释器。

复制你的SSH密钥

为了使这方法奏效,你必须建立SSH密钥验证机制。在Ansible服务器上,使用以下命令创建SSH密钥:

  1. ssh-keygen 

一旦创建了密钥,使用以下命令将它复制到远程计算机:

  1. ssh-copy-id SERVER_IP 

其中SERVER_IP是远程服务器的IP地址。

安装Docker

接下来,你要在两台(或所有)计算机上安装Docker引擎。想安装Docker引擎,请登录到其中一台服务器,并执行以下命令:

  1. sudo apt-get install docker.io python3-docker -y 

一旦安装完毕,使用以下命令启动并启用Docker引擎:

  1. sudo systemctl start docker  
  2. sudo systemctl enable docker 

最后,使用以下命令将你的用户添加到Docker组:

  1. sudo usermod -aG docker $USER 

为了使更改生效,请注销并重新登录。

一旦你在所有计算机上完成了这些步骤,就可以下一步了。

目录结构

现在,我们将创建必要的目录和文件。这将在运行Ansible的计算机上完成。登录该计算机,并执行命令:

  1. mkdir ~/docker_project 

使用以下命令进入到刚创建的目录:

  1. cd ~/docker_project 

现在我们将创建主机文件。使用以下命令执行此操作:

  1. nano hosts 

在该文件中,粘贴以下内容:

  1. [webserver]  
  2. SERVER_IP  
  3. [webserver:vars]  
  4. ansible_python_interpreter=/usr/bin/python3 

其中SERVER_IP是远程服务器的IP地址。如果你有多台服务器,该文件会是这样子:

  1. [webserver]  
  2. SERVER_IP  
  3. SERVER2_IP  
  4. [webserver:vars]  
  5. ansible_python_interpreter=/usr/bin/python3 

保存并关闭文件。

现在我们将创建Ansible剧本。该剧本将执行以下操作:

•安装aptitude。

•安装几个依赖项。

•添加Docker存储库。

•安装Docker社区版。

•安装Docker Python模块。

•拉取正式的Ubuntu映像。

•基于刚拉取的Ubuntu映像创建四个容器。

这个新文件将采用标准的YAML格式,这意味着你必须密切注意行缩进。缩进不一致会导致你的剧本失败。使用以下命令创建一个新文件:

  1. nano ubuntu_playbook.yml 

我们的剧本如下所示:

  1. - hosts: all</code> <code class=""> become: true</code> <code class=""> vars:</code> <code class=""> create_containers: 4</code> <code class=""> default_container_name: docker</code> <code class=""> default_container_image: ubuntu</code> <code class=""> default_container_command: sleep 1d</code> <code class=""> tasks:</code> <code class=""> - name: Install aptitude using apt</code> <code class=""> apt: name=aptitude state=latest update_cache=yes force_apt_get=yes</code> <code class=""> - name: Install required system packages</code> <code class=""> apt: name={{ item }} state=latest update_cache=yes</code> <code class=""> loop: [ 'apt-transport-https''ca-certificates''curl''software-properties-common''python3-pip''virtualenv''python3-setuptools']</code> <code class=""> - name: Add Docker GPG apt Key</code> <code class=""> apt_key:</code> <code class=""> url: https://download.docker.com/linux/ubuntu/gpg</code> <code class=""> state: present</code> <code class=""> - name: Add Docker Repository</code> <code class=""> apt_repository:</code> <code class=""> repo: deb https://download.docker.com/linux/ubuntu xenial stable</code> <code class=""> state: present</code> <code class=""> - name: Update apt and install docker-ce</code> <code class=""> apt: update_cache=yes name=docker-ce state=latest</code> <code class=""> - name: Install Docker Module for Python</code> <code class=""> pip:</code> <code class=""> name: docker</code> <code class=""> - name: Pull default Docker image</code> <code class=""> docker_image:</code> <code class=""> name: "{{ default_container_image }}"</code> <code class=""> source: pull</code> <code class=""> - name: Create default containers</code> <code class=""> docker_container:</code> <code class=""> name: "{{ default_container_name }}{{ item }}"</code> <code class=""> image: "{{ default_container_image }}"</code> <code class=""> command: "{{ default_container_command }}"</code> <code class=""> state: present</code> <code class=""> with_sequence: count={{ create_containers }} 

保存并关闭文件。显然,你可以根据需要修改剧本,因此仔细阅读剧本,再作相应更改。

正如我所说,有多种方法可以处理上述任务。你在上面看到的只是其中之一。不过它很管用,正好可以看看如何使用Ansible部署容器。

运行剧本

有了剧本,我们现在可以使用以下命令运行它:

  1. ansible-playbook -i hosts ubuntu_playbook.yml --ask-become-pass 

–ask-become-pass选项指示Ansible要求远程用户SSH密钥使用sudo密码(图1)。一旦你输入该密码,按键盘上的回车键,剧本将运行。

图1:输入SSH密钥后剧本会运行

剧本可能需要几分钟才能完成,这要看你的网络连接和计算机的速度。完成后,登录到远程服务器,并执行命令:

  1. docker ps -a 

你应该看到新容器已经部署(图2)。

图2.用GIMP创建

这就是使用Ansible部署容器的全部内容。有更好的方法可以做到这一点吗?当然有。但如果你已经在Ansible方面有投入,何不将容器的部署添加到你越来越多的剧本中?

原文标题:How to Deploy a Container Using Ansible,作者:Jack Wallen

【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】

【编辑推荐】

  1. 云会“杀死”运维吗?解读运维的刺激2019
  2. 2019中国互联网大拐点:技术为王
  3. 请收藏!运维必会的 Kubernetes 指南
  4. 抢不到回家的票,还真不是12306技术不行
  5. 从 VSCode 看大型 IDE 技术架构
【责任编辑:张燕妮 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+更多

一步到位玩儿透Ansible

一步到位玩儿透Ansible

Ansible
共17章 | 骏马金龙1

33人订阅学习

云架构师修炼手册

云架构师修炼手册

云架构师的必备技能
共3章 | Allen在路上

22人订阅学习

Devops之监控神器Prometheus

Devops之监控神器Prometheus

监控主流
共22章 | 小罗ge11

172人订阅学习

读 书 +更多

Visual Studio Team Systems软件工程实践

本书论述了软件开发价值增加的思维方式。这一思维方式构成了VSTS的基础,包括VSTS的指导思想,为什么这些指导思想会以某些方式表现,以及它...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO官微