kubeadmバージョン:1.10.2
環境:
数か月前、「公式」ドキュメントhttps://kubernetes.io/docs/setup/independent/high-availability/に従って、 kubeadm 1.9.3
を使用してkubernetes 1.9.3HAクラスターを作成しました。 etcd
静的ポッドを使用してマスターノードでホストしているHAクラスター
最新のkubeadm
を使用してクラスターをk8s 1.10.2
にアップグレードしたかった; kubeadm
更新した後、 kubeadm upgrade plan
を実行すると、次のエラーが発生しました。
[root@shared-cob-01 tmp]# kubeadm upgrade plan
[preflight] Running pre-flight checks.
[upgrade] Making sure the cluster is healthy:
[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'
[upgrade/plan] computing upgrade possibilities
[upgrade] Fetching available versions to upgrade to
[upgrade/versions] Cluster version: v1.9.3
[upgrade/versions] kubeadm version: v1.10.2
[upgrade/versions] Latest stable version: v1.10.2
[upgrade/versions] FATAL: context deadline exceeded
問題を調査したところ、2つの根本原因が見つかりました。
kubeadm
は、TLSが有効になっているとしてetcd
クラスターを識別しませんガイドは、 etcd
静的ポッドで次のコマンドを使用するように指示します
- etcd --name <name> \
- --data-dir /var/lib/etcd \
- --listen-client-urls http://localhost:2379 \
- --advertise-client-urls http://localhost:2379 \
- --listen-peer-urls http://localhost:2380 \
- --initial-advertise-peer-urls http://localhost:2380 \
- --cert-file=/certs/server.pem \
- --key-file=/certs/server-key.pem \
- --client-cert-auth \
- --trusted-ca-file=/certs/ca.pem \
- --peer-cert-file=/certs/peer.pem \
- --peer-key-file=/certs/peer-key.pem \
- --peer-client-cert-auth \
- --peer-trusted-ca-file=/certs/ca.pem \
- --initial-cluster etcd0=https://<etcd0-ip-address>:2380,etcd1=https://<etcd1-ip-address>:2380,etcd2=https://<etcd2-ip-address>:2380 \
- --initial-cluster-token my-etcd-token \
- --initial-cluster-state new
kubeadm >= 1.10
チェック(ここ:https://github.com/kubernetes/kubernetes/blob/release-1.10/cmd/kubeadm/app/util/etcd/etcd.go#L56) etcd
は、static podコマンドで次のフラグの存在を確認することにより、TLSを有効にします。
"--cert-file=",
"--key-file=",
"--trusted-ca-file=",
"--client-cert-auth=",
"--peer-cert-file=",
"--peer-key-file=",
"--peer-trusted-ca-file=",
"--peer-client-cert-auth=",
しかし、フラグ--client-cert-auth
と--peer-client-cert-auth
がパラメーターなしの命令で使用されているため(ブール値)、 kubeadm
はetcd
クラスターがTLSを持っていることを認識しませんkubeadm
た有効。
個人的な修正:
etcd
静的ポッドコマンドを更新して、 - --client-cert-auth=true
と- --peer-client-cert-auth=true
一般的な修正:
--client-cert-auth=true
と--peer-client-cert-auth=true
を使用するように手順を更新し、 "--peer-cert-file"
と"--peer-key-file"
を使用してkubeadmチェックを緩和します(等しいものなし)
kubeadm
が正しい証明書を使用しなかったポイント1を修正した後も、 kubeadm
が適切な証明書を使用していなかったため、問題は解決しませんでした。
実際、kubeadm HAガイドに従うと、作成される証明書はca.pem
ca-key.pem
peer.pem
peer-key.pem
client.pem
client-key.pem
しかし、最新のkubeadm
は、代わりにca.crt
ca.key``peer.crt
peer.key``healthcheck-client.crt
healthcheck-client.key
期待しています。
kubeadm-config
MasterConfigurationキーetcd.caFile
、 etcd.certFile
、およびetcd.keyFile
は無視されます。
個人的な修正:
.pem
証明書の名前を.crt
および.key
相当するものに変更し、それらを使用するようにetcd
静的ポッド構成を更新しました。
一般的な修正:
kubeadm-config
data.caFile
、 data.certFile
、およびdata.keyFile
値を使用して、etcd静的ポッド定義(ポッドパス+ボリュームhostPath)から適切な証明書を推測するか、作成します。アップグレード中に使用する新しい一時クライアント証明書。
アップグレード計画は正しく実行されている必要があります
https://kubernetes.io/docs/setup/independent/high-availability/に従ってkubeadm 1.9.3
を使用してk8s haクラスターを作成し、最新のkubeadm
を使用してk8s >= 1.10
に更新してみますkubeadm
この問題はkubeadm 1.10.3
で修正されているようですが、静的なetcd
ポッドは「外部」として認識されるため、自動的には更新されません。
kubeadm 1.10.3
を使用していますが、同じ問題が発生します。 私のクラスターは1.10.2で、外部のセキュアなetcdがあります
@brokenmassあなたが気付いた2番目の原因に対するあなたの
caFile: /etc/kubernetes/pki/etcd/ca.crt
certFile: /etc/kubernetes/pki/etcd/healthcheck-client.crt
keyFile: /etc/kubernetes/pki/etcd/healthcheck-client.key
@detiber助けてくれませんか?
@FloMedja
私の場合、値は次のようになります。
caFile: /etc/kubernetes/pki/etcd/ca.pem
certFile: /etc/kubernetes/pki/etcd/client.pem
keyFile: /etc/kubernetes/pki/etcd/client-key.pem
および1.10.3は正しく機能しています
@brokenmassしたがって、kubeadm 1.10.3を使用すると、個人的な修正を必要とせずにすべてが機能します。 この場合、私は少し混乱しています。 私はkubeadm1.10.3を持っていますが、このバグレポートで言及したのと同じエラーメッセージが表示されます。 私は自分の設定を再確認します私は他の場所でいくつかの間違いを犯している可能性があります
ここに追加します(またはkubernetes slackに参加して直接メッセージを送ってください)kubeadm-configなどの静的ポッドymlとkubeadm upgrade plan
完全な出力
申し訳ありませんが、私はちょうど今これを見ています。 @chuckhaは、静的ポッドHA etcdドキュメントの元の作業を行いました。今後数日間、彼と協力して、HAのアップグレードをまっすぐにするのに役立つかどうかを確認します。
@detiberありがとうございます。 アップグレード計画はついに機能します。 しかし、クラスターをアップグレードしようとすると、いくつかの競合状態の問題に直面します。 動作する場合もあれば、 kubernetes / kubeadm / issues / 850と同じエラーが発生する場合もあります。 1つのノードでポッドを再起動しようとすると、kubeadmが競合状態になります。
今日、このためのテストenvセットアップを取得する際にいくつかの問題が発生し、週末が始まる前に時間が不足しています。 私は来週の初めにこれを取り戻すつもりです。
/ assign @chuckha @detiber
@chuckha @detiber @stealthyboxこれに関する更新はありますか?
したがって、1.9-> 1.10 HAアップグレードは、サポートされていない、または精査されたパスではありませんでした。
現在、1.11-> 1.12のドキュメントの更新を進めており、今後も維持する予定です。