k8s object对象(pod controller)介绍

参考https://www.imooc.com/learn/978

Name UID

1 集群中所有对象都通过name和UID明确标识
2 API中的对象访问的路径: /api/{version}/namespaces/{namespaces}/{object-kind}/name
比如:/api/v1/namespaces/default/pods/hello-kubernetes
3 在k8s集群的整个生命周期内创建的每个对象实例都具有不同的UID

Namespace

命名空间 不仅仅是一个属性,本身也是一个object

1 用于将物理集群划分为多个虚拟集群
2 namespace间完全隔离,一次也常被用来隔离不同的用户(及权限)
3 内置3个namespace:default,kube-public和kube-public,node和persistentVolume不属于任何namespace

Label 标签

Label用于建立集群对象之间的灵活的\松耦合的多维关联关系
1 一个label是一个键值对,其中的key,value均由用户自己定义
2 label可以附着在任何对象上,每个对象也可以有任意个标签.标签课在对象定义时附加上,也可以通过命令动态管理标签
3 label可以将有组织目的的结构映射到集群对象上,从而形成一个与现实世界管理结构同步对应松耦合的\多维的对象管理结构

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

Annotations 注解

1 可以 以键值对形式呈现
2 工具和库可以检索到并使用这些Annotations元数据
3 将数据作为Annotation附着在对象上,有利于创建一些用于部署\管理和做内部检查的共享工具或客户端

k8s 对象分类

1 workload
2 discovery load balance
3 config storage
4 cluster

工作负载:以Pod为中心 集群调度基本单元

Pod:一个有特定关系的容器集合
1 pod是集群中可以创建和部署的最小且最简的kbs对象单元
2 pod 也是一种封装 它分装了应用容器\存储资源\独立的网络ip以及决定容器如何运行的策略选项
3 每个pod中预置一个Pause容器,其命名空间,IPC资源,网络和存储资源被Pod内其他容器共享.Pod中的所有容器紧密协作,并且作为一个整体被管理\调度和运行

Pod生命周期

pod 一个非持久性实体
重启后pod的ip地址会变化

Service

与云原生应用中"微服务"概念一一对应
1 kbs 集群为每一个service分配一个集群唯一的Ip地址,
在service的生命周期内,改ip地址不变;
在内部dns的支持下,轻松实现服务发现机制
2 Service通过label selector关联到实际支撑业务运行的pod上,并通过集群内置的服务负载均衡将服务请求分发到后端pod
3 通过nodeport或者设置loadbalancer机制实现集群外部对service的访问

Controller

kbs核心对象之一
1 保证集群内一组pod能始终按照某种期望的状态(desired state)正常运行
2 状态包括 pod副本数量\节点选择\资源约束\持久化数据维持等
3 kbs支持多种Controller,常用的deployment\replicaset\statefulset\daemonset等

一 replicaset

确保健康pod的副本数始终满足用户定义的数量
1 前身是replicationController(rc)
2 相比rc,增加集合式label selector的支持
3 支持单独使用,单更多隐藏在deployment控制器后面,
有deployment自动管理

二 deployment

为pod和replicaset提供了声明式的定义declarative
1 用户在deployment文件中描述期望状态,deployment controller
就会自动将pod和replicaset的实际状态改变为期望状态
2 deploymentzhichipod的rollingUpdate,并自动管理背后的replicaset
3 deployment支持将pod rollback到之前的任意revision(仅限于pod-template模板改动)

三 StatefulSet

提供对有状态的应用的部署和控制的支持,1.9版本GA
1 适用场景:稳定的持久化存储\稳定的网络标志\有序部署有序扩展\有序收缩有序删除\有序自动滚动升级等
2 pod的存储必须由 persistentVolume Provisioner 根据请求的Storage Class 进行配置,或由管理员预先配置好.
3 考虑数据安全性,伸缩或删除StatefulSet不会删除关联的存储;
另外StatefulSet目前要求Headless Service 负责Pod的网络身份,用户有责任创建次服务

四 daemonset

保证每个Node 上都运行一个pod副本
1 适用场景:系统daemon程序\监控跟踪\日志收集等
2 kbs1.6之后,可设置更新策略:支持滚动更新
3 可指定Node:nodeSelector\nodeAffinity\podAffinity

ConfigMap

常用来向pod提供非敏感的配置信息
1 ConfigMap用来保存配置数据的键值对,可以用来保存单个属性,也可以用来保存配置文件
2 可以使用命令行基于字面值\文件或目录来创建或通过configmap对象定义文件创建
3 可以通过3种方式在pod中使用:环境变量\容器命令行参数或以文件形式通过数据卷插件挂载到pod中

Secret

1 常用于与serviceaccount关联,存储在tmpfs文件系统中,pod删除后secret文件也会对应删除
2 支持Opaque,kbs.io/service account,kbs.io/dockerconfigjson 三种类型
3 secret可以以volume或者环境变量的方式使用

发布了250 篇原创文章 · 获赞 17 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/qq_35899407/article/details/103802734