- map json.Marshal()
- slice 并发问题
- string 并发读写问题
https://explainshell.com/ 解析 shell 语言
https://www.deepl.com/translator pdf 全文翻译
container_memory_working_set_bytes > container_memory_rss; k8s 使用前者。
指标 | 说明 |
---|---|
container_memory_cache | 高速缓存(cache)的使用量。cache是位于CPU与主内存间的一种容量较小但速度很高的存储器,是为了提高cpu |
container_memory_rss | RSS内存,即常驻内存集(Resident Set Size),是分配给进程使用实际物理内存,而不是磁盘上缓存的虚拟内 |
container_memory_swap | 虚拟内存使用量。虚拟内存(swap)指的是用磁盘来模拟内存使用。当物理内存快要使用完或者达到一定比例,就 |
container_memory_usage_bytes | 当前使用的内存量,包括所有使用的内存,不管有没有被访问 (包括 cache, rss, swap等)。 |
container_memory_max_usage_bytes | 最大内存使用量的记录。 |
container_memory_working_set_bytes | 当前内存工作集(working set)使用量。(工作区内存使用量=活跃的匿名与和缓存,以及 |
container_memory_failcnt | 申请内存失败次数计数 |
container_memory_failures_total | 累计的内存申请错误次数。 |
其他定义: https://github.com/google/cadvisor/blob/master/docs/storage/prometheus.md
RSS内存,即常驻内存集(Resident Set Size),是分配给进程使用实际物理内存,而不是磁盘上缓存的虚拟内存。RSS内存包括所有分配的栈内存和堆内存,以及加载到物理内存中的共享库占用的内存空间,但不包括进入交换分区的内存。
container_memory_working_set_bytes 当前内存工作集(working set)使用量。
ingress controller 完成哪些工作 【南北向流量?】 第三方插件本身存在的,k8s 需要完成的(通过 configMap 配置):
- 负载均衡(一致性哈希,EWMA,roundbin,最小连接数) /会话保持(链路保持同一个请求,最好放到一个 nginx pod 中处理)
- 协议转换(语意转换,http->grpc)
- TLS 卸载与认证
- 文本压缩(Inter-QAT)
- 请求认证 Auth
- 限流限速
- WAF 防火墙?
- 全链路跟踪
- 日志上报
docker
- 容器镜像的本质 容器:视图被隔离、资源受限制的进程 管理虚拟机=管理基础设置;管理容器=管理应用本身
镜像:操作系统(k8s)的软件安装包
Pod: 进程组 #
为什么要抽象出 pod
- 单个容器中,启动多个进程会有 systemd 管理问题,不妨严格限定容器运行进程数量,再有pod管理容器数量
- 某些超亲密(频繁rpc、相互的网络感知)容器,必须运行在同一个物理机上
共享网络
- 每个 pod 会额外启动一个 InfraContainer(200kb的汇编程序) 方式共享网络
- 单个 pod 中的所有容器看到的网络设施完全一样
- 一个 pod 只有一个 ip 地址,只有一份网络资源,pod 中所有容器共享这份资源
- Pod 生命周期和 InfraContainer 完全一致,与自定义容器无关
共享存储
- share-data 对应在宿主机上的目录会被同时绑定到挂在进pod的容器中
容器设计模式 Sidecar :提供了一些 pod 设计模式 能力重用
- 环境初始化:InitContainer 启动比 spec.containers 早
- 日志收集:业务容器将日志写入 volume,日志容器共享此目录,并上报 Fluentd
- 代理容器:server mesh 的概念
- 适配器容器:给业务暴露出来的接口做格式转换
应用编排和管理 #
编排命令实现方式:
- 使用申明式API而非命令式 a. 合并多个变更 b. 幂等,可反复执行
- 使用多个异步控制器,轮询 yaml(通过 yaml status 无限向 spec 靠近的方式实现) 编排算子使用场景
- demonset 存储:ceph、glusterd;日志收集:fluentd,logstash;每个节点的监控收集
- cronjob 等
可观测性 #
-
健康状态、资源使用、应用实时日志 Liveness(健康指针) Readiness(就绪指针)
-
应用调试步骤 describe查看状态 -> 查看 event 日志 -> Pod 自身日志
-
应用远程调试
- Telepresence 将本地应用代理到集群的一个 Service 中去,
- Port-Forward 将远程的应用代理到本地端口上
- kubectl-debug 开源调试插件,侵入同名 pod 的 namespace
-
监控 资源监控(cpu mem 网络)、性能监控(apm 监控?gvm、zendengine hook、gc,网络连接)、安全监控(越权、漏洞)、事件监控(状态转换带来的 normal warnning 日志)
-
日志 主机内核日志、runtime 日志(docker containerd)、组件日志、应用进程日志 fluentd
网络概念及策略 #
Underlay Overlay(不需要像host网络申请) 是否与 Host 网络同层,perPodPerIp,一个ip一贯到底,清清楚楚 NICE
Runtime & RuntimeClass(kubernetes1.16) #
- rkt+docker -> CRI gVisor+kata
heapster
应用配置管理 #
这个是 ali 做的比较好的教程,一定要看 https://www.bilibili.com/medialist/play/349215109?from=space&business=space_series&business_id=1649328&desc=1&spm_id_from=333.999.0.0 https://edu.aliyun.com/lesson_1651_17055?spm=5176.10731542.0.0.536a7abdmVERGl#_17055
容器环境的设计模式:https://www.usenix.org/system/files/conference/hotcloud16/hotcloud16_burns.pdf
python 入门课程 https://space.bilibili.com/50233288/channel/seriesdetail?sid=2076829
git 入门教程 https://space.bilibili.com/50233288/channel/collectiondetail?sid=218773
bookmark: 阿里技术大牛 30 分钟讲透 Kubernetes : 调度和资源管理
架构设计 #
相关文档 基于容器的设计模式 https://www.usenix.org/system/files/conference/hotcloud16/hotcloud16_burns.pdf 4+1 设计蓝图 https://www.cs.ubc.ca/~gregor/teaching/papers/4+1view-architecture.pdf 软件架构描述 https://userweb.cs.txstate.edu/~rp31/papers/intro_softarch.pdf
- 深入了解容器隔离(namespace)和资源控制(cgroup)
- 容器数据卷实现方式 4.containerd 架构分析和工作原理解析
流程图怎么画
https://mermaid-js.github.io/mermaid/#/./flowchart?id=flowcharts-basic-syntax 在线:https://mermaid-js.github.io/mermaid-live-editor/edit#pako:eNpVkE1qw0AMha8itGohvoAXhcZOswmk0Ow8WQiPnBmS-WEsU4Ltu3dct5BoISS97wmkEdugGUu8JIoGTrXykOO9qUyyvTjqz1AUb9OeBVzwfJ9g-7IP0JsQo_WX15XfLhBU42HBGMRYf51Xqfr1Hz1PUDcHihLi-VE5fYcJdo39NHn9s2ISZ9dH01HZUdFSgorSH7Jk3KDj5MjqfMC4TBSKYccKy1xq7mi4iULl54wOUZPwTlsJCUtJA2-QBglfd9_-9ytTW8rvcOtw_gEDaF2R
pivot search http://www.artfulsoftware.com/infotree/qrytip.php?id=78 auto pivot table: https://www.artfulsoftware.com/infotree/qrytip.php?id=523&m=0 common https://www.artfulsoftware.com/infotree/queries.php
不展示 golang vendor 目录 #
.gitattributes
|
|