标签: kubernetes-deployment

preStop钩子和terminationGracePeriodSeconds之间的关系

基本上我想做的是研究 Pod 生命周期,并检查我们是否可以在 Pod 终止之前进行一些清理/备份,例如复制日志。

我需要什么:在终止之前将日志/堆转储从容器复制到主机路径/S3

我尝试过的:

我使用了带有 bash 命令的 preStop 钩子来回显一条消息(只是为了看看它是否有效!!)。使用带有延迟的终止GracePeriodSeconds 来预停止并切换它们以查看进程是否有效。前任。保持终止GracePeriodSeconds:30秒(默认)并将preStop命令设置为休眠50秒,并且不应生成该消息,因为容器将在那时终止。这按预期工作。

我的问题:

  • preStop 钩子允许(推荐)什么样的进程?因为复制 15 GB 或更多的日志/堆转储将花费大量时间。该时间将用于定义终止GracePeriodSeconds
  • 当 preStop 花费的时间超过设置的 GracePeriod 时会发生什么?(如果日志很大,比如 10 场)
  • 如果我没有任何钩子但仍设置终止GracePeriodSeconds 会发生什么?容器会一直保持到宽限期吗?

我发现这篇文章与此密切相关,但无法通过https://github.com/kubernetes/kubernetes/issues/24695

所有投入表示赞赏!

kubernetes devops minikube kubernetes-deployment kubernetes-pod

5
推荐指数
1
解决办法
3308
查看次数

无法创建请求超过2Gi内存的部署

由于内存消耗,我的部署窗口被驱逐:

  Type     Reason   Age   From                                             Message
  ----     ------   ----  ----                                             -------
  Warning  Evicted  1h    kubelet, gke-XXX-default-pool-XXX  The node was low on resource: memory. Container my-container was using 1700040Ki, which exceeds its request of 0.
  Normal   Killing  1h    kubelet, gke-XXX-default-pool-XXX  Killing container with id docker://my-container:Need to kill Pod
Run Code Online (Sandbox Code Playgroud)

我尝试通过在我的部署中添加以下内容来为其提供更多内存yaml:

apiVersion: apps/v1
kind: Deployment
...
spec:
  ...
  template:
    ...
    spec:
      ...
      containers:

      - name: my-container
        image: my-container:latest
        ...
        resources:
          requests:
            memory: "3Gi"
Run Code Online (Sandbox Code Playgroud)

但是,它未能部署:

  Type     Reason             Age               From                Message
  ----     ------ …
Run Code Online (Sandbox Code Playgroud)

kubernetes google-kubernetes-engine kubernetes-deployment kubernetes-pod

5
推荐指数
1
解决办法
365
查看次数

将 java_opts 传递给 kubernetes 中的 spring boot 应用程序

目前,我们正在使用入口点构建 Docker 映像,并将该映像传递到 Kubernetes 部署。

有没有办法将入口点直接动态传递给 Kubernetes,以便它启动 Spring Boot 应用程序?

在 Kubernetes 中直接传递此入口点有哪些不同方法?

### Runtime image ###
FROM openjdk:8-jre-alpine

#Set working dir
WORKDIR /test

