Master
集群的控制节点,负责整个集群的管理和控制
-
- kube-apiserver:提供HTTP Rest 接口关键服务进程,是所有资源增删查等操作入口,也是集群控制的入口进程
- kube-controller-manager:kubernetes 里所有资源对象的自动化控制中心
- kube-scheduler:负责资源调度(Pod调度)的进程
- etcd:保存kubernetes所有资源对象的数据,存储
Node
kubernetes集群中工作负载节点,会被master分配工作负载(docker容器)
-
- kubelet:负责pod对应的容器的创建启停任务,实现集群管理的基本功能
- kube-proxy:实现kubernetes Service的通信与负载均衡机制的重要组件
- Docker Engine(docker):Docker引擎,负责本机的容器创建和管理工作
kubectl get nodes #查询集群中node kubectl desribe node #查询node详细信息
Pod
pod是k8s集群中运行部署应用或服务的最小单元,是一个运行服务的实例
-
- pod的组成
-
- Pod、容器、和Node的关系
Label(标签)
Label是kubernets系统中核心的概念,Label是一个key=value的键值对,其中key域value由用户指定
Replication Controller(RC:复制控制器)RC是kubernetes系统核心概念,它定义一个期望的场景,即声明某种POd的副本数量在任意时刻符合某个预期值,通过RC,kubernetes 实现了用户应用集群的高可用性,
RC包含如下几部分
- Pod期待的副本数(replicas)
- 用于筛选目标Pod的Label Selector
- 当Pod的副本数量小于预期数量时,用于创建新Pod的Pod模板(template)
RC 特性作用
- 通过定义一个RC实现Pod的创建过程过程及副本数量的自动控制
- RC里包含完整的Pod定义模板
- RC通过Label Selector 机制实现对Pod副本的自动控制
- 通过改变RC里边的Pod副本数量,可以实现Pod的扩容或缩容功能
- 通过改变RC里边Pod模板中的镜像版本,实现Pod的滚动升级功能
Deployment(部署)
目标:解决Pod编排问题,用户对k8s集群的一次更新操作,使用Deployment 来自动管理ReplicaSet,Deployment不负责pod创建
Deployment 使用场景如下
- 创建一个Deployment对象来生成对应的Replica Set 并完成Pod副本的创建过程
- 检测Deployment的状态来看部署动作是否完成(Pod)
- 更新Deployment以创建新的Pod(如镜像升级)
- 如果当前Deployment不稳定,回滚到早先的Deployment版本
- 暂停Deployment以便于一次性修改多个PodTemplaSpec 的配置项,之后再恢复Deployment,进行新的发布
- 扩展Deployment以应对高负载
- 查看Deployment的状态,以此作为发布是否成功的指标。、
#创建Deployment kubectl create -f xx-deployment.yaml #查看Deployment的信息 kubectl get deployments #查看对应Replica Set kubectl get rs
Service (服务)
Pod、RC、Service逻辑关系如下
kubernetes的Service 定义了一个服务的访问入口地址,前端的应用(Pod)通过这个入口地址访问其背后一组由Pod副本组成的集群实例,Service与其后端Pod副本集群直接则通过Label Selector 来实现,而RC的作用是保证Service的服务能力和服务质量始终处于预期的标准。
#查询Endpoint 列表 kubectl get endpoints
Volume (存储卷)
Volume 是pod中能够被多个容器访问的共享目录。
k8s提供了丰富的 vloume类型,如下
- emptyDir
-
-
- 临时空间 ,用于某些应用程序运行时所需要的临时目录,无须永久保留
- 长时间任务的中间过程CheckPoint的临时保存目录
- 一个容器需要从另一个容器获取数据的目录(多容器共享目录)
-
- hostPath
hostPath为Pod上挂载宿主机上的文件或者目录,主要用于如下几方面
- 容器应用程序生产的日志需要永久保存时,可以使用宿主机的高速文件系统进行存储
- 需要访问宿主机上Docker引擎内部数据结构的容器应用时,,通过定义hostPath为宿主机/var/lib/docker目录,使用容器内部应用可以直接访问Docker的文件系统
- 在不同的 Node上具有相同配置的Pod可能会应用宿主机上的目录和文件不同而导致对Volume上目录和文件访问结果不一致
- 使用了资源配额管理,则kubernetes无法将hostPath在宿主机上使用的资源纳入管理。
- gcePersistentDisk
使用谷歌公有云提供的永久磁盘,
- awsElasitcBlockStore
- NFS
使用NFS网络文件系统提供的共享目录存储数据,需部署NFS Server。定义NFS类型的 volume实例如下
volume: - name: nfs nfs: server:nfs-server. path: "/"
Namespace(命名空间)
Nmaespace(命名空间)是Kubernetes系统的另一个非常重要概念,Namesapce 很多情况下用于实现多租户的资源隔离,Namespace通过将集群内部的资源对象“分配”到不同的Namespace中,形成逻辑上分组的不同项目、小组或者用户组,便于不同的分组在共享使用整个集群的资源同时还能被分别管理。
Kubernetes 集群启动后,创建了名为“default”的Namesapce,通过kubectl可以查询
kubectl get namespacesNAME LABELS STSTUSdefault Active
Namespace 定义实例:
apiVersion: v1kind: Namespacemetdata: name:developemt
指定namesapce实例
apiVersion: v1kind: Podmetdata: name:busybox namespace:developemtspec: containers: - image: busybox command: - sleep: - "3600" name:busybox
Annotation(注解)
Annotation和label类似,也是用key/value键值的形式进行定义,它主要定义Kubernetes对象的元数据(Metdata)
Annotation记录如下信息:
-
- build信息、release信息、Docker镜像信息等
- 日志库、监控库、分析库等资源库的地址信息
- 程序调试工具,如工具名称、版本号等
- 团队的联系信息。