Kubernetes クラスターのバージョン 1.18 から 1.19 へのアップグレード

Kubernetes は複数のバージョンにわたるアップグレードをサポートしていません。したがって、1.18-1.19-1.20-1.21-1.22-1.23 への段階的なアップグレードが必要ですが、複数のバージョンにまたがる場合、アップグレードはさらに面倒になります。

I. 概要

1. バージョンアップ時の注意事項

  • 以下では、アップグレード プロセス中に各ノードがいつ空になるかについて説明します。のマイナー バージョン アップグレードを実行している場合はkubelet、最初にアップグレードするノードをクリアする必要があります。CoreDNS Podsコントロール プレーン ノードの場合、またはその他の非常に重要な負荷がそれら上で実行されている可能性があります。詳細については、「空のノード」を参照してください。
  • アップグレード後、コンテナ仕様のハッシュが変更されたため、すべてのコンテナが再起動されます。
  • アップグレード後に kubelet サービスが正常に再起動されたことを確認するには、サービス ログを実行systemctl status kubeletまたは表示します。journalctl -xeu kubelet

2. バージョン逸脱戦略

名前 アピサーバー キュベレット
アピサーバー ±1
キュベレット -2
kube-controller-manager、kube-scheduler -1
代理人になる -2 kubeletノードと同じ
クベクトル ±1

3. 現在のクラスタ環境

ザ・ホスト システム IP
loc-マスター35 CentOS 7.6 10.10.1.35
場所ノード36 CentOS 7.6 10.10.1.36
loc-node37 CentOS 7.6 10.10.1.37

4. マクロのアップグレードプロセス

  • メイン コントロール プレーン ノードをアップグレードする
  • 他のコントロール プレーン ノードをアップグレードする
  • ワーカーノードをアップグレードする

2. コントロール プレーン ノードをアップグレードする

1. アップグレードバージョンを確認する

# yum list --showduplicates kubeadm --disableexcludes=kubernetes
......
ubeadm.x86_64                         1.17.16-0                         kubernetes 
kubeadm.x86_64                        1.17.17-0                         kubernetes 
......
kubeadm.x86_64                        1.18.20-0                         kubernetes 
kubeadm.x86_64                        1.19.0-0                          kubernetes 
kubeadm.x86_64                        1.19.1-0                          kubernetes 
kubeadm.x86_64                        1.19.2-0                          kubernetes 
kubeadm.x86_64                        1.19.3-0                          kubernetes 
kubeadm.x86_64                        1.19.4-0                          kubernetes 
kubeadm.x86_64                        1.19.5-0                          kubernetes 
kubeadm.x86_64                        1.19.6-0                          kubernetes 
kubeadm.x86_64                        1.19.7-0                          kubernetes 
kubeadm.x86_64                        1.19.8-0                          kubernetes 
kubeadm.x86_64                        1.19.9-0                          kubernetes 
kubeadm.x86_64                        1.19.10-0                         kubernetes 
kubeadm.x86_64                        1.19.11-0                         kubernetes 
kubeadm.x86_64                        1.19.12-0                         kubernetes 
kubeadm.x86_64                        1.19.13-0                         kubernetes 
kubeadm.x86_64                        1.19.14-0                         kubernetes 
kubeadm.x86_64                        1.19.15-0                         kubernetes 
......
kubeadm.x86_64                        1.24.0-0                          kubernetes

2. コントロール プレーン ノードをアップグレードする

まず最初のマスター コントロール ノードをアップグレードし、次に他のコントロール ノードをアップグレードし、最後に他のワーカー ノードをアップグレードします。

2.1 kubeadm のアップグレード

  • アップグレードkubeadm
# yum install kubeadm-1.19.12-0 --disableexcludes=kubernetes
  • アップグレード計画の確認
# kubeadm upgrade plan  # 检查集群是否可以升级
......
Components that must be upgraded manually after you have upgraded the control plane with 'kubeadm upgrade apply':
COMPONENT   CURRENT       AVAILABLE
kubelet     3 x v1.18.0   v1.19.16

Upgrade to the latest stable version:

COMPONENT                 CURRENT   AVAILABLE
kube-apiserver            v1.18.0   v1.19.16
kube-controller-manager   v1.18.0   v1.19.16
kube-scheduler            v1.18.0   v1.19.16
kube-proxy                v1.18.0   v1.19.16
CoreDNS                   1.6.7     1.7.0
etcd                      3.4.3-0   3.4.13-0

You can now apply the upgrade by executing the following command:

	kubeadm upgrade apply v1.19.16

Note: Before you can perform this upgrade, you have to update kubeadm to v1.19.16.
......
_____________________________________________________________________
  • アップグレードするバージョンを選択してください
# kubeadm upgrade apply 1.19.12
......
[upgrade/successful] SUCCESS! Your cluster was upgraded to "v1.19.12". Enjoy!

