第一
postgresql是最优秀的开源关系型数据库,比mysql多了一些高级特性。
第二
elasticsearch是搜索引擎,存一条数据就是一个文档。elasticsearch的操作采用了restfull风格,返回josn格式数据
第三
mongoDB是一个开源稳定的高性能高可用nosql,数据采用集合形式存储,存储格式为bson
第四
常见的nosql(not only sql)
hbase redis mongodb
第五
redis是键值对缓存
第六
kafka是一个发布订阅模式的消息系统,它有多层概念。一个broker包含多个topic.一个topic包含多个partition.一个partation包含多个offset.消费者会顺序读取某个offset
第七
k8s service与pod的关联采用label selector.
service 暴露pod常见有三种,分别为
nodePort clusterIp loadBalancer
nodePort采用直接在node上选择一个端口,外部通过该端口即可访问服务
clusterIp 采用一个集群内ip,访问该集群内ip即可访问服务
loadBalancer需要借助云服务商提供的负载均衡,从而访问服务
第八
什么是k8s
k8s源自谷歌的大型应用管理系统borg,是borg的开源版。
k8s是优秀的容器管理平台
第九
k8s有哪些组件
kube-apiserver 它是k8s控制平面的前端,负责提供k8s对外暴露的api
etcd 它是高性能分布式一致性键值对数据库,负责存储k8s集群的元数据信息
kube-schdeuler 它负责pod的调度
controller manager 它是控制器管理器,负责管理控制器例如node-controller pod-controller
controller manager 与api-server建立长连接来watch资源的创建删除和修改
第十
为什么要使用rabbitmq
最主要是异步处理 如果是AB同步通信,A会因为要等待B的回执而阻塞,如果有个mq, A只需要将消息发给mq, mq将消息转发给B从而实现异步处理,提升系统流畅性
流量削峰 对流量洪峰进行缓冲,以防止系统宕机
应用解耦 多个系统之间使用mq传递消息可以避免一个系统的故障影响全部系统
第十一
rabbitmq的四大概念
生产者 数据发送方
消费者 数据接收方
队列 数据存储方
交换机 数据分发方
第十二
常见linux命令
第十三
pod容器相关
容器就是被隔离被限制的进程
容器相当于进程,pod相当于进程组
一个pod可以包含多个容器,容器共享了pod的某些资源,例如紧密协作的容器业务可以放置在一个pod种,从而一起调度。
pod只有一个ip地址,容器们共享网络
第十四
什么是sidecar
边车模式,采用辅助容器帮助主容器执行任务。
第一种用法的典型是业务日志收集。辅助容器和业务容器共享一个volume
第二种用法是代理容器。代理容器在业务容器试图访问外部集群时采用网络代理层解耦了业务容器与外部集群。istio就是采用了代理容器。
第十五
k8s资源对象
Spec 期望的状态
Status 观察到的状态
Metadata
Labels 标签
Annotations 注解
OwnerReference 归属
第十六
job相关
job是pod的owner
job可以并发执行
cornJob 定时执行的job
第十七
configMap 用于解耦容器的可变配置
configMap供Pod使用
第十八
Secret 存储敏感信息,类型有Opaque service-account 等
serviceAccount 解决pod在集群中的身份认证问题
Secret通过Pod挂载使用,例如imagePullSecrets字段配置
Secret采用Base64,跟明文几乎无区别,更敏感信息采用其他手段存储
第十九
存储相关
podVolume 中的volumes有emptyDir和hostPath两种
其中,emptyDir创建的存储会随着pod的删除而丢失
而hostPath顾名思义是本地存储,不会丢失
storageClass是创建pv的模板
第二十
存储拓补调度
指pod根据指定的拓补调度限制后,再动态生成和绑定pv
第二十一
可观测性相关
k8s 集群内置 readiness probe 和 liveness probe 两个探针
readiness 表示可以提供服务 liveness 表示存活
检查成功有三种方式,分别为
http get返回200
exec 执行返回0
tcp连接正常
第二十二
k8s监控
prometheus是监控的标准
第二十三
pod网络
pod要求有独立的ip地址
pod与pod node 外部 要求联通
第二十四
service
提供了服务发现与负载均衡
service模板的ports字段定义了协议和端口
负载均衡实例为 例如port填写80,targetPort填写9376
意味着将访问service 80端口的流量都负载到pod组上的9376端口
通过LetelSelector选择了一组pod
访问service 1 curl 虚拟IP:端口号; 2 curl 服务名:端口号; 3 curl 环境变量:端口号
第二十五
etcd
采用raft一致性算法解决分布式一致性问题
对外接口 get put watch
第十二六
pod调度相关
QoS
quality of service 表示服务质量
QoS 有三个值分别为 Guaranteed(高度保障) Burstable(弹性) BestEffort(尽力)
QoS无法直接设置,而是k8s根据requst , limit 的设置进行自动计算
ResourceQutoa 资源限额用于限制namespace的资源用量
podAffinity pod亲和调度,决定pod更希望和另外的pod在一起
nodeAffinity pod对于node的亲和调度
nodeSelector 使得pod调度到指定筛选的Node上
第二十七
k8s存储架构
pvController 管理pv创建
adController 负责存储设备的attach/detach(挂载和卸载)
volume manager 负责卷的mount/unmount操作
scheduler 负责pod调度
第二十八
operator是管理、描述k8s自定义资源的一套机制。相关概念有
CRD 自定义资源声明
CR 自定义资源
Controller 控制器 负责监控资源变化并发起调谐 调谐指使状态与定义保持一致
Webhook 负责传入对象的校验或变更
operator = CRD + CR + Controller + Webhook