在之前的文章已经讲到了很多Kubernets对象,包括pod,service,deployment等等。Kubernets对象是一种持久化,表示集群状态的实体。它是一种声明式的意图的记录,一般使用yaml文件描述对象,它使用Kubernetes对象来表示集群的状态,通过API/kubectl管理Kubernetes对象。

name和uid

在Kubernetes对象模型中,使用了name和uid作为对象的唯一标识,其中name在同一种对象中是唯一的,在不同类型对象可以是相同的;uid是唯一标识的。

在API中对象的访问路径:/api/{version}/namespaces/{namespaxe/{object-kind}/name,比如:/api/v1/namespace/default/pods/hello-kubernetes

在Kubernetes集群的整个生命周期内创建的每个对象实例都具有不同的UID.

Namespace(名字空间)

Namesapce,不仅仅是一个属性,本身也是一个object。

  • Namesapce:用于将物理集群划分为多个虚拟集群。

  • Namespace间完全隔离,因此也常被用来隔离不同的用户以及权限。

  • Kubernetes内置了三个Namesapces:default、kube-system和kube-public,Node和PersistentVolume不属于任何namespace。

Label(标签)

Label用于建立集群对象之间的灵活、松耦合的多维关联关系。

  • 一个label是一个键-值对,其中的key、value均由用户自己定义。

  • lable可以附着在任何对象上,每个对象也可以有任意个标签。标签可在对象定义时附加上,也可以通过命令动态管理标签。

  • label可以将有组织目的的结构映射到集群对象上,从而形成一个与现实世界管理结构同步对应松耦合的、多维的对象管理结构。

通过lable selector 查询和筛选建立对象间的关系的。

如上图所示,有两个service1和 service2,对应的pod有标签release:stable和标签release:rc-1,通过selector,就可以筛选出相应的标签的pod。而pod由通过nodeselector筛选出不同环境的node。

Annotations

Annotations:可以将任意非标识性元数据附加到对象上。

  • Annotations也是以键值对的形式呈现。

  • 工具和库可以检索并使用这些Annotations元数据

  • 将数据作为Annotations附着在对象上,有利于创建一些用于部署、管理和做内部检查的共享工具和客户端。

Kubernetes对象分类

常用的对象分类有以下几种:

  • workload类,即工作负载类

    • pod

    • controller

    • deployment

    • stateful

    • daemonset

    • job

  • discovery&loadbalance类,与服务相关的对象

    • service

    • endpoint

    • ingress

  • config&storage,向应用初始化配置话信息

  • configmap

  • secret

  • volume

  • persistentVolumeClaim

  • cluster,集群类对象

  • Node

  • namespace

  • persitenceVolume

  • clusterRole

  • ClusterRoleVindeing

  • ResoruceQuota

工作负载,以pod为中心

pod是一个有特定关系的容器集合。

  • Pod是集群中可以创建和部署的最小且最简单的Kubernetes对象的单元。

  • Pod也是一种封装。它封装了应用容器,存储资源、独立的网络IP以及决定容器如何运行的策略选项。

  • 每个pod中预置了一个Pause容器,其namespace、IPC资源、网络和存储资源被pod内其它容器共享。Pod中的所有容器紧密协作,并且作为一个整体被管理、调度和运行。

pod的生命周期

pod是一个非持久化实体。

如图所示,pod有如下几个生命周期:

  • pending,即挂起,即pod对象已经被kubernetes所接受,但有一个或者多个pod尚未创建。

  • running,运行中,pod已经绑定到node上,所有pod中所有容器已经创建

  • succeed,成功状态,pod的所有的容器已经成功终止。

  • failed,失败状态,即有最少又一个容器正常退出。

service

pod是一个非持久化的实体,pod随时都有可能被销毁掉或者重新创建,所以pod的所在节点是不确定的,为了防止因pod的提供服务不确定性而采用了地址唯一的service用来提供服务,service可以通过负载均衡的调用它背后的pod对象,从而提供稳定的服务。

servie是与云原生应用中“微服务”概念一一对应。

  • kubernetes集群为每一个service分配一个集群唯一的IP地址,在 service的生命周期内,该ip地址不变;在内部DNS指出下,轻松实现服务发现机制。

  • service通过label selector关联到实际支撑业务运行的pod上,并通过集群内置的服务负载均衡分发到后端pod上。

  • 通过nodeport或者设置loadbalance机制实现集群外部对service的访问。

controllers

controller是kubernetes的核心对象之一。

  • controller用于保证集群内一组pod能始终按照某种期望的状态正常运行

  • 状态包括:Pod副本数量、节点选择、资源约束、持久化数据运维等

  • kubernetes支持多种controller,常用的deployment、replicaseet、statefulset、daemonset等。

ReplicaSet

ReplicaSet:确保健康Pod的副本始终满足用户定义的数量。

  • 前身是ReplicationController()rc

  • 相比rc,增加了集合式label selector的支持。

  • 支持单独使用,但更多隐藏在Deployment控制器后面,由deployment自动管理。

Deployment

Deployment:为pod和 ReplicaSet提供声明式的定义。

  • 用户在deployment文件中描述期望状态,Deployment Controller就会自动将Pod和Replica Set的实际状态改变到期望状态。

  • Deployment支持Pod的滚动更新,并自动管理背后的ReplicaSet

  • Deployment支持将Pod滚动到任意版本。

StatefulSet

StatefulSet:提供对有状态应用的部署和控制的支持,1.9版本GA,正式毕业。可以用于生产环境中。

  • 使用场景:文档的持久化存储,稳定的网络标志,有序部署有序扩展,有序收缩有序删除,有序自动滚动升级等。

  • Pod的存储必须由PersistentVolume Provisioner根据请求的Storage Class 进行配置,或由管理员预先配置好。

  • 考虑数据安全性,伸缩或删除StatefulSey不会删除关联的存储;另外StartefulSet目前要求Headless Service 负责Pod的网络身份,用户有责任创建此服务。

DaemonSet

保证在每个Node上都运行一个Pod副本。

  • 适用于系统Daemon程序、系统跟踪、日志收集等

  • Kubernetes1.6之后,可设置更新策略:支持滚动更新

  • 可指定Node:nodeSelector、nodeAffinity、podAffinity

ConfigMap

常用来向pod提供非敏感的配置信息。

  • ConfigMap用于保存配置数据的键值对,可以用来保存单个,也可以用来保存配置文件。

  • ConfigMap可以使用命令行基于字面值、文件或者目录来创建或者通过configmap对象定义文件创建。

  • ConfigMap可以通过三种形式在pod中使用:环境变量、容器命令行参数货以文件形式通过数据卷插件挂载到pod中。

Secret

secret解决的事集群内密码、token、密钥等敏感数据的配置问题。

  • 常用于与ServiceAccount关联,存储在tmpfs文件系统中,Pod删除后sercret文件也会对应删除

  • 支持opaque,kubernetes.io/Service Account,kubernetes.io/dockerconfigjson三种类型。

总结

本文主要对Kubernetes的对象模型进行一个初略的讲解。后续文章会对重点对象模型进行一个详细的讲解或者实战的演示。

-更多文章-

Docker入门与实践

分布式之消息队列复习精讲

那些年让你迷惑的阻塞、非阻塞、异步、同步

拨开云雾见天日:剖析单机事务原理

Spring Cloud GateWay初体验

这可能是JAVA程序员进入BAT年薪80w最好的一次机会

Kubernetes基础与架构

对业务系统的监控 No.118

-关注我-

Kubernetes对象模型相关推荐

  1. 谈 Kubernetes 的架构设计与实现原理

    点击上方"方志朋",选择"置顶或者星标" 你的关注意义重大! 本文转载于公众号:真没什么逻辑 Kubernetes 基本上是这两年最热门.最被人熟知的技术了,它 ...

  2. 使用 Contour 接管 Kubernetes 的南北流量

    点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 前言 在 Kubernetes 中运行大规模以 Web 为中心的工作负载,最关键的需求之一就 ...

  3. 简单介绍Kubernetes

    Kubernetes是一个强大的开源系统,最初由谷歌开发,用于在集群环境中管理容器化应用程序.它的目标是提供更好的方法来管理不同基础设施之间的相关分布式组件和服务. 在本指南中,我们将讨论一些Kube ...

  4. Kubernetes 入门(2)基本组件

    1. C/S架构 Kubernetes 遵循非常传统的客户端服务端架构,客户端通过 RESTful 接口或者直接使用 kubectl 与 Kubernetes 集群进行通信,这两者在实际上并没有太多的 ...

  5. 容器编排技术 -- Kubernetes Pod概述

    容器编排技术 -- Kubernetes Pod概述 1 了解Pod 1.1 Pods如何管理多个容器 1.1.1 网络 1.1.2 存储 2 使用Pod 2.1 Pod和Controller 3 P ...

  6. 零基础入门│带你理解Kubernetes

    条分缕析带你充分理解Kubernetes的各个细节与部分:它是什么,它如何解决 容器编排问题,它包含哪些你必须掌握的关键对象,以及如何快速上手部署使用Kubernetes. 容器的好处不胜枚举:一致的 ...

  7. Contour 学习笔记(一):使用 Contour 接管 Kubernetes 的南北流量

    原文链接:Contour 学习笔记(一):使用 Contour 接管 Kubernetes 的南北流量 在 Kubernetes 中运行大规模以 Web 为中心的工作负载,最关键的需求之一就是在 L7 ...

  8. Kubernetes 与 OpenShift 的关系

    古语有云:"知彼知己,百战不殆.不知彼而知己,一胜一负.不知彼,不知己,每战必殆." 这句话同样也适用于技术体系.无论我们在落地,还是在学习.实践某一项技术,对提供相同功能的体系框 ...

  9. Kubernetes 之资源清单

    点击下方公众号「关注」和「星标」 回复"1024"获取独家整理的学习资料! K8S 中所有的内容都抽象为了资源,资源实例化之后就叫做对象. 在 Kubernetes 系统中,Kub ...

最新文章

  1. oracle sql 平均分配 分组_SQL学习二
  2. 生物版AlphaGo发威!DeepMind出手抗疫:预测多种新冠病毒相关蛋白结构
  3. JDom中removeContent无法删除子元素问题
  4. UVA - 1378 A Funny Stone Game(博弈+sg函数)
  5. border-image用法
  6. 畅通工程---并查集
  7. Hegic Q1报告:TVL接近6000万美元,日交易量达2200万美元创新高
  8. 【Vue2.0】—vue-router(二十七)
  9. 【愣锤笔记】基于vue的进阶散点干货
  10. java sql插入_java 中如何使用sql插入语句?
  11. Laplace锐化算子和LOG算子
  12. WPF教程(十二)资源
  13. 一本书,一个软件思想和创意的T台大道
  14. opencv的透视变换(投影变换)
  15. 在Matlab中将一幅图片的中心设置为x-y轴坐标原点
  16. python红楼梦人物词频统计_用R进行文本分析初探——以《红楼梦》为例
  17. 【MySQL自学之路】第2天——关系代数计算【理论知识】
  18. 怎样在64位安卓系统中使用32位SO库 2
  19. 个人关于web开发浅尝辄止,web开发概览
  20. 【微信小程序】语音播报,文字转语音,使用《微信同声传译插件》

热门文章

  1. 软件工程实践第一次作业
  2. 单向链表JAVA代码
  3. 在使用Reference Source调试.Net 源代码时如何取消optimizations(代码优化)-翻译
  4. POJ 1966 Cable TV Network【无向图点连通度 最小割 E-K算法求最大流】
  5. 小机上监控AIX和数据库管理系统的运行情况直到性能优化(SQL语句优化和排除硬件问题)...
  6. LeetCode实战:买卖股票的最佳时机
  7. 工程师文化:BAT 为什么不喊老板
  8. IEEE迎来首位华人主席,马里兰大学终身教授刘国瑞当选
  9. 良心贴!没想到 Google 排名第一的编程语言,可以这么简单!
  10. AWS 中国宁夏和北京区正式上线 Amazon SageMaker,中国用户终于能用到新工具和功能!