Недавно я обновил кластер Kubernetes с версии 1.5.3 до 1.6.1, используя kubeadm
.
Теперь я хотел бы обновить версию 1.6.1 до 1.6.2, но я столкнулся с этой ошибкой:
[root@master ~]#kubeadm upgrade plan --v=5
I1113 14:14:31.046080 8368 plan.go:67] [upgrade/plan] verifying health of cluster
I1113 14:14:31.046233 8368 plan.go:68] [upgrade/plan] retrieving configuration from cluster
[upgrade/config] Making sure the configuration is correct:
[upgrade/config] Reading configuration from the cluster...
[upgrade/config] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml'
I1113 14:14:31.111668 8368 common.go:122] running preflight checks
[preflight] Running pre-flight checks.
I1113 14:14:31.111843 8368 preflight.go:78] validating if there are any unsupported CoreDNS plugins in the Corefile
I1113 14:14:31.143841 8368 preflight.go:103] validating if migration can be done for the current CoreDNS release.
[preflight] Some fatal errors occurred:
[ERROR CoreDNSUnsupportedPlugins]: start version '' not supported
[ERROR CoreDNSMigration]: start version '' not supported
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
Кажется, что kubeadm
не может определить версию CoreDNS.
Вот конфигурация CoreDNS:
apiVersion: v1
data:
Corefile: |
.:53 {
errors
health
ready
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
fallthrough in-addr.arpa ip6.arpa
ttl 30
}
prometheus :9153
forward . /etc/resolv.conf
cache 30
loop
reload
loadbalance
}
kind: ConfigMap
metadata:
creationTimestamp: "2018-12-15T00:02:45Z"
name: coredns
namespace: kube-system
resourceVersion: "45537229"
selfLink: /api/v1/namespaces/kube-system/configmaps/coredns
uid: c01fbb58-fffc-11e8-9a01-005056a31666
Откуда читает номер версии? Или что я могу сделать, чтобы решить эту ошибку?
Наконец я обнаружил причину проблемы. В coredns
pod был отключен и не может восстановиться.
Итак, я удалил капсулу:
kubectl -n kube-system delete pod coredns-79ff88449c-4gjzs --grace-period=0 --force
А затем установил его вручную, используя deploy.sh
сценарий из https://github.com/coredns/deployment/tree/master/kubernetes как это:
./deploy.sh | kubectl apply -f -
Сейчас kubeadm upgrade
снова работает как шарм.
И кажется что kubeadm
читает версию CoreDNS из запущенного модуля.
Вы получили не удалось CoreDNSUnsupportedPlugins
чек из-за proxy
плагин, который был заменен на forward
плагин. Вот вы можете найти больше информации об этом.
Есть два способа решить эту проблему:
Один из них - игнорировать проверки, используя
--ignore-preflight-errors=CoreDNSUnsupportedPlugins
на момент обновления.
Второй - заменить proxy . /etc/resolv.conf
из coredns configMap с forward
Это должно выглядеть так:
forward . /etc/resolv.conf
Вы можете найти дополнительную информацию об этой же проблеме Вот