Kubernetes 安装工具 Ansible

Kubernetes 可以使用 Kubeadm + Ansible 的方式搭建,本文介绍 Ansible 概念和作用。

 

1. Ansible 是什么

Ansible是个什么东西呢?官方的title是“Ansible is Simple IT Automation”——简单的自动化IT工具。这个工具的目标有这么几项:自动化部署APP;自动化管理配置项;自动化的持续交付;自动化的云服务管理。

所有的这几个目标本质上来说都是在一台或者几台服务器上,执行一系列的命令而已。就像Fabric,以及基于Fabric开发的自动化应用部署的工具: Essay 。都是做了这么个事——批量地在远程服务器上执行命令 。

那么Fabric和Ansible有什么差别呢?简单来说Fabric像是一个工具箱,提供了很多好用的工具,用来在Remote执行命令,而Ansible则是提供了一套简单的流程,你只要按照它的流程来做,就能轻松完成任务。这就像是库和框架的关系一样。

当然,它们之间也有共同点——都是基于 Paramiko 开发的。这个Paramiko是什么呢?它是一个纯Python实现的ssh协议库。因此Fabric和Ansible还有一个共同点就是不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的。

Ansible基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。Ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是Ansible所运行的模块,Ansible只是提供一种框架,主要包括: 1. 连接插件connection plugins:负责和被监控端实现通信; 2. host inventory:指定操作的主机,是一个配置文件里面定义监控的主机; 3. 各种模块:核心模块、command模块、自定义模块; 4. 借助于插件完成记录日志邮件等功能; 5. Playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。

 

2. Ansible 基本架构

  • 核心引擎:即图中所看到的Ansible。
  • 核心模块(core module):
    模块库(module library)分为两部分,一个是核心模块,另外一个就是自定义模块(custom modules)。核心模块中都是Ansible自带的模块,Ansible模块资源分发到远程节点使其执行特定任务或匹配一个特定的状态。这些核心模块都遵循 Batteries Included 哲学。其实这里还是很有意思的,Batterires Included:Python has a large standard library, commonly cited as one of Python’s greatest strengths,providing tools suited to many tasks. 这就意味着Python有巨大的库支持你完成你想完成的任务工作。
  • 自定义模块(custom modules):
    如果Ansible无法满足你所需求的模块,那么你能使用 Ansible 添加自定义化的模块。
  • 插件(plugin):
    这里的理解就是完成较小型的任务,辅助模块来完成某个功能。
  • 剧本(playbook):
    定义需要给远程主机执行的一系列任务。比如安装一个nginx服务,可以把这拆分为几个任务放到一个playbook中。例如:第一步,需要下载nginx的安装包。第二步,将事先写好的nginx.conf的配置文件下发的目标服务器上。第三步,把服务启动起来。第四步,检查端口是否正常开启。这些步骤可以通过playbook来进行整合,然后通过inventory来下发到想要执行剧本的主机上。并且playbook也支持交互式执行playbook里面的步骤,如果有哪一个步骤执行返回了一个错误报告,可以仅仅只单独执行这个步骤。你可以把playbook理解成为一个组策略,控制管理这个OU下所有的主机行为。
  • 连接插件(connectior plugins):
    Ansible默认是基于SSH连接到目标机器上执行操作的。但是同样的Ansible支持不同的连接方法,要是这样的话就需要连接插件来完成连接了。
  • 主机清单(host inventory):
    为Ansible定义了管理主机的策略。一般小型环境下只需要在host文件中写入主机的IP地址即可,但是到了中大型环境有可能需要使用静态inventory或者动态主机清单来生成所需要执行的目标主机。

 

3. Ansible 功能特性

  1. 应用代码自动化部署

  2. 系统管理配置自动化

  3. 支持持续交付自动化

  4. 支持云计算,大数据平台环境

  5. 轻量级,无序在客户端安装agent,更新时只需在控制机上进行更行即可

  6. 批量任务执行可以写成脚本,不用分发到远程就可以执行

  7. 支持非root用户管理操作,支持sudo

  8. 使用python编写,维护更简单

 

4. Ansible 安装

1) Ubuntu

sudo apt-get install software-properties-common
sudo apt-add-repository ppa:ansible/ansible
sudo apt-get update
sudo apt-get install ansible

2) CentOS

sudo yum install epel-release
sudo yum install ansible

 

5. 总结

通过前面的介绍,可以大致了解Kubeadm、CFSSL、Ansible这三个工具的作用,由于安装 Kubernetes 集群时执行 Kubeadm 命令较为固定和繁琐,并且有些命令需要所有节点都执行,故将这些命令编写为Ansible playbooks,使用Ansible进行执行,从而提高部署效率和降低出错的概率。

一、前期准备:1、首先准备至少两台虚拟机,例如:192.168.78.128 k8s-master192.168.78.129 k8s-node其中一台作为集群管理主机,一台为 node 主机。 ...