Kubernetes是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。
通过Kubernetes你可以:
快速部署应用
快速扩展应用
无缝对接新的应用功能
节省资源,优化硬件资源的使用
我们的目标是促进完善组件和工具的生态系统,以减轻应用程序在公有云或私有云中运行的负担。
Kubernetes 特点
可移植: 支持公有云,私有云,混合云,多重云(multi-cloud)
可扩展: 模块化, 插件化, 可挂载, 可组合
自动化: 自动部署,自动重启,自动复制,自动伸缩/扩展
一、基本概念
1.Master
Master指的是集群控制节点,负责整个集群的管理和控制。
基本上Kubernetes所有的控制命令都是发给它。
Master节点运行着以下一组关键进程:
Kubernets API Server (kube-apiserver) 提供了HTTP Rest接口的关键业务进程,
是Kubernetes里所有资源的增、删、改、查等操作的唯一入口,也是集群控制的入口进程。
Kubernetes Controller Manager(Kube-controller-manager),Kubernets里所有资源对象的自动化控制中心,可理解为资源对象的“大总管”。
Kubernetes Scheduler(Kube-scheduler) 负责资源调度(Pod调度)的进程,相当于公交公司的“调度室”
Etcd Server进程,Kubernetes里的所有资源对象的数据全部保存在etcd中。
2.Node
Kubernetes集群的其他机器被称为Node节点.Node节点是工作负载节点。
当某个Node宕机时,其上的工作负载会被Master自动转移到其他节点上。
Node节点运行的一组关键进程:
kubelet: 负责Pod对应的容器的创建、启停等任务,同时与Master节点密切协作,
实现集群管理的基本功能。
kubelet会向Master注册自己。kubelet进程就会向Master节点汇报自身的情况,例如操作系统、Docker版本、机器的CPU和内存情况,以及之前有哪些Pod在运行。
kubelet-proxy: 实现Kubernetes Service的通信与负载均衡机制的重要组件
Docker Engineer: Docker引擎,负责本机的容器创建和管理工作。
#kubelet get nodes #查看集群有多少个Node
NAME STATUS AGE
#kubelet describe node kubernetes-minion1 #查看某个Node的详细信息
3.Pod
Pod 是 Kubernetes 部署应用或服务的最小的基本单位。
一个 Pod 封装多个应用容器(也可以只有一个容器)、存储资源、一个独立的网络 IP 以及管理控制容器运行方式的策略选项。
Pod是容器单元,由Pause容器和一个或多个紧密相关的用户业务容器组成。
Pod被分配唯一的IP。Kubernetes采用flannel、Openvswitch二层虚拟网络技术来实现任意两个Pod之间的TCP/IP通信。
4.Label 标签 有版本(release)、环境-env、架构--tier、分区--partition、质量管控(track)等标签
5.Replication Controller 副本控制器
定义了一个期望的场景。即声明某种Pod的副本数量在任意时刻都符合某个预期值。RC定义了以下几部分:
Pod期待的副本数(replicas)
用于筛选目标Pod的Label Selector
当Pod的副本数据小于预期数量时,用于创建新Pod的Pod模板(template)
6.Deployment 部署
6.1 副本集(Replica Set,RS)
ReplicaSet(RS)是 RC 的升级版本,唯一区别是对选择器的支持,RS 能支持更多种类的匹配模式。副本集对象一般不单独使用,而是作为 Deployment 的理想状态参数使用
6.2 K8s 1.2新引入的概念。它使用了Replica Set副本集来实现,RC的升级,它可随时知道当前Pod“部署”的进度
部署表示用户对 Kubernetes 集群的一次更新操作。
部署比 RS 应用更广,可以是创建一个新的服务,更新一个新的服务,也可以是滚动升级一个服务。
滚动升级一个服务,实际是创建一个新的 RS,然后逐渐将新 RS 中副本数增加到理想状态,将旧 RS 中的副本数减小到 0 的复合操作;
这样一个复合操作用一个 RS 是不太好描述的,所以用一个更通用的 Deployment 来描述。不建议您手动管理利用 Deployment 创建的 RS。
7.Horizontal Pod Autoscaler(HPA) Pod横向自动扩容
8.Service(服务)
Service 也是 Kubernetes 的基本操作单元,是真实应用服务的抽象,
每一个服务后面都有很多对应的容器来提供支持,
通过 Kube-Proxy 的 port 和服务 selector 决定服务请求传递给后端的容器,
对外表现为一个单一访问接口,外部不需要了解后端如何运行,这给扩展或维护后端带来很大的好处。
微服务
定义Service时使用NodePort来提供给k8s集群外部的应用或用户来使用。
NodePort的实现方式是在K8s集群里的每个Node上为需要外部访问的Service开启一个对应的TCP监听端口。
外部系统只要用任意一个Node的IP地址+具体的NodePort端口号即可访问此服务。
9.Volume(存储卷)
Volume是Pod中能够被多个容器访问的共享目录。
Kubernetes 集群中的存储卷跟 Docker 的存储卷有些类似,只不过 Docker 的存储卷作用范围为一个容器,
而 Kubernetes 的存储卷的生命周期和作用范围是一个 Pod。
每个 Pod 中声明的存储卷由 Pod 中的所有容器共享。
支持使用 Persistent Volume Claim 即 PVC 这种逻辑存储,使用者可以忽略后台的实际存储技术,
具体关于 Persistent Volumn(pv)的配置由存储管理员来配置。
Volume类型
1.emptyDir
2.hostPath
3.gcePersistentDisk 永久磁盘
4.awsElasticBlockStore 亚马逊云存储卷
5.NFS
10.Persistent Volume 网络存储 持久存储卷
11.Namespace(命名空间)
用来实现多租户的资源隔离
命名空间为 Kubernetes 集群提供虚拟的隔离作用。
Kubernetes 集群初始有 3 个命名空间,分别是默认命名空间 default、系统命名空间 kube-system 和 kube-public ,
除此以外,管理员可以创建新的命名空间以满足需求。
$kubectl get namespace
12.Annotation(注解)
记录的信息如下:
build信息、release Docker镜像信息等
日志库、监控库、分析库等资源库的地址信息
程序调试工具信息
团队的联系信息
13.持久存储卷(Persistent Volume,PV)和持久存储卷声明(Persistent Volume Claim,PVC)
PV 和 PVC 使得 Kubernetes 集群具备了存储的逻辑抽象能力,使得在配置 Pod 的逻辑里可以忽略对实际后台存储技术的配置,
而把这项配置的工作交给 PV 的配置者。存储的 PV 和 PVC 的这种关系,跟计算的 Node 和 Pod 的关系是非常类似的;
PV 和 Node 是资源的提供者,根据集群的基础设施变化而变化,由 Kubernetes 集群管理员配置;
而 PVC 和 Pod是资源的使用者,根据业务服务的需求变化而变化,由 Kubernetes 集群的使用者即服务的管理员来配置。
14.Ingress
Ingress 是授权入站连接到达集群服务的规则集合。
你可以通过 Ingress 配置提供外部可访问的 URL、负载均衡、SSL、基于名称的虚拟主机等。
用户通过 POST Ingress 资源到 API server 的方式来请求 Ingress。
Ingress controller 负责实现 Ingress,通常使用负载均衡器,它还可以配置边界路由和其他前端,这有助于以 HA 方式处理流量。
容器服务ACK 原生Kubernetes
集群 Cluster
节点 Node
容器 Container
镜像 Image
命名空间 Namespace
无状态 Deployment
有状态 StatefulSet
任务 Job
定时任务 CronJob
服务 Service
路由 Ingress
标签 Label
配置项 Configmap
保密字典 Secret
存储卷 PersistentVolume
存储声明 PersistentVolumeClaim
水平弹性伸缩 HPA
虚拟集群IP Cluster IP
节点端口 NodePort
负载均衡 LoadBalancer
节点亲和性 NodeAffinity
应用亲和性 PodAffinity
应用非亲和性 PodAntiAffinity
选择器 LabelSelector
注解 Annotation
触发器 Webhook
端点 Endpoint
资源配额 Resource Quota
资源限制 Limit Range
模板 Template