挑战

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

image.png

应用配置

传入方式

  • 环境变量
  • 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后端
image.png
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 标志启用聚合层。 你的服务提供商可能已经为你完成了这些工作:

  1. --requestheader-client-ca-file=<path to aggregator CA cert>
  2. --requestheader-allowed-names=front-proxy-client
  3. --requestheader-extra-headers-prefix=X-Remote-Extra-
  4. --requestheader-group-headers=X-Remote-Group
  5. --requestheader-username-headers=X-Remote-User
  6. --proxy-client-cert-file=<path to aggregator proxy cert>
  7. --proxy-client-key-file=<path to aggregator proxy key>

本质

  1. # 直接调用metrics数据
  2. kubectl get --raw "/api/v1/nodes/node1/proxy/metrics/resource"
  3. # top node
  4. kubectl top node
  5. NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
  6. kubernetes-master 247m 12% 2948Mi 76%
  7. kubernetes-worker 141m 7% 2095Mi 54%
  8. # top pod
  9. kubectl top pod
  10. NAME CPU(cores) MEMORY(bytes)
  11. httpserver-deployment-7c7c569567-j8l8g 2m 8Mi
  12. httpserver-deployment-7c7c569567-lmxsm 3m 7Mi

安装

module11/metricsserver

创建sa时会默认创建secret