跳转至

测试 Kubernetes 问题随笔


2020-03-02 by dongnan

k8s版本兼容性问题

确认,k8s集群添加新的节点时,k8s小版本需要保持一致,如v1.16.x 无法添加 v1.17.x

  • k8s版本号格式为x.y.z,其中x为大版本号、y为小版本号、z为补丁版本号。
  • 小版本大约每3个月发布一个,每个小版本分支会维护9个月。
  • 对于Docker 需要使用k8s支持的版本。(k8s v1.16支持的版本docker-ce 18.09)

详细说明请参考这里

按照项目(命名空间)进行用户授权

确认,可以与 Rancher 中的项目概念相结合按照项目(命名空间)进行授权。

举个栗子

项目ABC:

# 测试环境
K8S 创建命名空间 abc-test 。
Rancher 创建 abc项目,关联 abc-test 命名空间。
Rancher 创建用户 abc-user,分配到 abc项目,并交由开发人员使用。

# 生产环境
K8S 创建命名空间 abc-prod 。
Rancher 关联 abc-prod  命名空间到 Prod 项目(生产使用相同的项目)。
Rancher 使用管理员账户管理 Prod项目,并交由运维人员使用。

按照项目(命名空间)进行网络隔离

确认,使用网络策略(networkpolicies)进行pod级别网络隔离。

HTTP负载均衡方式

L4 或者 L7 的会话保持?

  • L4问题,HTTP/HTTPS 多端口,后端服务器需要绑定 SSL证书。
  • L7问题,nginx-inc 提供的 ingress controller,无法保持会话(plus需要收费)。

确认,使用 kubernets 提供的 ingress controller 解决此问题。

亲和性

Pod运行在特定的主机之上

确认,使用节点亲和性(nodeAffinity)调度策略,指定Pod运行特定主机节点。

Pod之间互斥性

确认,通过节点亲和性(nodeAffinity)相反条件实现反亲和性,使Pod之间不运行在同一个区域(主机)。

资源限制

确认,使用LimitRange功能配置某个命名空间内的资源限制规则。

挂载数据卷时的用户权限

确认,使用初始化容器,对数据卷进行配置(www-data)权限。

备份与恢复

确认,使用ECS快照+Rsync同步元数据的方式,详见 k8s元数据备份方案

Ingress 相关问题

Http 413 请求实体过大

两种解决方式:

ingress 规则添加注解(annotation):

    nginx.ingress.kubernetes.io/proxy-body-size: 100m

调整 ingress 控制器 configmaps 的参数

ingress controller configmaps
    proxy-body-size: "100m"

Http 504 网关超时问题

默认超时时间 60s,了可以调整超时参数:

annotation:
    nginx.ingress.kubernetes.io/proxy-send-timeout: "600"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "600"
    nginx.ingress.kubernetes.io/proxy-connect-timeout: "300"

gzip 重复压缩问题

返回多个 HTTP vary 头部。

# 关闭SLB 或者 ingress gzip 压缩。
# ingress 控制器 添加 configmaps 参数。
# use-gzip: 'false'

SLB 健康检查日志问题

K8S集群的 default svc 承担外部的SLB健康检查功能,由于外部SLB数量较多, 用于监控的/check.html 日志每分钟近千条,这些日志无效且占用大量磁盘空间,关闭它们。

# disable access log
# annotations:
#    nginx.ingress.kubernetes.io/enable-access-log: "false"

参考

回到页面顶部