从0到1使用Kubernetes系列(二):安装工具介绍
该系列第一篇为:《从0到1使用Kubernetes系列——Kubernetes入门》。本文是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只是提供一种框架,主要包括: 1. 连接插件connection plugins:负责和被监控端实现通信; 2. host inventory:指定操作的主机,是一个配置文件里面定义监控的主机; 3. 各种模块:核心模块、command模块、自定义模块; 4. 借助于插件完成记录日志邮件等功能; 5. 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集群,欢迎各位持续关注。
本文由猪齿鱼技术团队原创,转载请注明出处:猪齿鱼官网
从0到1使用Kubernetes系列(二):安装工具介绍的更多相关文章
- 从0到1使用Kubernetes系列(八):Kubernetes安全
本文是从 0 到 1 使用 Kubernetes 系列第八篇,上一篇从0到1使用Kubernetes系列(七):网络介绍了 K8S 网络相关的内容,本文将带你了解 K8S 的安全问题. Kuberne ...
- 从0到1使用Kubernetes系列(六):数据持久化实战
本文是从 0 到 1 使用 Kubernetes 系列第六篇,上一篇<从 0 到 1 使用 Kubernetes 系列(五):Kubernetes Scheduling>介绍了 Kuber ...
- 从0到1使用Kubernetes系列(七):网络
本文是从 0 到 1 使用 Kubernetes 系列第七篇,上一篇<从 0 到 1 使用 Kubernetes 系列(六):数据持久化实战> 介绍了 Kubernetes 中的几种常用储 ...
- Kubernetes系列之Helm介绍篇
本次系列使用的所需部署包版本都使用的目前最新的或最新稳定版,安装包地址请到公众号内回复[K8s实战]获取 介绍 Helm 是 Deis 开发的一个用于 Kubernetes 应用的包管理工具,主要用来 ...
- Kubernetes系列(二)Service
作者: LemonNan 原文地址: https://juejin.im/post/6863704173931593736 Service Kubernetes 的 Service 可以为一组具有相同 ...
- 【Kubernetes 系列二】从虚拟机讲到 Kubernetes 架构
目录 什么是虚拟机? 什么是容器? Docker Kubernetes 架构 Kubernetes 对象 基础设施抽象 在认识 Kubernetes 之前,我们需了解下容器,在了解容器之前,我们得先知 ...
- Kubernetes系列二: 使用kubeadm安装k8s环境
环境 三台主机,一台master,两台node 作为master 作为node节点 作为node节点 每台主机Centos版本使用 CentOS Linux release 7.6.1810 (Cor ...
- 从0到1使用Kubernetes系列——Kubernetes入门
基本概念 Docker 是什么 Docker 起初是 dotCloud 公司创始人 Solomon Hykes 在法国的时候发起的一项公司内部项目,Docker 是基于 dotCloud 公司多年云服 ...
- 从0到1使用Kubernetes系列(四):搭建第一个应用程序
传统Kubernetes应用搭建 创建Namespace 在一个Kubernetes集群中可以创建多个Namespace进行"环境隔离",当项目和人员众多的时候,可以考虑根据项目的 ...
随机推荐
- 测试Kaggle kernel commit 是否会删除以前的output
在kaggle上创建kernel,加入如下代码. 连续运行两次,可以看到保存的文件名字不一样,且无论运行错少次,都只有一个输出文件. 这说明,kaggle上的kernel每次commit运行,都会清空 ...
- HCNP Routing&Switching之OSPF LSA类型(二)
前文我们了解了OSPF的一类.二类.三类LSA,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15209829.html:今天我们来聊一聊OSPF的四类和五类L ...
- UOS LoongArch 上成功安装.NET Core 3.1
龙芯.NET团队正式发布了.NET Core 3.1 For LoongArch, 具体参见龙芯开源网站 http://www.loongnix.cn/index.php/Dotnet . 进入安装包 ...
- [编译] 10、kconfig 入门指导教程
目录 前言 1. 安装 kconfig 2. 克隆一个 demo 3. 运行 kconfig 4. 源码解析 4.1 选择题目设计模板 4.2 填空题目设计模板 4.3 判断题目设计模板 5. 产物解 ...
- Appium问题解决方案(9)- Original error: Failed to launch Appium Settings app: Condition unmet after 5090 ms
背景 执行代码报错 解决方法 该问题并不常见,主要是手机操作系统的问题 程序无法无法自动打开appiumsettings,那么我们可以手动打开appiumsettings服务(程序没有界面,会出现打开 ...
- 快速模式第一包: quick_outI1()
文章目录 1. 序言 2. quick_outI1()流程图 3. quick_outI1()源码分析 4. quick_outI1_continue()源码分析 5. quick_outI1_tai ...
- 【第二篇】- Maven 环境配置之Spring Cloud直播商城 b2b2c电子商务技术总结
Maven 环境配置 Maven 是一个基于 Java 的工具,所以要做的第一件事情就是安装 JDK. 如果你还未安装 JDK,可以参考我们的 Java 开发环境配置. 系统要求 项目 要求 JDK ...
- 理解MySQL回表
回表就是先通过数据库索引扫描出数据所在的行,再通过行主键id取出索引中未提供的数据,即基于非主键索引的查询需要多扫描一棵索引树. 因此,可以通过索引先查询出id字段,再通过主键id字段,查询行中的字段 ...
- 通过Wireshark抓包分析谈谈DNS域名解析的那些事儿
文/朱季谦 本文主要想通过动手实际分析一下是如何通过DNS服务器来解析域名获取对应IP地址的,毕竟,纸上得来终觉浅,绝知此事要躬行. 域名与IP地址 当在浏览器上敲下"www.baidu.c ...
- PHP的DBA扩展学习
今天我们讲的 DBA 并不是传统的数据库管理员那个 DBA ,而是一个 PHP 中的巴克利风格数据库的扩展.巴克利风格数据库其实就是我们常说的键值对形式的 K/V 数据库.就像我们平常用得非常多的 m ...