三大主流的调度系统
- Docker Swarm
Docker
公司的容器编排系统,使用的是标准的Docker API
- 每个主机运行一个
Docker Swarm
代理,一个主机运行一个Docker Swarm
管理者 - 管理者负责指挥和调度主机上的容器
- 使用的标准的
Dokcer
接口
- kubernets
- kubernets是自成体系的管理者工具,可以实现容器调度、资源管理、服务发现等
- 容器集群管理系统,用于管理云平台上多个主机上容器的应用
- 提供了应用部署、规划、更新、维护的一整套机制
- 没有固定的容器格式,使用自己的
API
和命令行窗口CLI
进行容器编排 - 支持除了
Docker
的其他容器,比如:rkt
- 使用自己的
API
,命令系统是另一套系统
- Apache Mesos
- 分布式系统内核的开源集群管理器
- 出现早于上面两种方案,开源同时使用其他框架来支持容器化和非容器化的工作负载
- 能够扩展到上千个节点,现代化可扩展型的数据处理应用都可以在
Mesos
上运行,包含Hadoop、Kafka、Spark
等
Mesos优缺点
十分钟带你理解Kubernetes核心概念
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
。
//第一次在服务器上使用安装Docker,需要先安装仓库
sudo apt-get update
sudo apt-get install
apt-transport-https
ca-certificates
curl
gnupg-agent
software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
sudo add-apt-repository
"deb [arch=amd64] https://download.docker.com/linux/ubuntu
$(lsb_release -cs)
stable"test # test和nightly至少要填写一个在stable后面
// 安装Docker-CE版本
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
安装Minikube
MiniKube
是使用Go
语言开发的,两种方式安装:
- 通过下载基于不同平台早已编译好的二级制文件安装
- 通过编译源文件安装
# 下载v0.24.1版本
> curl -Lo minikube https://storage.googleapis.com/minikube/releases/v0.24.1/minikube-linux-amd64 && chmod x minikube && sudo mv minikube /usr/local/bin/
# 下载最新版
> curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && chmod x minikube && sudo mv minikube /usr/local/bin/
> minikube -h
安装Kubectl
Kubectl简介
k8s
通过kube-apiserver
作为整个集群管理的入口。用户可以通过kubectl
以命令行的方式同集群进行交互,它是K8s
中非常常用的工具。
Kubernetes之kubectl命令行工具简介、安装配置及常用命令
kubectl命令记录
Kubernetes之kubectl常用命令
Apiserver
是整个集群的主管理节点,用户通过Apiserver配置和组织集群,- 同时集群中各个节点同
etcd
存储的交互也是通过Apiserver
进行交互。 Apiserver
实现了一套RESTfull
的接口,用户可以直接使用API
同Apiserver
交互。- 官方提供了一个客户端
kubectl
随工具集打包,用于可直接通过kubectl
以命令行的方式同集群交互。
安装命令
代码语言:javascript复制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常用命令
代码语言:javascript复制1.显示所有pod
kubectl get po # 获取当前运行的所有pods的信息
kubectl get po -o wide # 获取pod运行在哪个节点上的信息
2.显示所有rc
kubectl get rc
3.显示所有service
kubectl get service
4.删除rc
kubectl delete rc rcname
5.删除service
kubectl delete service servicename
6.删除pod
kubectl delete pod podname
7.查看pod描述
kubectl describe pod podname # 可以查看错误
8.删除所有
kubectl delete pod –all
9.获取所有的namespacesvcnodes
kubectl get namespacesvcnodes # 获取相关信息
kubectl get svc -all –all-namespaces
kubectl delete svc -all –all-namespaces
kubectl get limitrange –all-namespaces
kubectl delete limitrange inf-limit –namespace=inf