k8s(一)之基础
2021-09-20 23:34:03 2 举报
AI智能生成
k8s 架构基础
作者其他创作
大纲/内容
什么是Kubernetes(K8s)?
名字的由来:源于希腊语,意为“舵手”或“飞行员”(针对 docker 意味很明显哈 )。
k8s 这个缩写是因为 k 和 s 之间有八个字符的关系。
k8s 这个缩写是因为 k 和 s 之间有八个字符的关系。
定义:Kubernetes 是2014年谷歌开源的容器集群管理系统,是Google 多年大规模容器管理技术Borg 的开源版本;目前的云原生其实就是围绕它来展开的。
前身:Google Borg
基本概念
Workload
prod
non-prod
Cell
Job & Task
Naming
Borg 架构
调度原理
Borgmaster 主进程
Scheduler 进程
Borglet
优势
资源利用率高、省钱
高可用
应用高可用【数据面】
系统自身高可用【控制面】
隔离性
安全性隔离
性能隔离
k8s能做什么
多个进程(作为容器运行)协同工作
存储系统挂载
Distributing secrets
应用健康检测
应用实例的复制
Pod自动伸缩/扩展
Naming and discovering
负载均衡
滚动更新
资源监控
日志访问
调试应用程序
提供认证和授权
Kubernetes 控制面
设计思想
一个声明式系统
声明式 vs 命令式
声明式系统规范
幂等性:状态固定,每次我我要你做事,请给我返回相同结果。
面向对象的:把一切抽象成对象。
架构设计原则
引导(Bootstrapping)原则: Kubelet 组件
分层原则管理依赖
API 设计原则
设计理念
可移植: 支持公有云,私有云,混合云,多重云
可扩展: 模块化, 插件化, 可挂载, 可组合
自动化: 自动部署,自动重启,自动复制,自动伸缩/扩展
Kubernetes 对象及其分组
Kubernete 对象的通用设计
TypeMeta
group
kind - 要创建什么样的对象
apiVersion - 创建对象的Kubernetes API 版本
Metadata
Name:最长到253个字符
UID:由Kubernetes生成的,在Kubernetes集群的整个生命周期中创建的每个对象都有不同的UID
Namespace: 资源隔离的单位
操作
创建
通过文件创建
命令行直接创建
删除
删除一个namespace会自动删除所有属于该namespace的资源
default和kube-system命名空间不可删除
PersistentVolumes是不属于任何namespace的,但PersistentVolumeClaim是属于某个特定namespace的
Events是否属于namespace取决于产生events的对象
查看 Namespaces
Kubernetes从两个初始的Namespace开始
default
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
Annotations
构建、发布的镜像信息,如时间戳,发行ID,git分支,PR编号,镜像hashes和注Registry地址。
一些日志记录、监视、分析或audit repositories。
一些工具信息:例如,名称、版本和构建信息。
用户或工具/系统来源信息,例如来自其他生态系统组件对象的URL。
负责人电话/座机,或一些信息目录。
Labels
示例
"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 Selectors
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特性可以用来指定卷中的一个子目录,而不是直接使用卷的根目录。
Spec:描述了对象所需的状态,希望对象具有的特性
核心对象间的关系图
Pod【提供作业调度】
配置格式
Node【提供集群管理】
Node Status
Addresses
HostName:可以通过kubelet 中 --hostname-override参数覆盖。
ExternalIP:可以被集群外部路由到的IP。
InternalIP:只能在集群内进行路由的节点的IP地址
Phase[不推荐使用,已弃用。]
Condition
OutOfDisk[True:如果节点上没有足够的可用空间来添加新的pod;否则为:False]
Ready [True:如果节点是健康的并准备好接收pod;False:如果节点不健康并且不接受pod;Unknown:如果节点控制器在过去40秒内没有收到node的状态报告。]
MemoryPressure [True:如果节点存储器上内存过低; 否则为:False。]
DiskPressure [True:如果磁盘容量存在压力, 也就是说磁盘容量低;否则为:False。]
Capacity [描述节点上可用的资源:CPU、内存和可以调度到节点上的最大pod数]
Info[关于节点的一些基础信息,如内核版本、Kubernetes版本(kubelet和kube-proxy版本)、Docker版本(如果有使用)、OS名称等。信息由Kubelet从节点收集]
与Kubernetes节点接口进行交互有三个组件:节点控制器(node controller)、kubelet和kubectl
ReplicaSet 【高可用】
Deployment 【滚动升级】
Service【服务发现&负载均衡】
服务发现
负载均衡 【Kube-Proxy 组件】
配置格式
Kubernetes 架构
Master 组件
etcd
API Server
API Server 主要功能
API Sever 展开:API Server 堆叠模式
Controller Manager
Controller 的工作流程:生产者消费者模式
Informer 的内部机制
kube-controller-manager
Node Controller
第一个是在注册时将CIDR块分配给节点
第二个是使节点控制器的内部列表与云提供商的可用机器列表保持最新
第三是监测节点的健康状况
ReplicationSet Controller:负责维护系统中每个副本中的pod
端点(Endpoints)控制器:填充Endpoints对象(即连接Services&Pods)
Service Account和Token控制器:为新的Namespace 创建默认帐户访问API Token
cloud-controller-manager
节点(Node)控制器
路由(Route)控制器
Service控制器
卷(Volume)控制器
Scheduler
调度阶段
插件 addons
kube-dns:负责为整个集群提供DNS 服务
Ingress Controller:为服务提供外网入口
MetricsServer(Container Resource Monitoring):提供资源监控
Dashboard(Web UI):提供GUI
Federation:提供跨可用区的集群
Fluentd-elasticsearch:提供集群日志采集、存储与查询
Node 组件
Kubelet
从不同源获取Pod 清单,并按需求启停Pod 的核心组件:
安装Pod所需的volume
下载Pod的Secrets
负责汇报当前 Node 的资源信息和健康状态
负责Pod 的健康检查和状态汇报
Kube-Proxy
docker
RKT
supervisord
fluentd
Kubernetes 如何通过对象的组合完成业务描述?
Kubernetes 数据面
与传统云计算对比
云计算的传统分类:Iass、Pass、Sass,
Kubernetes 生态系统:传统的分类被弱化
推荐文章
十二要素应用
参考文档
Kubernetes 官方文档
Kubernetes 官方文档【中文版】
Kubernetes 架构原则和对象设计 PDF - 极客时间
Kubernetes 的核心组件 PDF - 极客时间
0 条评论
下一页