如何更改 Kubernetes 中运行的 Pod 限制?

Posted

技术标签:

【中文标题】如何更改 Kubernetes 中运行的 Pod 限制?【英文标题】:How to change running pods limits in Kubernetes? 【发布时间】:2019-04-26 04:23:19 【问题描述】:

我有一个由虚拟机组成的自制 Kubernetes 集群。我的问题是,coredns pod 总是处于 CrashLoopBackOff 状态,过了一会儿它们又回到了 Running 状态,因为什么也没发生。我找到但无法尝试的一种解决方案是将默认内存限制从 170Mi 更改为更高。由于我不是这方面的专家,我认为这不是一件难事,但我不知道如何更改正在运行的 pod 的配置。这可能是不可能的,但必须有一种方法可以使用新配置重新创建它们。我尝试使用 kubectl 补丁,也查找了滚动更新,但我就是想不通。如何更改限制?

这是 pod 数据的相关部分:

apiVersion: v1
kind: Pod
metadata:
  annotations:
    cni.projectcalico.org/podIP: 176.16.0.12/32
  creationTimestamp: 2018-11-18T10:29:53Z
  generateName: coredns-78fcdf6894-
  labels:
    k8s-app: kube-dns
    pod-template-hash: "3497892450"
  name: coredns-78fcdf6894-gnlqw
  namespace: kube-system
  ownerReferences:
  - apiVersion: apps/v1
    blockOwnerDeletion: true
    controller: true
    kind: ReplicaSet
    name: coredns-78fcdf6894
    uid: e3349719-eb1c-11e8-9000-080027bbdf83
  resourceVersion: "73564"
  selfLink: /api/v1/namespaces/kube-system/pods/coredns-78fcdf6894-gnlqw
  uid: e34930db-eb1c-11e8-9000-080027bbdf83
spec:
  containers:
  - args:
    - -conf
    - /etc/coredns/Corefile
  image: k8s.gcr.io/coredns:1.1.3
  imagePullPolicy: IfNotPresent
  livenessProbe:
    failureThreshold: 5
    httpGet:
      path: /health
      port: 8080
      scheme: HTTP
    initialDelaySeconds: 60
    periodSeconds: 10
    successThreshold: 1
    timeoutSeconds: 5
  name: coredns
  ports:
  - containerPort: 53
    name: dns
    protocol: UDP
  - containerPort: 53
    name: dns-tcp
    protocol: TCP
  - containerPort: 9153
    name: metrics
    protocol: TCP
  resources:
    limits:
      memory: 170Mi
    requests:
      cpu: 100m
      memory: 70Mi

编辑: 事实证明,在 Ubuntu 中,网络管理器的 dnsmasq 让 Corends pod 发疯,所以在 /etc/NetworkManager/NetworkManager.conf 中我注释掉了 dnsmasq 行,重启后一切正常。

【问题讨论】:

【参考方案1】:

您必须在 coredns 部署定义中编辑 coredns pod 的模板:

kubectl edit deployment -n kube-system coredns

使用 coredns 部署打开默认编辑器后,您将在 templateSpec 中找到负责设置内存和 cpu 限制的部分。

【讨论】:

谢谢,我找不到这样简单的描述。 通常 coredns 部署为静态 pod。这意味着 coredns 清单文件物理存储在 master 中,如果您使用 usr kubeadm 来引导您的集群。修改静态 pod 文件将自动重启 pod。 kube 控制器管理器 kube-scheduler 也是如此。

以上是关于如何更改 Kubernetes 中运行的 Pod 限制?的主要内容,如果未能解决你的问题,请参考以下文章

当我们扩展 kubernetes 部署并更改其中一个 pod 或容器配置时会发生啥?

如何优雅的限制 Kubernetes 节点上运行的 Pod 数量

如何滚动重启pod而不改变kubernetes(k8s)中的部署yaml?

在暂停部署期间更改副本立即创建/删除 pod,但在 kubernetes 官方文档中未指定

如何在 Kubernetes Horizo​​ntal Pod Autoscaling 中排除一些容器的指标

Kubernetes如何管理pod更高可用