# Copy the executable JAR
COPY /*.jar /test/

# Run the app
ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -Djsversion=1.0 -D<variable>=<service-1> -D<variable>=<service-2>   -jar  *.jar
Run Code Online (Sandbox Code Playgroud)

docker spring-boot kubernetes kubernetes-deployment kubernetes-pod

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

Kubernetes 上无状态应用程序的 StatefulSet 与 Deployment

我发现大量文章和文档描述了 Kubernetes 上有状态应用程序的 StatefulSet 相对于 Deployment 的优势。我无法弄清楚的是相反的情况:与 Deployments 相比,StatefulSet 的缺点,特别是对于无状态应用程序。

有人可以解释一下为什么不总是对有状态和无状态应用程序使用 StatefulSets 吗?

kubernetes kubernetes-deployment kubernetes-statefulset

5
推荐指数
1
解决办法
1041
查看次数

为什么我的部署/复制集控制器不会干扰使用相同选择器创建的 Pod?

我正在尝试测试在使用完全相同的选择器创建两个部署时部署控制器争夺 P​​od 的理论。

\n

这是我的deployment.yaml

\n
apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: deployment\nspec:\n  replicas: 3\n  selector:\n    matchLabels:\n      app: app\n  template:\n    metadata:\n      labels:\n        app: app\n    spec:\n      containers:\n      - name: busybox-container\n        image: busybox\n        command: ["/bin/sh"]\n        args: ["-c", "sleep 10m"]\n        resources:\n          limits:\n            memory: "128Mi"\n            cpu: "500m"\n        ports:\n          - containerPort: 8080\n
Run Code Online (Sandbox Code Playgroud)\n

deployment1.yamlmetadata.name仅与具有该值deployment-1spec.replicas设置为 1 的字段不同。

\n

我这样连续创建部署:

\n
\xe2\x9d\xaf kubectl create -f deployment.yaml; kubectl create -f deployment1.yaml\ndeployment.apps/deployment created\ndeployment.apps/deployment-1 created\n\n\xe2\x9d\xaf kubectl get all\nNAME                                READY   STATUS    RESTARTS   AGE\npod/deployment-1-7d95ff89fc-p6fg7   1/1     Running   0 …
Run Code Online (Sandbox Code Playgroud)

kubernetes kubernetes-deployment

5
推荐指数
1
解决办法
818
查看次数

kubernetes - 将容器信息暴露为环境变量

我试图将一些容器信息公开为环境变量,从 pod 的 spec.template.spec.containers[0].name 读取值,这似乎不起作用。用于引用部署模板中的容器字段的 apiSpec 是什么。部署模板如下:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      creationTimestamp: null
      labels:
        run: nginx
      name: nginx
    spec:
      replicas: 2
      selector:
        matchLabels:
          run: nginx
              strategy: {}
       template:
         metadata:
           creationTimestamp: null
            labels:
             run: nginx
        spec:
          containers:
           - image: nginx
            name: nginx
              ports:
             - containerPort: 8000
             resources: {}
            env:
             - name: MY_CONTAINER_NAME
                valueFrom:
                  fieldRef:
                    fieldPath: spec.template.spec.containers[0].name
Run Code Online (Sandbox Code Playgroud)

kubernetes kubernetes-deployment

4
推荐指数
1
解决办法
1012
查看次数

版本“v1”中的部署不能作为部署处理:

helm 安装失败并出现以下错误

命令

helm install --name helloworld helm
Run Code Online (Sandbox Code Playgroud)

以下是我运行上述命令后出现的错误

Error: release usagemetrics failed: Deployment in version "v1" cannot be handled as a Deployment: v1.Deployment.Spec: v1.DeploymentSpec.Template: v1.PodTemplateSpec.Spec: v1.PodSpec.Containers: []v1.Container: v1.Container.LivenessProbe: readObjectStart: expect { or n, but found 9, error found in #10 byte of ...|ssProbe":9001,"name"|..., bigger context ...|"imagePullPolicy":"IfNotPresent","livenessProbe":9001,"name":"usagemetrics-helm","ports":[{"containe|...
Run Code Online (Sandbox Code Playgroud)

下面是deployment.yaml 文件,我觉得活性和探测配置存在问题。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: release-name-helm
spec:
  replicas: 1
  selector:
    matchLabels:
      app: release-name-helm
      release: release-name
  template:
    metadata:
      labels:
        app: release-name-helm
        release: release-name
    spec:
      containers:
        - name: release-name-helm
          imagePullPolicy: IfNotPresent
          image: …
Run Code Online (Sandbox Code Playgroud)

kubernetes kubernetes-helm kubernetes-deployment

4
推荐指数
1
解决办法
2万
查看次数

Kubernetes:如何在 configMap 中设置布尔类型变量

我想在 configMap(或秘密)中设置一个布尔变量:

apiVersion: v1
kind: ConfigMap
metadata:
  name: env-config
  namespace: mlo-stage
data:
  webpack_dev_server: false
Run Code Online (Sandbox Code Playgroud)

但是当我应用它时,我收到以下错误:

The request is invalid: patch: Invalid value: "map[data:map[webpack_dev_server:false] metadata:map[annotations:map[kubectl.kubernetes.io/last-applied-configuration:{ blah blah blah}]]]": unrecognized type: string
Run Code Online (Sandbox Code Playgroud)

我试图将值更改为 Off/No/False,但都存在同样的问题。

好像data map中key的值只能是字符串,我试过把值改成“false”,yaml文件没问题,但是后来变量变成了字符串而不是boolean。

如果我想传递一个布尔值作为值应该怎么做?

kubernetes kubernetes-deployment kubernetes-secrets configmap

4
推荐指数
1
解决办法
4710
查看次数

将 kubernetes 部署缩减至 0 并缩减至原始副本集数量

我编写了一个 bash 脚本来获取 kubernetes 集群上的所有部署。我有一个命令可以将所有部署缩放为零。我面临的挑战是,我希望能够遍历所有部署并保存它们的名称和副本数量,以便在缩小后将它们缩放回原始。

我如何做到这一点?这就是我迄今为止所做的。

$ kubectl get deployments
$ kubectl scale deploy -n default  --replicas=0 --all
Run Code Online (Sandbox Code Playgroud)

kubernetes google-kubernetes-engine kubectl kubernetes-deployment

4
推荐指数
2
解决办法
4369
查看次数

如何通过 CLI 覆盖 helm 环境变量?

我正在使用 helm 环境变量来覆盖我的一些 spring boot application.yaml 配置,并且它工作得很好。

helm install deploy-name-1 mychartname --values=.helm/deployment/values.yaml
Run Code Online (Sandbox Code Playgroud)

值.yaml

env:
  - name: WORD
    value: hello
Run Code Online (Sandbox Code Playgroud)

在执行 helm install 命令时,我可以看到在 helm 部署期间选择了正确的单词,这一切都很好。

但是我想通过 CLI 上的 helm install 命令覆盖此环境变量“WORD”的值。在尝试时我面临以下错误......

命令(取自此处):

helm install deployment2 mychartname --values=.helm/deployment/values.yaml --set env.WORD=tree
Run Code Online (Sandbox Code Playgroud)

错误

panic: interface conversion: interface {} is []interface {}, not map[string]interface {}

goroutine 1 [running]:
helm.sh/helm/v3/pkg/strvals.(*parser).key(0xc0004eff60, 0xc000538840, 0x1592d34, 0x1838b20)
        /home/circleci/helm.sh/helm/pkg/strvals/parser.go:211 +0xdf1
helm.sh/helm/v3/pkg/strvals.(*parser).parse(0xc0004eff60, 0xc000538840, 0x0)
        /home/circleci/helm.sh/helm/pkg/strvals/parser.go:133 +0x3f
helm.sh/helm/v3/pkg/strvals.ParseInto(0xc0000b60c0, 0x23, 0xc000538840, 0x0, 0x0)
        /home/circleci/helm.sh/helm/pkg/strvals/parser.go:70 +0xc5
helm.sh/helm/v3/pkg/cli/values.(*Options).MergeValues(0xc000080c60, 0xc0004efb40, 0x1, 0x1, 0x0, 0x0, …
Run Code Online (Sandbox Code Playgroud)

yaml environment-variables command-line-interface kubernetes-helm kubernetes-deployment

4
推荐指数
1
解决办法
1万
查看次数