三大主流的调度系统
-
Docker Swarm
Docker
公司的容器编排系统,使用的是标准的Docker API
- 每个主机运行一个
Docker Swarm
代理,一个主机运行一个Docker Swarm
管理者 - 管理者负责指挥和调度主机上的容器
- 使用的标准的
Dokcer
接口
-
kubernets
- kubernets是自成体系的管理者工具,可以实现容器调度、资源管理、服务发现等
- 容器集群管理系统,用于管理云平台上多个主机上容器的应用
- 提供了应用部署、规划、更新、维护的一整套机制
- 没有固定的容器格式,使用自己的
API
和命令行窗口CLI
进行容器编排 - 支持除了
Docker
的其他容器,比如:rkt
- 使用自己的
API
,命令系统是另一套系统
-
Apache Mesos
-
分布式系统内核的开源集群管理器
-
出现早于上面两种方案,开源同时使用其他框架来支持容器化和非容器化的工作负载
-
能够扩展到上千个节点,现代化可扩展型的数据处理应用都可以在
Mesos
上运行,包含Hadoop、Kafka、Spark
等
-
k8s简介
Kubernetes
是Google
开源的一个容器集群管理系统,用于管理云平台中多个主机上的容器化的应用。Kubernetes
的目标是让部署容器化的应用简单并且高效(powerful,Kubernetes
提供了应用部署,规划,更新,维护的一种机制。
Kubernetes
是为生产环境而设计的容器调度管理系统Kubernetes
集群的组成部分- 分布式存储
etcd
:保存集群的状态 - 服务节点
Minion,etcd
现在称为Node
:运行应用容器的主机节点,在每个Minion节点上都会运行一个Kubelet代理,控制该节点上的容器、镜像和存储卷等。 - 控制节点
Master
:运行节点的管理控制模块
- 分布式存储
k8s组件
-
Cluster
: 集群是指由k8s
使用一系列的物理机、虚拟机和其他基础资源来运行用户的应用程序
。 -
Node
: 一个node
就是一个运行着k8s
的物理机或虚拟机
,并且pod
可以在其上面被调度。 -
Pod : 一个
pod
对应一个由相关容器和卷组成的容器组
。 -
Label
: 一个label
是一个被附加到资源上的键/值对
,譬如附加到一个Pod上,为它传递一个用户自定的并且可识别的属性。Label
还可以被应用来组织和选择子网中的资源。 -
selector
:是一个通过匹配labels
来定义资源之间的关系表达式
,例如为一个负载均衡的service
指定所目标Pod
。 -
Replication Controller
: replication controller 是为了保证一定数量被指定的Pod的复制品在任何时间都能正常工作,相当于是应用控制管理器。它不仅允许复制的系统易于扩展,还会处理当pod在机器在重启或发生故障的时候再次创建一个- 保证pod在任何时间正常运行
- pod发生故障或者重启时候能够进行重建
-
Service
: 一个service定义了访问pod的方式
,就像单个固定的IP地址和与其相对应的DNS名之间的关系。 -
Volume
: 一个volume是一个目录,可能会被容器作为未见系统的一部分来访问。Kubernetes volume 构建在Docker Volumes
之上,并且支持添加和配置volume
目录或者其他存储设备。 -
Secret
: Secret 存储了敏感数据
,例如能允许容器接收请求的权限令牌
。 -
Name
: 用户为Kubernetes中资源定义的名字,即资源的名字。 -
Namespace
: Namespace 好比一个资源名字的前缀
。它帮助不同的项目、团队或是客户可以共享cluster
,例如防止相互独立的团队间出现命名冲突。 -
Annotation
: 相对于label来说可以容纳更大的键值对
,为了存储不可识别的辅助数据,尤其是一些被工具或系统扩展用来操作的数据。
安装Docker
个人用户安装Docker,参考Docker官网,选择安装社区版CE
。
1 | //第一次在服务器上使用安装Docker,需要先安装仓库 |
安装Minikube
MiniKube
是使用Go
语言开发的,两种方式安装:
- 通过下载基于不同平台早已编译好的二级制文件安装
- 通过编译源文件安装
1 | 下载v0.24.1版本 |
安装Kubectl
Kubectl简介
k8s
通过kube-apiserver
作为整个集群管理的入口。用户可以通过kubectl
以命令行的方式同集群进行交互,它是K8s
中非常常用的工具。
Kubernetes之kubectl命令行工具简介、安装配置及常用命令
Apiserver
是整个集群的主管理节点,用户通过Apiserver配置和组织集群,- 同时集群中各个节点同
etcd
存储的交互也是通过Apiserver
进行交互。 Apiserver
实现了一套RESTfull
的接口,用户可以直接使用API
同Apiserver
交互。- 官方提供了一个客户端
kubectl
随工具集打包,用于可直接通过kubectl
以命令行的方式同集群交互。
安装命令
1 | curl -Lo kubectl https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/ |
Kubectl常用命令
1 | 1.显示所有pod |