本文是 Kubernetes 系列的第二篇, 将介绍使用 Kubeadm+Ansible 搭建 Kubernetes 集群所需要的工具及其作用.
主要内容包括:
Kubeadm
Kubeadm 是什么
Kubeadm 的目标
Kubeadm 的子命令
Kubeadm 的安装
CFSSL
CFSSL 的安装
Ansible
Ansible 是什么
Ansible 的基本架构
Ansible 功能特性
Ansible 的安装
总结 user-gold-cdn
Kubeadm
Kubeadm 是什么
Kubeadm 是一个提供 Kubeadm init 和 Kubeadm join 命令, 用于创建 Kubernetes 集群的最佳实践 "快速路径" 工具.
Kubeadm 可以在多种设备上运行, 可以是 Linux 笔记本电脑, 虚拟机, 物理 / 云服务器或 Raspberry Pi. 这使得 Kubeadm 非常适合与不同种类的配置系统 (例如 Terraform,Ansible 等) 集成.
开发者可以在支持安装 deb 或 rpm 软件包的操作系统上非常轻松地安装 Kubeadm.SIG 集群生命周期 SIG Cluster Lifecycle Kubeadm 的 SIG 相关维护者提供了预编译的这些软件包, 也可以在其他操作系统上使用.
Kubeadm 的目标
Kubeadm 的目标是在不安装其他功能插件的基础上, 建立一个通过 Kubernetes 一致性测试 Kubernetes Conformance tests 的最小可行集群. 它在设计上并不会安装网络解决方案, 而是需要用户自行安装第三方符合 CNI 的网络解决方案(如: flannel,calico,weave network 等).
Kubeadm 的子任务
kubeadm init 初始化 Kubernetes 主节点
kubeadm join 初始化 Kubernetes 工作节点并将其加入群集
kubeadm upgrade 将 Kubernetes 集群升级到更新版本
kubeadm token 用于管理 Kubeadm join 所使用的令牌
kubeadm reset 恢复由 Kubeadm init 或 Kubeadm join 对此主机所做的任何更改
kubeadm version 版本打印 Kubeadm 版本
Kubeadm 的安装
安装 Kubeadm 需要手动安装 Kubelet 和 Kubectl, 因为 Kubeadm 是不会安装和管理这两个组件的.
Kubelet: 在群集中的所有计算机上运行的组件, 并执行诸如启动 pod 和容器之类的操作.
Kubectl: 操作群集的命令行工具.
▌Ubuntu
- apt-get update && apt-get install -y apt-transport-https curl
- curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
- cat <<EOF>/etc/apt/sources.list.d/kubernetes.list
- deb http://apt.kubernetes.io/ kubernetes-xenial main
- EOF
- apt-get update
- apt-get install -y kubelet kubeadm kubectl
- apt-mark hold kubelet kubeadm kubectl
▌CentOS
- cat <<EOF> /etc/yum.repos.d/kubernetes.repo
- [kubernetes]
- name=Kubernetes
- baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
- enabled=1
- gpgcheck=1
- repo_gpgcheck=1
- gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
- exclude=kube*
- EOF
- setenforce 0
- yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
- systemctl enable kubelet && systemctl start kubelet
CFSSL
CFSSL 是 CloudFlare 开源的一款 PKI/TLS 工具. 它既是命令行工具, 也是用于签名, 验证和捆绑 TLS 证书的 HTTP API 服务器.
CFSSL 包括:
一组用于生成自定义 TLS PKI 的工具
cfssl, 即 CFSSL 的命令行工具
multirootca 是可以使用多个签名密钥的证书颁发服务器
kbundle 用于构建证书池
cfssljson 从 cfssl 和 multirootca 中获取 JSON 输出, 并将证书, 密钥, CSR 和 bundle 写入磁盘
PKI 借助数字证书和公钥加密技术提供可信任的网络身份, 通常, 证书就是一个包含如下身份信息的文件:
证书所有组织的信息
公钥
证书颁发组织的信息
证书颁发组织授予的权限, 如: 证书有效期, 适用的主机名, 用途等
使用证书颁发组织私钥创建的数字签名
CFSSL 的安装
由于运行环境不同, 故使用 Go 命令进行编译安装, 在安装之前请确保已安装 1.8 版本以上的 Go 命令行以及配置了环境变量 GOPATH.
go get -u GitHub.com/cloudflare/cfssl/cmd/...
Ansible
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 只是提供一种框架, 主要包括:
连接插件 connection plugins: 负责和被监控端实现通信;
host inventory: 指定操作的主机, 是一个配置文件里面定义监控的主机;
各种模块: 核心模块, command 模块, 自定义模块;
借助于插件完成记录日志邮件等功能;
Playbook: 剧本执行多个任务时, 非必需可以让节点一次性运行多个任务.
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 或者动态主机清单来生成所需要执行的目标主机.
Ansible 的功能特性
应用代码自动化部署
系统管理配置自动化
支持持续交付自动化
支持云计算, 大数据平台环境
轻量级, 无序在客户端安装 agent, 更新时只需在控制机上进行更行即可
批量任务执行可以写成脚本, 不用分发到远程就可以执行
支持非 root 用户管理操作, 支持 sudo
使用 python 编写, 维护更简单
Ansible 的安装
▌Ubuntu
- sudo apt-get install software-properties-common
- sudo apt-add-repository ppa:ansible/ansible
- sudo apt-get update
- sudo apt-get install ansible
▌CentOS
- sudo yum install epel-release
- sudo yum install ansible
总结
通过前面的介绍, 可以大致了解 Kubeadm,CFSSL,Ansible 这三个工具的作用, 由于安装 Kubernetes 集群时执行 Kubeadm 命令较为固定和繁琐, 并且有些命令需要所有节点都执行, 故将这些命令编写为 Ansible playbooks, 使用 Ansible 进行执行, 从而提高部署效率和降低出错的概率.
该系列第一篇为:《从 0 到 1 使用 Kubernetes 系列 --Kubernetes 入门》, 下一篇将介绍如何使用 Ansible 快速安装 Kubernetes 集群, 欢迎各位持续关注.
关于 Choerodon 猪齿鱼
Choerodon 猪齿鱼 http://choerodon.io 是一个开源企业服务平台, 是基于 Kubernetes 的容器编排和管理能力, 整合 DevOps 工具链, 微服务和移动应用框架, 来帮助企业实现敏捷化的应用交付和自动化的运营管理的开源平台, 同时提供 IoT, 支付, 数据, 智能洞察, 企业应用市场等业务组件, 致力帮助企业聚焦于业务, 加速数字化转型.
大家可以通过以下社区途径了解猪齿鱼的最新动态, 产品特性, 以及参与社区贡献:
来源: https://juejin.im/post/5b9f1bb0e51d450ea401c774