kubernetes是来自谷歌的容器自动化操作平台, 主要功能如下:
- 服务发现和负载均衡 
- 弹性扩容 
- 故障自动恢复 
- … 
一. 核心概念
基于集群的操作, 部署结构如下图:

- pod: 负载应用 
- container: 容器 
- label: 
- replication controller: 
- service: 节点上的管理程序(kubelet, kube-proxy, container runtime) 
- node: 运行节点(VM或者物理机) 
- kubernetes master: 管理节点 
核心组件:
- master: 管理节点 - apiserver: api接口服务, 面向用户 
- controller-manager: 控制器, 面向node 
- etcd: k-y存储 
- kube-scheduler: 部署调度 
 
- node: 应用承载节点 - kubelet: node管理 
- kube-proxy: 网络抽象 
- container runtime: 容器运行时环境, 如docker 
 
- addon: 扩展插件 - dns 
- web ui 
- container resource monitoring 
- cluster level logging 
 
1.1 节点
节点状态:
- Addresses - HostName: 主机名 
- ExternalIP: 外网ip 
- InternalIP: 内网ip 
 
- Condition: 运行节点的状态 - OutOfDisk: 是否有空间运行新的pod 
- Ready: 节点状态是否健康 
- MemoryPressure: 内存压力 
- PIDPressure: 进程数压力 
- DiskPressure: 硬盘压力 
- NetworkUnavailable: 网络状态 
 
- Capacity: 节点资源()CPU, 内存, 最大pods数) 
- Info: 一般信息(内核版本, k8s版本, Docker版本等) 
节点管理:
二. 对象
对象是kubernetes系统中的实体. k8s用其标识cluster状态, 包括:
- 跑了什么应用 
- 有什么资源 
- 应用运行的策略 
期望状态: 用户为k8s描述的负载状态
Spec 和 Status
每个k8s对象包含两个配置: spec和status. spec描述的是期望状态, status描述的是实际状态. k8s会尽量让对象的实际状态接近期望状态.
k8s通过yaml文件描述对象信息. yaml要包含的域包括:
- apiVersion: api版本 
- kind: 类型 
- metadata: 元数据, 如name, namespace - name: 对象的唯一标识, 名字不能重复 
- namespace: 一个物理集群可以包含多个虚拟集群(virtual clusters), namespace是虚拟集群的标识 - virtual clusters: 用于分配多个用户之间的资源
 
- labels: 同一个命名空间中区分应用版本的标识 - labels是一系列键值对 
- labels对于对象并没有语法上的含义 
- 对于每个对象, key必须是唯一的 
- 可以通过 label selectors 进行批量访问 
 
- annotations: 注释, 跟label格式相同, 但不能用来过滤对象 
 
- spec: 期望状态 
类型
k8s对象主要有以下类型:
- workload(负载) - Container 
- CronJob 
- DaemonSet 
- Deployment 
- Job 
- Pod 
- ReplicaSet 
- ReplicationController 
- StatefulSet 
 
- service(服务) - Endpoints 
- Ingress 
- Service 
 
- config(配置) - ConfigMap 
- … 
 
- storage(存储) - …
 
- metadata(元数据) 
- cluster(集群) 
使用kubectl进行对象管理
共有三种管理方法:
- 命令行 - 直接将配置信息写到命令中 
- 每次可以作用在多个对象 
 
- 命令式配置文件 - 将配置信息写到配置文件中 
- 每次可以作用在1个对象 
 
- 声明式配置文件 - 将配置信息写成文件夹 
- 每次可以作用在多个对象 
 
1. 命令行
创建命令:
- run: 创建Deployment, 用于在pod上运行container 
- expose: 创建Service, 用于在pod间负载均衡 
- autoscale: 创建Autoscaler来为控制器水平扩容 
- create: 创建指定类型对象 
更新命令:
- scale: 水平扩容或缩容 
- annotate: 增加或删除注释 
- label: 增加或删除标签 
- set: 增加切面 
- edit: 编辑配置文件 
- patch: 直接动态修改对象配置 
删除命令:
- delete
查看命令:
- get: 查看对象信息 
- describe: 查看详情 
- logs: 打印stdout和stderr 
 
                         
                                

