小编Wil*_*ñez的帖子

Kubernetes,简单的 SpringBoot 应用 OOMKilled

我正在使用 OpenJDK 11 和一个非常简单的 SpringBoot 应用程序,它几乎唯一的功能就是启用了 SpringBoot 执行器,因此我可以调用/actuator/health等。

我在 GCE 上也有一个 kubernetes 集群,非常简单,只有一个带容器的 pod(当然包含这个应用程序)

我的配置有一些我想强调的关键点,它有一些要求和限制

resources:
  limits:
    memory: 600Mi
  requests:
    memory: 128Mi
Run Code Online (Sandbox Code Playgroud)

它有一个就绪探针

readinessProbe:
  initialDelaySeconds: 30
  periodSeconds: 30
  httpGet:
    path: /actuator/health
    port: 8080
Run Code Online (Sandbox Code Playgroud)

我还设置了一个 JVM_OPTS 之类的(我的程序显然正在使用)

env:
- name: JVM_OPTS
  value: "-XX:MaxRAM=512m"
Run Code Online (Sandbox Code Playgroud)

问题

我启动它,它每次都在大约 3 小时内被 OOMKilled!

我从不自己调用任何东西,唯一的调用是 kubernetes 每 30 秒进行一次就绪探测,这足以耗尽内存吗?我也没有实现任何不寻常的东西,只是一个 Get 方法,它在所有 SpringBoot 导入中说 hello world 以拥有执行器

如果我运行 kubectl top pod XXXXXX 我实际上会看到逐渐变得越来越大

我尝试了很多不同的配置、技巧等,但似乎任何东西都适用于基本的 SpringBoot 应用程序

有没有办法以 Java 可以引发 OutOfMemory 异常的方式实际硬限制内存?还是为了防止这种情况发生?

提前致谢


编辑:运行 15 小时后

NAME …
Run Code Online (Sandbox Code Playgroud)

java docker kubernetes

13
推荐指数
1
解决办法
3878
查看次数

连接到 postgresql CloudSQL 实例时出现奇怪的 googleapi Err 400 消息

尝试使用cloud_sql_proxy机制连接到 CloudSQL 实例时,我收到一个奇怪的 Err 400 缺少项目参数

我有一个带有可用 CloudSQL postgres 数据库的 GCE 项目,我在计算 api 上的应用程序可以使用它,我可以从我在 GCE 项目中配置的任何 VM 执行常规 psql。

但是,当我尝试使用 cloud_sql_proxy 从我的笔记本电脑连接到数据库时,我收到了这个奇怪的错误。

我正在按照本文档的说明进行操作:https : //cloud.google.com/sql/docs/postgres/connect-admin-proxy#install

因此,按照该文档,我有:

  1. CloudSQL 已启用并按照我的评论工作
  2. 已安装代理
  3. 我创建了一个服务帐户,如文档所述,具有 Cloud SQL Admin 角色,如下所示:
{
  "type": "service_account",
  "project_id": "my-proyect-21432",
  "private_key_id": "<hidden intentionally>",
  "private_key": "<hidden intentionally>",
  "client_email": "cloudsql-serviceaccount@my-proyect-21432.iam.gserviceaccount.com",
  "client_id": "<hidden intentionally>",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/cloudsql-serviceaccount@my-proyect-21432.iam.gserviceaccount.com"
}
Run Code Online (Sandbox Code Playgroud)
  1. 我成功启动了cloud_sql_proxy如下:
user@hostname:~$ ./cloud_sql_proxy -instances=db1=tcp:15432 -credential_file=my-proyect-21432.json
2019/05/29 10:17:25 Rlimits for file descriptors set to {&{8500 65536}}
2019/05/29 …
Run Code Online (Sandbox Code Playgroud)

postgresql google-compute-engine gcloud

5
推荐指数
2
解决办法
1108
查看次数

问:如何使用 ingress-nginx 重写多个路径中的单个路径

我的 Ingress 上已经有很多域和很多路径,因为这是一个包含许多微服务的环境。

我如何以某种方式编辑我的入口,例如当有人访问路径时/servicex它会得到/serviceb

我当前的入口如下(为简单起见,我省略了其他主机的一些路径)

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: main-ingress
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    nginx.ingress.kubernetes.io/force-ssl-redirect: "false"
    nginx.ingress.kubernetes.io/proxy-body-size: "100m"
    nginx.ingress.kubernetes.io/max-worker-connections: "0"
    nginx.ingress.kubernetes.io/max-worker-open-files: "0"
    nginx.ingress.kubernetes.io/client-header-buffer-size: "4k"
spec:
  tls:
  - hosts:
    - subdomain-a.domain.com
    - subdomain-b.domain.com
    - subdomain-c.domain.com
    - subdomain-d.domain.com
    - subdomain-e.domain.com
    secretName: domain-com-secret
  rules:
  - host: subdomain-a.domain.com
    http:
      paths:
        - path: /
          pathType: Prefix
          backend:
            service:
              name: default-service
              port:
                number: 80
        - path: /serviceb
          pathType: Prefix
          backend:
            service:
              name: b-service
              port:
                number: 80
        - path: /servicec
          pathType: Prefix
          backend: …
Run Code Online (Sandbox Code Playgroud)

nginx kubernetes ingress-nginx

3
推荐指数
1
解决办法
6217
查看次数