使用环境:阿里云的容器服务-kubernetes
1.ingress使用独立机器部署,配置根据业务量进行评估。前端slb使用按量付费,规格拉到最高(实际按使用量计费)。
2.coreDNS的数量不能过少,一般是业务pod总数的10%。
3.java服务的pod,requests和limits的值必须保持一致。
4.java服务一定要配置合适的JVM参数,尤其注意node如果是高配置机器,需要使用
-XX:ActiveProcessorCount=
M
Y
C
P
U
L
I
M
I
T
获
取
到
实
际
划
分
给
p
o
d
的
c
p
u
核
数
。
−
X
X
:
M
a
x
R
A
M
P
e
r
c
e
n
t
a
g
e
=
MY_CPU_LIMIT 获取到实际划分给pod的cpu核数。 -XX:MaxRAMPercentage=
MYCPULIMIT获取到实际划分给pod的cpu核数。−XX:MaxRAMPercentage=MEM
-XX:InitialRAMPercentage=
M
E
M
−
X
X
:
M
i
n
R
A
M
P
e
r
c
e
n
t
a
g
e
=
MEM -XX:MinRAMPercentage=
MEM−XX:MinRAMPercentage=MEM
注:$MEM按照内存百分比进行配置。
更加详细的jvm参数需要根据实际情况进行配置。
5.涉及到数据库密码等账号的配置,尽量使用ConfigMaps或者Secrets进行配置。
6.pod内核参数修改,建议使用init- container进行修改。直接植入到Dockerfile的方式会增加镜像的层数。
7.liveness和 readiness必须要配置,同时建议探测方式分别使用TCP和HTPP,不建议使用command方式。延迟探测时间需要根据业务实际启动时间进行配置,时间不能太长也不能太短,一般建议30S左右。
8.业务版本迭代方式,rollingUpdate并不能完全保证线上业务SLA,建议至少核心业务使用分批发布。
9.监控系统的选择及规划很重要,阿里云的k8s可以配置ack-node-problem-detector,打通到钉钉的事件报警。有条件的,可以用阿里云的应用实时监控。没条件的可以部署pinpoint进行监控。k8s集成了很多开源软件,支持一键部署,那么prometheus是一定要来一套的。
暂时想到这些,后期持续更新。