我正在尝试修补minikube虚拟机之后的nginx入口控制器。
使用以下命令修补成功:
$ kubectl patch deployment nginx-ingress-controller --type 'json' --namespace kube-system -p '[{"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "--profiling"}]'
#-> deployment.extensions/nginx-ingress-controller patched
修补后,先前的状态会自动回滚。如果在部署后立即进行检查,我可以看到配置仍然存在(如下所示)
$ kubectl describe deployment/nginx-ingress-controller --namespace kube-system
#--- snip
Args:
/nginx-ingress-controller
--default-backend-service=$(POD_NAMESPACE)/default-http-backend
--configmap=$(POD_NAMESPACE)/nginx-load-balancer-conf
--tcp-services-configmap=$(POD_NAMESPACE)/tcp-services
--udp-services-configmap=$(POD_NAMESPACE)/udp-services
--annotations-prefix=nginx.ingress.kubernetes.io
--report-node-internal-ip-address
--profiling
#---
回滚后,配置被重置:
$ kubectl describe deployment/nginx-ingress-controller --namespace kube-system
#--- snip
Args:
/nginx-ingress-controller
--default-backend-service=$(POD_NAMESPACE)/default-http-backend
--configmap=$(POD_NAMESPACE)/nginx-load-balancer-conf
--tcp-services-configmap=$(POD_NAMESPACE)/tcp-services
--udp-services-configmap=$(POD_NAMESPACE)/udp-services
--annotations-prefix=nginx.ingress.kubernetes.io
--report-node-internal-ip-address
#---
我在日志中看不到任何错误,应该触发回滚。在回滚之前,我唯一能看到的是由于配置更改,部署触发了Pod的关闭。
答案 0 :(得分:1)
由于minikube仅运行1个节点,并且入口使用hostPort,滚动更新将不适用于入口部署。
修补入口以使用recreate进行修补后,修补入口配置即可按预期工作。
将入口控制器设置为“重新创建”的命令:
kubectl patch deployment nginx-ingress-controller --type 'json' --namespace kube-system -p '[{"op": "replace", "path": "/spec/strategy/type", "value": "Recreate"}, {"op": "replace", "path": "/spec/strategy/rollingUpdate", "value": null }]'
在nginx-ingress-controller上设置调试输出日志记录的命令:
kubectl patch deployment nginx-ingress-controller --type 'json' --namespace kube-system -p '[{"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "-v=5"}]'
入口控制器现在具有调试日志输出,并且设置为在配置或映像更改时重新创建。