一、概念
kubernetes是基于容器技术的分布式架构领先方案,是一个编排容器的工具。其实也是一个管理应用的全生命周期的工具。
架构:
二、基础概念
1.Master
k8s集群的“大脑”,是集群的控制节点,负责整个集群的管理和控制,基本上接受k8s的所有控制命令,master负责具体的执行过程。
运行在master上的组件:
(1)Kubernetes API Server(kube-apiserver)Kubernetes API,集群的统一入口,各组件协调者,以HTTP API提供接口服务,Kubernetes里所有资源的增删改查和监听操作都交给APIServer处理后再提交给Etcd存储。
(2)Kubernetes Controller Manager(kube-controller-manager)Kubernetes里所有资源对象的自动化控制中心,可以理解为资源对象的大总管。
(3)kube-scheduler负责资源调度(Pod调度)的进程。
2.Node
具体“干活的”,工作负载节点,在Kubernetes集群中除了master节点外的机器被称为Node。每个Node都会被Master分配一些工作负载(Docker容器),当某个Node宕机时,其上的工作负载会被Master自动转移到其他Node节点上。
运行在Node上的组件:
(1)kubeletkubelet是Master在Node节点上的Agent,管理本机运行容器的生命周期,负责Pod对应容器的创建、启停等任务。同时与Master密切协作,实现集群管理的基本功能,获取Node节点上Pod的运行状态等
(2)kube-proxy在Node节点上实现Pod网络代理,实现Kubernetes Service的通信和负载均衡机制的重要组件。
(3)dockerDocker引擎,负责本机的容器的创建和管理工作。
3.Etcd
Etcd是Kubernetes提供默认的存储系统,保存所有集群数据,使用时需要为Etcd数据提供备份计划。Etcd是一个高可用的键值存储系统。
4.Replication Controller
简称RC,RC是Kubernetes系统中的核心概念之一。它能够保证Pod持续运行,并且在任何时候都有指定数量的Pod副本,在此基础上提供一些高级特性,比如滚动升级和弹性伸缩。
5.ReplicaSet
ReplicaSet 实现了 Pod 的多副本管理。使用 Deployment 时会自动创建 ReplicaSet,也就是说 Deployment 是通过 ReplicaSet 来管理 Pod 的多个副本,所以我们通常不需要直接使用 ReplicaSet。
6.Deployment
应用管理者,是用于部署应用的对象,Deployment内部使用了Replica Set来实现的,我们可以把Deployment看做RC的一次升级。
7.Pod
Pod 是一组容器(当然也可以只有一个)容器本身就是一个小盒子了,Pod 相当于在容器上又包了一层小盒子。Pod是K8s的最小调度单位。
8.Service
Service是一组逻辑pod的抽象,为一组pod提供统一入口,用户只需与service打交道,service提供DNS解析名称,负责追踪pod动态变化并更新转发表,通过负载均衡算法最终将流量转发到后端的pod。Kubernetes里的每个Service其实也可以理解为我们的微服务架构中的一个微服务。
Service对外提供多种入口:
(1)ClusterIPService在集群内的唯一ip地址,虚拟的IP,只能在 Kubernetes集群里访问。通过ClusterIP,负载均衡的访问后端的Pod。
(2)NodeIP+NodePortService会在集群的每个Node上都启动一个端口,通过NodeIP:NodePort访问后端的Pod。
9.Label
标签,一个Label是一个key=value的键值对。Label可以被附加到各种资源对象上,例如Node、Pod、Service、RC等,一个资源对象可以定义任意数量的Label。
10.Volume
Volume(存储卷)Volume是Pod中能够被多个容器共享的磁盘目录。我们知道,默认情况下Docker容器中的数据都是非持久化的,在容器消亡后数据也会消失。因此Docker提供了Volume机制以便实现数据的持久化。Kubernetes中Volume的概念与Docker中的Volume类似,但不完全相同。
Kubernetes提供了非常丰富的Volume类型:
(1)emptyDir临时空间,Pod分配到Node时创建,无须指定宿主主机上对应的目录,在Kubernetes会自动分配当前Node的一个目录,当Pod被移除时,emptyDir中的数据也会永久删除。
(2)hostPath为Pod挂载宿主主机上的文件或目录。用于数据永久保存。在不同的Node上具有相同配置的Pod,可能会因为宿主机上的目录和文件不同而导致Volume上的目录和文件的访问结果不一致。
(3)gcePersistentDisk使用谷歌公有云提供的永久磁盘。数据永久保存。
(4)NFSNFS 是 Network File System 的缩写,即网络文件系统。K8s 中通过简单地配置就可以挂载 NFS 到 Pod 中,而 NFS 中的数据是可以永久保存的,同时 NFS 支持同时写操作。
11.Namespace
命名空间,Namespace在很多情况下用于实现多租户的资源隔离。Namespace通过集群内部的资源对象"分配"到不同的Namespace中,形成逻辑上纷纷组的不同项目,便于不同的分组共享使用整个集群的资源的同时还能被分别管理。
12.ConfigMap
ConfigMap顾名思义,是用于保存配置数据的键值对,可以用来保存单个属性,也可以保存配置文件。就是为了让镜像和配置文件解耦,以便实现镜像的可移植性和可复用性,因为一个ConfigMap其实就是一系列配置信息的集合,将来可直接注入到Pod中的容器使用,而注入方式有两种,一种将configMap做为存储卷,一种是将configMap通过env中configMapKeyRef注入到容器中。
三、K8S特点
1.可移植
支持公有云,私有云,混合云,多重云。
2.可扩展
模块化,插件化,可挂载,可组合。
3.自动化
自动部署,自动重启,自动复制,自动伸缩/扩展。
四、K8S的结构
五、生命周期管理
k8s进行管理应用的基本步骤:创建集群,部署用用,发布应用,扩展应用,更行应用。
1.创建集群
(1)创建
- kubectl init 进行初始化,创建一个master节点
- kebectl join xxx 创建一个node节点,加入集群
(2)创建集群的好处
- 统一对外提供接口,无须进行各种复杂的调用;
- 提供更好的可靠性,服务器宕机那么频繁,物理磁盘那么容易损坏,无须担心,集群统一进行调配;
- 提供更好的性能,组合集群中各个机器的计算存储网络资源,提供更好的TPS和PS;
- 提供横向扩容的能力,在进行横向扩容的时候,性能基本上能呈线性增长。
(3)两种主机
- master节点
-
- 主要用来调度,控制集群的资源等功能;
- 用来存储各种元数据。
- node节点
-
- 主要用来运行容器的节点,也就是运行服务的节点;
- 是一个工作节点,真正来干活的。
(4)查看信息
- kubectl get nodes -o wide
- kubectl cluster-info
2.部署应用
(1)目的
- 主要用来调度,控制集群的资源等功能;
- 用来存储各种元数据。
- 主要用来运行容器的节点,也就是运行服务的节点;
- 是一个工作节点,真正来干活的。
用来提供服务,让开发开发的应用程序能在集群上运行,从而需要让开发能运行一个应用来进行测试。
(2)运行kubectl run kel --image=nginx:1.7.9 --port=80(一条指令就能运行一个服务)
3.发布应用
发布应用主要就是对外提供服务。 服务主要是用来提供外界访问的接口,服务可以关联一组pod,这些pod的ip地址各不相同,而service相当于一个复杂均衡的vip,用来指向各个pod,当pod的ip地址发生改变之后,也能做到自动进行负载均衡,在关联的时候,service和pod之间主要通过label来关联,也就是标签(-l表示为label)。
4.扩展应用
横向扩展的能力。只要有一个pod,那么就可以产生无数个pod。
5.更新应用
滚动更新。根据新的image创建一个pod,分配各种资源,然后自动负载均衡,删除老的pod,然后继续更新。不会中断服务。
注:参考文档
k8s-基础概念_新林。的博客-CSDN博客_k8s基础知识和概念
K8s基本概念入门_运维Linux和python的博客-CSDN博客



