GKE: pods (do tnet application) часто перезапускаются с ошибкой 139 - PullRequest
0 голосов
/ 16 июня 2020

У меня частный кластер gke. Он содержит 3 узла (каждый имеет 2 процессора и 7,5 памяти) и реплику 3 модулей (это приложение ядра tnet). Я заметил, что мои контейнеры иногда перезапускаются с ошибкой 139 SIGSEGV. Это ошибка говорит о том, что существует проблема с доступом к памяти (ref - https://medium.com/better-programming/understanding-docker-container-exit-codes-5ee79a1d58f6#: ~: text = Exit% 20Code% 20139, -This% 20indicates% 20that & text = SIGSEGV% 20indicates% 20a% 20segmentation% 20fault, a% 20way % 20that s% 20not% 20allowed.):

"Это происходит, когда программа пытается получить доступ к области памяти, к которой ей не разрешен доступ, или пытается получить доступ к области памяти в недопустимый способ. "

У меня нет журналов приложения с ошибкой перед перезапуском контейнера, поэтому невозможно найти причину этого.

Я добавил свойство false в приложение но это не решило проблему.

Как я могу исправить эту проблему?

Манифест:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: stage-deployment
  namespace: stage
spec:
  replicas: 3
  minReadySeconds: 5
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0  
  selector:
    matchLabels:
      app: stage
  template:
    metadata:
      labels:
        app: stage
    spec:
      containers:
      - name: stage-container
        image: my.registry/stage/core:latest
        imagePullPolicy: "Always"
        ports:
        - containerPort: 5000
          name: http
        - containerPort: 22
          name: ssh
        readinessProbe:
          tcpSocket:
            port: 5000
          initialDelaySeconds: 5
          periodSeconds: 10
        livenessProbe:
          tcpSocket:
            port: 5000
          initialDelaySeconds: 5
          periodSeconds: 20
        env:
            - name: POSTGRES_DB_HOST
              value: 127.0.0.1:5432
            - name: POSTGRES_DB_USER
              valueFrom:
                secretKeyRef:
                  name: db-credentials
                  key: username
            - name: POSTGRES_DB_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: db-credentials
                  key: password
            - name: DB_NAME
              valueFrom:
                secretKeyRef:
                  name: db-credentials
                  key: dbname
      - name: cloudsql-proxy
        image: gcr.io/cloudsql-docker/gce-proxy:1.11
        command: ["/cloud_sql_proxy",
                  "-instances=my-instance:us-west1:dbserver=tcp:5432",
                  "-credential_file=/secrets/cloudsql/credentials.json"]
        volumeMounts:
          - name: instance-credentials
            mountPath: /secrets/cloudsql
            readOnly: true
      volumes:
        - name: instance-credentials
          secret:
            secretName: instance-credentials
      imagePullSecrets:
      - name: regcred
---

apiVersion: v1
kind: Service
metadata:
  name: stage-service
  namespace: stage
spec:
  type: NodePort
  selector:
    app: stage
  ports:
    - protocol: TCP
      port: 80
      targetPort: 5000
      name: https
---

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    nginx.ingress.kubernetes.io/proxy-body-size: 300m
    nginx.ingress.kubernetes.io/proxy-buffer-size: 128k
    nginx.ingress.kubernetes.io/proxy-buffers-number: 4 256k
    nginx.org/client-max-body-size: 1000m
  name: ingress
  namespace: stage
spec:
  rules:
    - host: my.site.com
      http:
        paths:
        - backend:
            serviceName: stage-service
            servicePort: 80
  tls:
    - hosts:
        - my.site.com
      secretName: my-certs
...