我有一个已经在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中的卷?它甚至可能吗?
我认为另一个首要问题是:更新/配置coredns
pod /插件的正确方法是什么?我似乎无法在任何地方找到指南。在博客文章中,它说:
要创建新区域,我们需要修改我们的
coredns.yaml
一直用来在pod中创建一个额外的文件。
然而,这必须来自于在Kubernetes中手动设置coredns,现在它已经正常运行"作为一个插件,我不知道如何配置它。
答案 0 :(得分:1)
查看Pod名称coredns-6b4fd7784-xhb5s
,看起来您的CoreDNS Pod实际上由Deployment controller管理。
请勿直接修改部署控制器管理的Pod。要编辑部署管理的Pod,请编辑部署对象本身(kubectl -n kube-system edit deployment coredns
)并修改spec.template
属性。编辑部署后,控制器将删除旧pod并使用更新的规范创建一个新pod。
如果您只是更新了ConfigMap对象并希望CoreDNS Pod接收新内容,那么它也足以删除旧Pod;部署控制器将使用最新版本的ConfigMap创建一个新的。
如果您因删除CoreDNS Pod而担心可能的服务中断,请考虑将部署的spec.replica
值增加到高于1的值。