k8s 架构基础(二)
2022-03-04 14:02:17 40 举报
AI智能生成
k8s 架构基础(二)
作者其他创作
大纲/内容
声明式 vs 命令式
幂等性:状态固定,每次我我要你做事,请给我返回相同结果。
面向对象的:把一切抽象成对象。
声明式系统规范
一个声明式系统
引导(Bootstrapping)原则: Kubelet 组件
分层原则管理依赖
架构设计原则
API 设计原则
可移植: 支持公有云,私有云,混合云,多重云
自动化: 自动部署,自动重启,自动复制,自动伸缩/扩展
设计理念
设计思想
group
kind - 要创建什么样的对象
apiVersion - 创建对象的Kubernetes API 版本
TypeMeta
Name:最长到253个字符
UID:由Kubernetes生成的,在Kubernetes集群的整个生命周期中创建的每个对象都有不同的UID
通过文件创建
命令行直接创建
创建
删除一个namespace会自动删除所有属于该namespace的资源
default和kube-system命名空间不可删除
PersistentVolumes是不属于任何namespace的,但PersistentVolumeClaim是属于某个特定namespace的
Events是否属于namespace取决于产生events的对象
删除
查看 Namespaces
操作
default
kube-system 由Kubernetes系统创建的对象的Namespace
Kubernetes从两个初始的Namespace开始
大多数Kubernetes资源(例如pod、services、replication controllers或其他)都在某些Namespace中,但Namespace资源本身并不在Namespace中。而低级别资源(如Node和persistentVolumes)不在任何Namespace中。Events是一个例外:它们可能有也可能没有Namespace,具体取决于Events的对象
Setting the namespace for a request
ResourceQuota
LimitRange
Namespace: 资源隔离的单位
构建、发布的镜像信息,如时间戳,发行ID,git分支,PR编号,镜像hashes和注Registry地址。
一些日志记录、监视、分析或audit repositories。
一些工具信息:例如,名称、版本和构建信息。
用户或工具/系统来源信息,例如来自其他生态系统组件对象的URL。
负责人电话/座机,或一些信息目录。
Annotations
\"release\" : \"stable\", \"release\" : \"canary\"
\"environment\" : \"dev\",\"environment\" : \"qa\",\"environment\" : \"production\"
\"tier\" : \"frontend\",\"tier\" : \"backend\",\"tier\" : \"cache\"
\"partition\" : \"customerA\", \"partition\" : \"customerB\"
\"track\" : \"daily\", \"track\" : \"weekly\"
示例
Service和ReplicationController适用
Equality-based requirement
Job,Deployment,Replica Set,和Daemon Set 适用
Set-based requirement
Labels Selectors
Labels
spec.volumes字段)
pod需要指定Volume的类型和内容
spec.containers.volumeMounts字段
映射到容器的位置
pod支持
emptyDir
hostPath允许挂载Node上的文件系统到Pod里面去
hostPath
secret volume用于将敏感信息(如密码)传递给pod
secret
persistentVolumeClaim用来挂载持久化磁盘的
persistentVolumeClaim
通过环境变量的方式告诉容器Pod的信息
downwardAPI
Projected volume将多个Volume源映射到同一个目录
projected
有时,可以在一个pod中,将同一个卷共享,使其有多个用处。volumeMounts.subPath特性可以用来指定卷中的一个子目录,而不是直接使用卷的根目录。
Using subPath
Volume
Metadata
具有唯一标示对象的数据
Spec:描述了对象所需的状态,希望对象具有的特性
Kubernete 对象的通用设计
配置格式
Pod【提供作业调度】
HostName:可以通过kubelet 中 --hostname-override参数覆盖。
ExternalIP:可以被集群外部路由到的IP。
InternalIP:只能在集群内进行路由的节点的IP地址
Addresses
Phase[不推荐使用,已弃用。]
OutOfDisk[True:如果节点上没有足够的可用空间来添加新的pod;否则为:False]
Ready [True:如果节点是健康的并准备好接收pod;False:如果节点不健康并且不接受pod;Unknown:如果节点控制器在过去40秒内没有收到node的状态报告。]
MemoryPressure [True:如果节点存储器上内存过低; 否则为:False。]
Condition
Capacity [描述节点上可用的资源:CPU、内存和可以调度到节点上的最大pod数]
Info[关于节点的一些基础信息,如内核版本、Kubernetes版本(kubelet和kube-proxy版本)、Docker版本(如果有使用)、OS名称等。信息由Kubelet从节点收集]
Node Status
与Kubernetes节点接口进行交互有三个组件:节点控制器(node controller)、kubelet和kubectl
Node【提供集群管理】
ReplicaSet 【高可用】
Deployment 【滚动升级】
服务发现
负载均衡 【Kube-Proxy 组件】
Service【服务发现&负载均衡】
核心对象间的关系图
知识串联
Kubernetes 对象及其分组
etcd
API Server 主要功能
API Sever 展开:API Server 堆叠模式
API Server
Informer 的内部机制
Controller 的工作流程:生产者消费者模式
第一个是在注册时将CIDR块分配给节点
第二个是使节点控制器的内部列表与云提供商的可用机器列表保持最新
第三是监测节点的健康状况
Node Controller
ReplicationSet Controller:负责维护系统中每个副本中的pod
端点(Endpoints)控制器:填充Endpoints对象(即连接Services&Pods)
Service Account和Token控制器:为新的Namespace 创建默认帐户访问API Token
kube-controller-manager
节点(Node)控制器
路由(Route)控制器
Service控制器
卷(Volume)控制器
cloud-controller-manager
Controller Manager
调度阶段
Scheduler
kube-dns:负责为整个集群提供DNS 服务
Ingress Controller:为服务提供外网入口
MetricsServer(Container Resource Monitoring):提供资源监控
Dashboard(Web UI):提供GUI
Federation:提供跨可用区的集群
Fluentd-elasticsearch:提供集群日志采集、存储与查询
插件 addons
Master 组件
安装Pod所需的volume
下载Pod的Secrets
从不同源获取Pod 清单,并按需求启停Pod 的核心组件:
负责汇报当前 Node 的资源信息和健康状态
负责Pod 的健康检查和状态汇报
Kubelet
Kube-Proxy
docker
RKT
supervisord
fluentd
Node 组件
Kubernetes 如何通过对象的组合完成业务描述?
Kubernetes 架构
Kubernetes 控制面
Kubernetes 数据面
十二要素应用
推荐文章
Kubernetes 官方文档
Kubernetes 官方文档【中文版】
Kubernetes 架构原则和对象设计 PDF - 极客时间
Kubernetes 的核心组件 PDF - 极客时间
参考文档
Kubernetes进阶实战
kubernetes in Action
推荐图书
kubernetes 架构基础
0 条评论
回复 删除
下一页