挑战
pod spec
init container 初始化需求
- 可以有多个,自上而下,依次执行
- 一次性工作,比如下载文件、创建token等
主container
- 用1个还是多个
权限
- Privilege和SecurityContext(PSP)
共享哪些资源
- NameSpace(默认共享网络)
- PID、IPC?UTS、MNT默认不共享
- 假如进程控制,需要share pid
配置管理
- configmap
- 环境变量
- secret
优雅终止
- 处理SIGTERM
健康检查
- Liveness Probe
- Readiness Probe
DNS策略
- Clusterfirst,会连接coredns
- default则使用主机的dns
镜像拉取策略
- imagePullPolicy
资源规划
每个实例需要多少计算、内存资源
- CPU/GPU
- memory
每个实例需要多少存储资源
- 大小
- 本地、网盘
- 读写性能
- DiskIO
网络需求
- 整体应用总体QPS和带宽
超售资源
pod数据管理
local-ssd:独占本地磁盘,独占IO、固定大小、读写性能高
local-dynamic:基于lvm,动态分配空间,效率低
临时数据推荐emptydir
- 挂载主机的卷,性能相对overlayfs好
- 生命周期和容器一致
持久化数据
- hostpath
应用配置
传入方式
- 环境变量
- mount volume
数据来源
- configmap
- secret
- Downward API(pod spec中的值,存储为键值形式)
高可用部署
- 实例数量(承接负载和高可用都需要)
- 物理上如何控制失败域,部署跨机架、机房、AZ
- 如何进行精细流量控制
- 如何进行精细流量控制
- 如何按地域的顺序更新
- 如何回滚
部署方式
更新策略
maxsurge
- 先创建实例,在删除实例,保持实例有一定的规模
maxunavailable
- 最多有多少个不ready的实例,超过则升级停止
深入理解PodTemplateHash导致应用的易变性
服务发布
把集群发布到集群内部或者外部
- ClusterIP
- NodePort
- Loadbalancer
- ExternalName
证书管理和七层负载均衡的需求
需要grpc负载均衡如何做
DNS需求
与上下游服务的关系
3. metrics-server
工作原理
metrics-server通过aggregated方式嵌入APIserver后端
metrics-server从kubelet收集资源指标,然后对监控指标数据进行聚合(依赖kube-aggregator),并在apiserver中通过Metrics API(/apis/metrics.k8s.io/)公开暴露,metrics-server只存储最新的指标数据(CPU/Memory)
metrics-server工作的前提条件
- kube-apiserver可以访问到metrics-server
- kube-apiserver启用聚合层
- 组件要有认证配置并且绑定到metrics-server
- Pod/Node指标需要由Summary API通过kubelet公开
通过以下 kube-apiserver 标志启用聚合层。 你的服务提供商可能已经为你完成了这些工作:
--requestheader-client-ca-file=<path to aggregator CA cert>
--requestheader-allowed-names=front-proxy-client
--requestheader-extra-headers-prefix=X-Remote-Extra-
--requestheader-group-headers=X-Remote-Group
--requestheader-username-headers=X-Remote-User
--proxy-client-cert-file=<path to aggregator proxy cert>
--proxy-client-key-file=<path to aggregator proxy key>
本质
# 直接调用metrics数据
kubectl get --raw "/api/v1/nodes/node1/proxy/metrics/resource"
# top node
kubectl top node
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
kubernetes-master 247m 12% 2948Mi 76%
kubernetes-worker 141m 7% 2095Mi 54%
# top pod
kubectl top pod
NAME CPU(cores) MEMORY(bytes)
httpserver-deployment-7c7c569567-j8l8g 2m 8Mi
httpserver-deployment-7c7c569567-lmxsm 3m 7Mi
安装
module11/metricsserver