概览
Kubernetes是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。
特点
- 可移植: 支持公有云,私有云,混合云,多重云
- 可扩展: 模块化, 插件化, 可挂载, 可组合
- 自动化: 自动部署,自动重启,自动复制,自动伸缩/扩展
传统的应用部署方式是通过插件或脚本来安装应用。这样做的缺点是不利于应用的升级更新、回滚等其它一系列复杂管理操作,当然通过创建虚机来扩展功能并不利于可移植性。
使用容器
新的方式是通过部署容器方式实现。相对于虚拟机能快速部署且能在不同云、不同版本操作系统间进行迁移。
特点
- 快速创建部署应用:与VM虚拟机相比,容器镜像的创建更加容易。
- 持续开发、集成和部署:提供可靠且频繁的容器镜像构建/部署,并使用快速和简单的回滚。
- 开发和运行相分离:在build或者release阶段创建容器镜像,使得应用和基础设施解耦。
- 开发,测试和生产环境一致性:在本地或外网(生产环境)运行的一致性。
- 云平台或其他操作系统:可以在 Ubuntu、RHEL、 CoreOS、on-prem、Google Container Engine或其它任何环境中运行。
- Loosely coupled,分布式,弹性,微服务化:应用程序分为更小的、独立的部件,可以动态部署和管理。
- 资源隔离
- 资源利用:更高效
Kubernetes
主要功能
- 存储系统挂载
- 应用健康检测
- 应用实例的复制
- Pod自动伸缩扩展
- 负载均衡
- 资源监控
- 日志访问
- 调试应用程序
组件
Master组件
概览
- Master组件提供集群的管理控制中心。
- 为了简单起见,通常在一台VM机器上启动所有Master组件,并且不会在此VM机器上运行用户容器。
包含组件
- kube-apiserver:暴露所有资源请求接口
- ETCD:存储系统
- kube-scheduler:监视新创建没有分配到Node的Pod,为Pod选择一个Node。
- 容器资源监测:提供一个UI浏览监控数据。
- Cluster-level Logging:负责保存容器日志,搜索/查看日志。
- kube-controller-manager:后台线程管理器
它们是集群中处理常规任务的后台线程。逻辑上,每个控制器是一个单独的进程,但为了降低复杂性,它们都被编译成单个二进制文件,并在单个进程中运行。
功能
- 节点控制器
- 路由控制器
- Service控制器
- 卷控制器
Node组件
- kubelet:节点代理
- kube-proxy:连接转发实现服务抽象
- docker:运行容器
- RKT:docker的替代方案
- supervisord:轻量级监控系统
- fluentd:守护进程,提供cluster-level logging
Kubernetes对象
Kubernetes对象是Kubernetes系统中的持久化实体,用于记录容器化正在运行的状况、应用可用的资源、应用的运行策略等。可以用Kubernetes API管理。
数据结构
- Object Spec: 描述了对象所需的状态,比如希望启动3个Pod
- Object Status: 描述了对象的实际状态,比如实际也启动了3个Pod
yaml文件结构
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
字段解释
- apiVersion: 创建对象的Kubernetes API 版本
- kind: 要创建什么样的对象
- metadata: 具有唯一标示对象的数据,包括 name(字符串)、UID和Namespace(可选项)
Namespaces的使用
用于划分资源管理空间,不同空间具有不同的用途。对于稍有不同用途的资源没必要区分。
使用 kubectl命令可以直接创建
创建
$ kubectl create namespace new-namespace
删除
$ kubectl delete namespaces new-namespace
查看
$ kubectl get namespaces
Labels 和 Selectors
label:label其实是一对 key/value。
labels Selectors:标签选择器。通过标签选择器,客户端/用户 能方便辨识出一组对象。
Annotations
Annotations不用于标识和选择对象。可以将一些其它的元数据放入Annotations,其也是Key/Value格式
"annotations": {
"key1" : "value1",
"key2" : "value2"
}
Volume
存在于pod的卷,可挂载到指定位置
作用:
- 当容器重启时,保证磁盘文件不丢失
- 容器之间文件共享
Volume具有自己的生命周期,其生命周期比pod中运行的任何容器都要持久。
Node
节点
状态信息:
- Addresses
- Condition: 描述所有running节点状态
- Capacity: CPU、内存和可以调度到节点上的最大pod数。
- Info: 节点基础信息
Pod
ubernetes创建或部署的最小且最简单的基本单位,一个Pod代表集群上正在运行的一个进程。
Node结构图
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。