Kubernetes 从 1.8.7 升级到 1.13.0

Kubenetes upgrade from 1.8.7 to 1.13.0

上下文

我们目前在 kubernetes(v1.8.7) 上有 3 个稳定的集群。这些集群是由一个不再可用的外部团队创建的,我们的文档也很有限。我们正在尝试升级到更高的稳定版本 (v1.13.0)。我们知道我们需要一次升级 1 个版本,因此 1.8 -> 1.9 -> 1.10 等等。

已解决的问题

  1. 关于如何从 1.8 升级到 1.9 的任何指示?
  2. 我们尝试安装 kubeadm v1.8.7 & 运行 kubeadm upgrade plan,但失败并输出 -

    [预检] 运行 预检 无法从文件“/etc/kubernetes/admin.conf”创建 Kubernetes 客户端:无法加载管理 kubeconfig [打开 /etc/kubernetes/admin.conf:没有这样的文件或目录]
    我们找不到文件 admin.conf。关于我们如何重新生成它或它需要什么信息的任何建议?

新问题

因为我们现在有了 admin.conf 文件,所以我们安装了 kubectl、kubeadm 和 kubelet v 1.9.0 -
apt-get install kubelet=1.9.0-00 kubeadm=1.9.0-00 kubectl=1.9.0-00

当我运行kubeadm upgrade plan v1.9.0
我得到

root@k8s-master-dev-0:/home/azureuser# kubeadm upgrade plan v1.9.0
[preflight] Running pre-flight checks.
[upgrade] Making sure the cluster is healthy:
[upgrade/health] FATAL: [preflight] Some fatal errors occurred:
        [ERROR APIServerHealth]: the API Server is unhealthy; /healthz didn't return "ok"
        [ERROR MasterNodesReady]: couldn't list masters in cluster: Get https://<k8s-master-dev-0 ip>:6443/api/v1/nodes?labelSelector=node-role.kubernetes.io%2Fmaster%3D: dial tcp <k8s-master-dev-0 ip>:6443: getsockopt: connection refused
[preflight] If you know what you are doing, you can make a check non-fatal with --ignore-preflight-errors=...  

root@k8s-master-dev-0:/home/azureuser# kubectl get pods -n kube-system
NAME                                       READY     STATUS    RESTARTS   AGE
heapster-75f8df9884-nxn2z                  2/2       Running   0          42d
kube-addon-manager-k8s-master-dev-0        1/1       Running   2          1d
kube-addon-manager-k8s-master-dev-1        1/1       Running   4          123d
kube-addon-manager-k8s-master-dev-2        1/1       Running   2          169d
kube-apiserver-k8s-master-dev-0            1/1       Running   100        1d
kube-apiserver-k8s-master-dev-1            1/1       Running   4          123d
kube-apiserver-k8s-master-dev-2            1/1       Running   2          169d
kube-controller-manager-k8s-master-dev-0   1/1       Running   3          1d
kube-controller-manager-k8s-master-dev-1   1/1       Running   4          123d
kube-controller-manager-k8s-master-dev-2   1/1       Running   4          169d
kube-dns-v20-5d9fdc7448-smf9s              3/3       Running   0          42d
kube-dns-v20-5d9fdc7448-vtjh4              3/3       Running   0          42d
kube-proxy-cklcx                           1/1       Running   1          123d
kube-proxy-dldnd                           1/1       Running   4          169d
kube-proxy-gg89s                           1/1       Running   0          169d
kube-proxy-mrkqf                           1/1       Running   4          149d
kube-proxy-s95mm                           1/1       Running   10         169d
kube-proxy-zxnb7                           1/1       Running   2          169d
kube-scheduler-k8s-master-dev-0            1/1       Running   2          1d
kube-scheduler-k8s-master-dev-1            1/1       Running   6          123d
kube-scheduler-k8s-master-dev-2            1/1       Running   4          169d
kubernetes-dashboard-8555bd85db-4txtm      1/1       Running   0          42d
tiller-deploy-6677dc8d46-5n5cp             1/1       Running   0          42d

让我们一步步来,首先在您的集群中生成 admin.conf 文件: 您可以使用以下命令生成 admin.conf 文件:

kubeadm alpha phase kubeconfig admin --cert-dir /etc/kubernetes/pki --kubeconfig-dir /etc/kubernetes/

现在,你可以看看我下面的回答how to upgrade kubernetes cluster by kubeadm (答案是1.10.0 to 1.10.11 but it is also applicable to 1.8 to 1.9, you just ghange the version对于您下载的包)

希望对您有所帮助。

Any pointers on how to upgrade from 1.8 to 1.9 ?

绝对kubeadm

We tried to install kubeadm v1.8.7 & run kubeadm upgrade plan, but it fails with output -

[preflight] Running pre-flight checks couldn't create a Kubernetes client from file "/etc/kubernetes/admin.conf": failed to load admin kubeconfig [open /etc/kubernetes/admin.conf: no such file or directory] we can not find the file admin.conf. Any suggestions on how we can regenerate this or what information would it need ?

kubeadm 需要一些东西:

  1. ConfigMap 集群内
  2. 身份验证/凭据文件

首先,我会检查 kube-system 命名空间中的 kubeadm-config ConfigMap。如果存在,您应该能够相对轻松地继续。

如果不存在,您需要继续创建它。

kubeadm config upload from-flags 将是一个很好的起点。您可以从 systemd 单元文件中指定 kubelet 标志,这应该会让您保持良好状态。

https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-config/#cmd-config-from-flags

其次,kubeadm 需要一个带有凭据的 conf 文件。我想在您的 /etc/kubernetes 目录某处有其中之一;所以四处看看。

此文件看起来像您的本地 kubeconfigs,开头为:

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: