概览

Kubernetes是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。

特点

  • 可移植: 支持公有云,私有云,混合云,多重云
  • 可扩展: 模块化, 插件化, 可挂载, 可组合
  • 自动化: 自动部署,自动重启,自动复制,自动伸缩/扩展

与传统部署对比

传统的应用部署方式是通过插件或脚本来安装应用。这样做的缺点是不利于应用的升级更新、回滚等其它一系列复杂管理操作,当然通过创建虚机来扩展功能并不利于可移植性。

使用容器

新的方式是通过部署容器方式实现。相对于虚拟机能快速部署且能在不同云、不同版本操作系统间进行迁移。

特点

  1. 快速创建部署应用:与VM虚拟机相比,容器镜像的创建更加容易。
  2. 持续开发、集成和部署:提供可靠且频繁的容器镜像构建/部署,并使用快速和简单的回滚。
  3. 开发和运行相分离:在build或者release阶段创建容器镜像,使得应用和基础设施解耦。
  4. 开发,测试和生产环境一致性:在本地或外网(生产环境)运行的一致性。
  5. 云平台或其他操作系统:可以在 Ubuntu、RHEL、 CoreOS、on-prem、Google Container Engine或其它任何环境中运行。
  6. Loosely coupled,分布式,弹性,微服务化:应用程序分为更小的、独立的部件,可以动态部署和管理。
  7. 资源隔离
  8. 资源利用:更高效

Kubernetes

主要功能

  • 存储系统挂载
  • 应用健康检测
  • 应用实例的复制
  • Pod自动伸缩扩展
  • 负载均衡
  • 资源监控
  • 日志访问
  • 调试应用程序

组件

Master组件

概览
  1. Master组件提供集群的管理控制中心。
  2. 为了简单起见,通常在一台VM机器上启动所有Master组件,并且不会在此VM机器上运行用户容器。
包含组件
  1. kube-apiserver:暴露所有资源请求接口
  2. ETCD:存储系统
  3. kube-scheduler:监视新创建没有分配到Node的Pod,为Pod选择一个Node。
  4. 容器资源监测:提供一个UI浏览监控数据。
  5. Cluster-level Logging:负责保存容器日志,搜索/查看日志。
  6. kube-controller-manager:后台线程管理器

它们是集群中处理常规任务的后台线程。逻辑上,每个控制器是一个单独的进程,但为了降低复杂性,它们都被编译成单个二进制文件,并在单个进程中运行

功能
- 节点控制器
- 路由控制器
- Service控制器
- 卷控制器

Node组件

  1. kubelet:节点代理
  2. kube-proxy:连接转发实现服务抽象
  3. docker:运行容器
  4. RKT:docker的替代方案
  5. supervisord:轻量级监控系统
  6. 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的卷,可挂载到指定位置
作用:

  1. 当容器重启时,保证磁盘文件不丢失
  2. 容器之间文件共享

Volume具有自己的生命周期,其生命周期比pod中运行的任何容器都要持久。

Node

节点
状态信息:

  • Addresses
  • Condition: 描述所有running节点状态
  • Capacity: CPU、内存和可以调度到节点上的最大pod数。
  • Info: 节点基础信息

Pod

ubernetes创建或部署的最小且最简单的基本单位,一个Pod代表集群上正在运行的一个进程。
Node结构图
Node结构图


赵栩彬
358 声望600 粉丝

愿,你在遭受打击时,记起你的珍贵,抵抗恶意;