对象(Object)规范和状态
Object Spec
Spec描述了对象所需的状态 - 希望Object具有的特性
Object Status
Status描述了对象的实际状态,并由Kubernetes系统提供和更新
描述Kubernetes对象
apiVersion - 创建对象的Kubernetes API 版本
kind - 要创建什么样的对象?
metadata- 具有唯一标示对象的数据,包括 name(字符串)、UID和Namespace(可选项)
Kubernetes Names
Kubernetes REST API中的所有对象都用Name和UID来明确地标识
对于非唯一用户提供的属性,Kubernetes提供labels和annotations
Kubernetes资源的Name能有最长到253个字符
UIDs
UIDs是由Kubernetes生成的,在Kubernetes集群的整个生命周期中创建的每个对象都有不同的UID
Kubernetes Namespaces
通过文件创建
命令行直接创建
删除
删除一个namespace会自动删除所有属于该namespace的资源
default和kube-system命名空间不可删除
PersistentVolumes是不属于任何namespace的,但PersistentVolumeClaim是属于某个特定namespace的
Events是否属于namespace取决于产生events的对象
查看 Namespaces
Kubernetes从两个初始的Namespace开始
default<br>
kube-system 由Kubernetes系统创建的对象的Namespace
命名空间名称满足正则表达式[a-z0-9]([-a-z0-9]*[a-z0-9])?,最大长度为63位
大多数Kubernetes资源(例如pod、services、replication controllers或其他)都在某些Namespace中,但Namespace资源本身并不在Namespace中。而低级别资源(如Node和persistentVolumes)不在任何Namespace中。Events是一个例外:它们可能有也可能没有Namespace,具体取决于Events的对象
Setting the namespace for a request
ResourceQuota
LimitRange
Labels 和 Selectors
示例
"release" : "stable", "release" : "canary"
"environment" : "dev","environment" : "qa","environment" : "production"
"tier" : "frontend","tier" : "backend","tier" : "cache"
"partition" : "customerA", "partition" : "customerB"
"track" : "daily", "track" : "weekly"
Labels选择器
Equality-based requirement 基于相等的要求
kubectl get pods -l environment=production,tier=frontend
Service和ReplicationController适用
Set-based requirement
kubectl get pods -l 'environment in (production),tier in (frontend)'
Job,Deployment,Replica Set,和Daemon Set 适用
Volume
pod支持
pod需要指定Volume的类型和内容
spec.volumes字段)
映射到容器的位置
spec.containers.volumeMounts字段
emptyDir
hostPath
hostPath允许挂载Node上的文件系统到Pod里面去
secret
secret volume用于将敏感信息(如密码)传递给pod
persistentVolumeClaim
persistentVolumeClaim用来挂载持久化磁盘的
downwardAPI
通过环境变量的方式告诉容器Pod的信息
projected
Projected volume将多个Volume源映射到同一个目录
Using subPath
有时,可以在一个pod中,将同一个卷共享,使其有多个用处。volumeMounts.subPath特性可以用来指定卷中的一个子目录,而不是直接使用卷的根目录。
Annotations
构建、发布的镜像信息,如时间戳,发行ID,git分支,PR编号,镜像hashes和注Registry地址。
一些日志记录、监视、分析或audit repositories。
一些工具信息:例如,名称、版本和构建信息。
用户或工具/系统来源信息,例如来自其他生态系统组件对象的URL。
负责人电话/座机,或一些信息目录。
Node
Node Status
Addresses
HostName:可以通过kubelet 中 --hostname-override参数覆盖。
ExternalIP:可以被集群外部路由到的IP。
InternalIP:只能在集群内进行路由的节点的IP地址
Condition
OutOfDisk
True:如果节点上没有足够的可用空间来添加新的pod;否则为:False
Ready
True:如果节点是健康的并准备好接收pod;False:如果节点不健康并且不接受pod;Unknown:如果节点控制器在过去40秒内没有收到node的状态报告。
如果Ready condition的Status是“Unknown” 或 “False”,比“pod-eviction-timeout”的时间长,则传递给“ kube-controller-manager”的参数,该节点上的所有Pod都将被节点控制器删除
MemoryPressure
True:如果节点存储器上内存过低; 否则为:False。
DiskPressure
True:如果磁盘容量存在压力 - 也就是说磁盘容量低;否则为:False。
Capacity
描述节点上可用的资源:CPU、内存和可以调度到节点上的最大pod数
Info
关于节点的一些基础信息,如内核版本、Kubernetes版本(kubelet和kube-proxy版本)、Docker版本(如果有使用)、OS名称等。信息由Kubelet从节点收集
Management
有三个组件与Kubernetes节点接口进行交互:节点控制器(node controller)、kubelet和kubectl
Node Controller
第一个是在注册时将CIDR块分配给节点
第二个是使节点控制器的内部列表与云提供商的可用机器列表保持最新
第三是监测节点的健康状况
Node容量