kubeadm upgradeノード上で管理されている証明書は自動的にkubeadm更新されます。証明書の更新操作をスキップする必要がある場合は、フラグ --certificate-renewal=false を使用できます。

# kubeadm upgrade apply 1.19.12  --certificate-renewal=false

2.2 空のノード

kubectl drain ノードをスケジュール不可としてマークし、すべての負荷を排除するコマンド

# kubectl drain loc-master35 --ignore-daemonsets

2.3 kubelet と kubectl のアップグレード

# yum install kubelet-1.19.12-0 kubectl-1.19.12-0 --disableexcludes=kubernetes -y

# 重启 kubelet
# systemctl daemon-reload
# systemctl restart kubelet

2.4 ノードの保護を解除する

# kubectl uncordon loc-master35
node/loc-master35 uncordoned

3. 他のコントロール プレーンをアップグレードする

他にもあると仮定すると、これらもアップグレードするmaster必要がありますmaster

# yum install kubeadm-1.19.12-0 kubelet-1.19.12-0 kubectl-1.19.12-0 --disableexcludes=kubernetes
# 
# kubeadm upgrade node          # 这一点与主不一样
# kubectl drain loc-master-xx --ignore-daemonsets
# systemctl daemon-reload
# systemctl restart kubelet
# kubectl uncordon loc-master-xx

3. 稼働ノードをアップグレードする

1.kubeadmをアップグレードする

# yum install kubeadm-1.19.12-0 --disableexcludes=kubernetes

2、kubeadmのアップグレード

# kubeadm upgrade node

3. ノードを退避する

kubectl drain ノードをスケジュール不可としてマークし、すべての負荷を排除するコマンド

# kubectl drain loc-node36 --ignore-daemonsets

4. kubelet と kubectl をアップグレードする

# yum install kubelet-1.19.12-0 kubectl-1.19.12-0 --disableexcludes=kubernetes -y

# 重启 kubelet
# systemctl daemon-reload
# systemctl restart kubelet

5. ノードの保護を解除する

# kubectl uncordon loc-node36
node/loc-node36uncordoned

4. バージョンアップ後の検査

  • ノードのステータスを表示する
# kubectl get nodes -o wide 
NAME           STATUS   ROLES    AGE   VERSION    INTERNAL-IP   EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION          CONTAINER-RUNTIME
loc-master35   Ready    master   33d   v1.19.12   10.10.1.35    <none>        CentOS Linux 7 (Core)   3.10.0-957.el7.x86_64   docker://18.6.3
loc-node36     Ready    <none>   33d   v1.19.12   10.10.1.36    <none>        CentOS Linux 7 (Core)   3.10.0-957.el7.x86_64   docker://18.6.3
loc-node37     Ready    <none>   33d   v1.19.12   10.10.1.37    <none>        CentOS Linux 7 (Core)   3.10.0-957.el7.x86_64   docker://18.6.3
  • プラグインが正常か確認してください
# kubectl logs -f kube-controller-manager-loc-master35 -n kube-system
  • kubeletログ出力の表示
# journalctl -f -u kubelet
...

5.動作原理

1、kubeadmアップグレード適用

kubeadm upgrade apply は次のことを行います。

  • クラスターがアップグレード可能な状態であるかどうかを確認します。
    • APIサーバーにアクセスできる
    • すべてのノードは準備完了状態です
    • コントロールサーフェスは健全です
  • バージョンドリフトポリシーを適用します。
  • コントロール プレーンのイメージが利用可能であるか、サーバーにプルされていることを確認してください。
  • コンポーネント構成でバージョンのアップグレードが必要な場合は、代替構成を生成するか、ユーザー指定の上書きバージョン構成を使用します。
  • コントロール プレーン コンポーネントをアップグレードするか、いずれかのコンポーネントが起動に失敗した場合はロールバックします。
  • 新しい CoreDNS および kube-proxy マニフェストを適用し、必要なすべての RBAC ルールを強制的に作成します。
  • 古いファイルの有効期限が 180 日後に切れた場合、API サーバーの新しい証明書とキー ファイルが作成され、古いファイルがバックアップされます。

2、kubeadmアップグレードノード

kubeadm upgrade node他のコントロール フラット ノードで次の操作を実行します。

  • クラスターから kubeadm ClusterConfiguration を取得します。
  • (オプション) kube-apiserver 証明書をバックアップします。
  • コントロール プレーン コンポーネントの静的ポッド マニフェストをアップグレードします。
  • このノードの kubelet 構成をアップグレードします

kubeadm upgrade nodeワーカー ノードで次のタスクを完了します。

  • クラスターから kubeadm ClusterConfiguration を取得します。
  • このノードの kubelet 構成をアップグレードします。


参照:
https://kubernetes.io/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/
https://kubernetes.io/releases/version-skew-policy/

おすすめ

転載: blog.csdn.net/qq_25854057/article/details/124848760