2

我有一个已经在 Minikube (v0.23.0) 节点上运行的 Kubernetes pod。

一些上下文:它是通过启用插件创建的 coredns pod。我正在阅读这篇博文,试图为我的 Kubernetes 集群设置自定义 DNS 条目:https ://coredns.io/2017/05/08/custom-dns-entries-for-kubernetes/

我可以毫无问题地替换配置图;我更改了博客文章中的模板规范以满足我的需要并运行:

kubectl create -f configmap.yml -o yaml --dry-run | kubectl replace -f -

这似乎奏效了;我使用 kubectl 检查了 configmap,一切看起来都很好。

但是我不确定如何更新卷。我试着把这样的东西放在一个文件中:

apiVersion: v1
kind: Pod
metadata:
  labels:
    k8s-app: coredns
  namespace: kube-system
spec:
  containers:
  - name: coredns
  volumes:
  - configMap:
      items:
      - key: Corefile
        path: Corefile
      - key: cluster.db
        path: cluster.db
      name: coredns
    name: config-volume

然后我尝试应用它:

kubectl create -f k8s_config/coredns/volumes.yml -o yaml --dry-run | kubectl apply -f -

但这给出了这个错误信息:

error: error when retrieving current configuration of:
&{0xc4218be840 0xc420213500 kube-system  STDIN 0xc421a9e5e0 0xc421a9e5e0  false}
from server for: "STDIN": resource name may not be empty

我还尝试将 coredns pod 的内容转储到文件中,相应地更改卷部分,然后替换 pod,但收到以下消息:

The Pod "coredns-6b4fd7784-xhb5s" is invalid: spec: Forbidden: pod updates may not change fields other than `spec.containers[*].image`, `spec.initContainers[*].image`, `spec.activeDeadlineSeconds` or `spec.tolerations` (only additions to existing tolerations)

如果没有删除 pod 并将其恢复,我应该如何更新 Pod 中的卷?甚至可能吗?

我想另一个首要问题是:更新/配置corednspod/插件的正确方法是什么?我似乎无法在任何地方找到指南。在博客文章中,它说以下内容:

要创建新区域,我们需要修改coredns.yaml我们一直用来在 pod 中创建附加文件的文件。

然而,这一定是在 Kubernetes 中手动设置 coredns 时产生的,现在它作为插件“正常工作”,我不知道如何配置它。

4

1 回答 1

1

查看 Pod 名称coredns-6b4fd7784-xhb5s,看起来您的 CoreDNS Pod 实际上是由部署控制器管理的。

不要直接修改部署控制器管理的 Pod。要编辑部署管理的 Pod,请编辑部署对象本身 ( kubectl -n kube-system edit deployment coredns) 并修改spec.template属性。编辑部署后,控制器将删除旧的 pod 并使用更新的规范创建一个新的。

如果你只是简单地更新了一个 ConfigMap 对象并希望 CoreDNS Pod 接收到新的内容,那么简单地删除旧的 Pod 也足够了;部署控制器将使用最新版本的 ConfigMap 创建一个新控制器。

如果您担心删除 CoreDNS Pod 可能导致服务中断,请考虑将部署的spec.replica值增加到高于 1 的值。

于 2017-11-16T20:59:00.947 回答