Q's blog

一些个人文档笔记

早期时候,容器内运行Java应用程序时,Jvm无法感知容器环境存在,所以对容器资源的限制比如内存或者cpu等都无法生效。

原因是容器的资源管理使用了操作系统cgroup机制,但是Jvm无法感知cgroup。

所以可能需要在jvm以及docker中指定两次内存限制。

后来,在Jvm9及以后,Jvm开始了对容器资源限制的支持。在Jvm11中,可以使用-XX:+UseContainerSupport参数来制定Jvm使用容器内存。

另外还有两个参数-XX:InitialRAMPercentage -XX:MaxRAMPercentage来制定Jvm使用容器内存的百分比。

1
2
3
-XX:+UseContainerSupport  #开启容器支持
-XX:InitialRAMPercentage=50 #初始使用百分比
-XX:MaxRAMPercentage=80 #最大使用百分比
1
2
3
jinfo -flags pid  #查看启动参数
jcmd pid VM.flags
jmap -heap pid #jhsdb jmap --heap --pid 1
阅读全文 »

Curl 纯文本格式输出:

1
2
3
4
5
6
7
curl icanhazip.com
curl ifconfig.me
curl curlmyip.com
curl ip.appspot.com
curl ipinfo.io/ip
curl ipecho.net/plain
curl www.trackip.net/i
阅读全文 »

一旦启动探针探测成功之后,就会被livenessProbe接管,以下是1.17支持的三种probe example

阅读全文 »

HPA 控制器与聚合 API 获取到 Pod 性能指标数据之后,基于下面的算法计算出目标 Pod 副本数量,与当前运行的 Pod 副本数量进行对比,决定是否需要进行扩缩容操作:

1
2
desiredReplicas = ceil[currentReplicas * ( currentMetricValue / desiredMetricValue )]
即当前副本数 * (当前指标值/期望的指标值),将结果向上取整
阅读全文 »

11074

image-20200818164927016

8919

image-20200820233915655

通过eureka测试pod生命周期:

两种情况

一:

1
2
3
4
5
前提:
守护进程pid为1
无lifecycle.preStop
测试结果:
容器可以正常关闭,eureka可以正常摘除

1
2
3
4
5
6
7
8
9
10
11
12
13
前提:
守护进程pid为1
有lifecycle.preStop
lifecycle:
preStop:
exec:
command:
- "sh"
- "-c"
- |
sleep 30
测试结果:
容器无法正常关闭,eureka无法正常摘除

结论:preStop会覆盖pod第一次发送 SIGTERM -15 的信号,需在sleep后kill 1 #存疑:测试过程中会有sleep后SIGTERM 无法关闭应用的情况

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
lifecycle:
preStop:
exec:
command:
- bash
- -c
- 'curl -X POST --data DOWN http://127.0.0.1:8080/service-registry/instance-status -H
"Content-Type: application/vnd.spring-boot.actuator.v2+json;charset=UTF-8";sleep 30'

####### 参数解释
127.0.0.1:8080 #代表eureka地址
service-registry #代表注册中心
DOWN #执行down请求
sleep #等待30秒

curl -v -X DELETE http://192.168.3.34:20001/eureka/apps/MEMBER-SERVER/192.168.3.34:member-server:20021

参考https://kubernetes.io/zh/docs/tasks/inject-data-application/define-command-argument-container/

阅读全文 »

使用log-rotate

nginx命令和信号控制

  1. nginx -s stop 快速关闭,不管有没有正在处理的请求 nginx -s quit 优雅关闭方式,推出前完成已经接受的连接请求
  2. nginx -c nginx配置文件地址 启动
  3. nginx -s reload 重启
  4. nginx -s reopen 重新打开日志
  5. nginx -t 检查配置文件是否正确
  6. kill -INT pid 表示快速关闭
  7. kill -HUP pid表示重启
  8. 通过信号控制的方式实现和命令相同的功能

nginx内置变量

阅读全文 »

为ingress配置增加注解(annotations):nginx.ingress.kubernetes.io/ssl-redirect: ‘true’ 就可以实现http强制跳转至https

不过默认情况ingress是通过308重定向跳转到https, ie浏览器不一定支持308状态, 可以通过如下方式修改ingress配置,让ingress通过301跳转到https

阅读全文 »
0%