kubernetes 1.14アップグレードインストールガイド
15999 ワード
一点の外語:kubernetes公式3月25日に1.14を発表し、本文は28日に完成した.1.14アップグレードして中国語のガイドをインストールして、現在全ネットは恐らく最新でしょう、支持してほめてもらいます.
アップグレードの準備
今回のアップグレードは主に公式Upgrading kubeadm clusters from v 1.13 to v 1.14を参照
アップグレード前の注意事項(公式ドキュメントから翻訳): 1.13.0以上、kubeadm配備のkubernetesクラスタ を使用 Swapパーティションにはdisabled が必要です.クラスタの制御平面個数とetcd podsは決定する必要がある. release notesを真剣に読みます. バックアップ.主にdatabaseなどの重要なコンポーネントをバックアップします.アップグレードではビジネス負荷は調整されず、kubernetesのみが調整されますが、バックアップは常に間違いありません. hash値が変化するため、すべてのコンテナが再起動されます. は、イテレーションのアップグレードのみを行うことができ、アップグレードプロセスは、1.yから1.y+1まで、1.yから1.y+2までの までのジャンプを行うことができない.
要求に応じてkubernetes 1.14の変更説明を確認し、Urgent Upgrade Notesを重点的に読み、自分の業務と結びつけて、特に重大な変動は発見されず、安心してアップグレードすることができます.
kubernetesクラスタはkubernetes 1.13の新しいインストールガイドに従って構築され、以下のようになります.
ビジネスデータのバックアップは、紹介する必要はありません.実際には、セキュリティのためにテストクラスタでアップグレードしてから、正式なクラスタのアップグレードを考慮したほうがいいです.
アップグレードプロセスの主な変化はkubernetesシステムサービスであり、kubeletに重点を置いているので、kubeletの構成をバックアップするのがより適切で、方法は以下の通りです.
1 kubeletサービス構成の表示:
2サービスのプロファイル
3関連するプロファイルのバックアップ
次は正式にアップグレードプロセスを開始します.
マスターノードのアップグレード
アップグレードする前に、クラスタの使用を保証するために、複数の制御ノードがあることを確認してください.単一の制御ノードで、アップグレードが万一切れたら、面倒になるのではないかと心配しています.制御ノードを追加する方法は、上記のkubernetes 1.13の新しいインストールガイドを参照してください.
本明細書の
1まずrepoソースのkubeadmが1.14.0のバージョンに更新されているかどうかを確認します.
私の地元のソースは1.14.0を見つけられませんでした.次のコマンドでクリーンアップし、後でチェックすると1.14.0が得られます.
2 kubeadmバージョン情報の再表示
3 kubeadmツールのインストール
4 kubeadmバージョンのアップグレードが完了したことを確認する
5アップグレードチェックとシナリオ
ここのヒント情報は公式文書とは違いますが、これは正常な情報です.
6 kubeadmを1.14にアップグレード
この実行プロセスは、クラスタの状況に応じて数分程度実行され、出力情報も多く、次のようになります.
7 CNI状況を検査し、アップグレードするかどうかを確定する
kubernetesアーキテクチャ、ネットワーク部分はContainer Network Interfaceインタフェースを決定し、具体的な実装は他のコンポーネントに渡される.私のクラスタはflannelを使用しています.チェックしてください.
0.11を使用しているので、flannelのホームページを見て最新版であることがわかりました.このステップは処理しません.
8クbectlとクbeletをアップグレード
9クbeletを再起動
実際、クbeletの再起動に失敗し、エラー:Failed to start ContainerManager failed to initialise top level QOS containers.検査の過程は添付1を参照してください.
10アップグレード結果の確認
192-168-10-21のステータスはReadyで、バージョンも1.14.0になり、マスターノードのアップグレードに成功しました.
その他のコントロールノードのアップグレードは、kubeadm、kubectl、kubeletツールを上記のようにアップグレードします. は1.14 にアップグレードされました
マスターノードはチェックとアップグレードを実行し、192-168-10-14は
残念なことに、もう一つの状況に遭遇しました.failed to get APIEndpoint information for this node、調査過程は添付2を参照してください.クbelet を再起動アップグレード結果を確認
ビジネスノードのアップグレード
1一時バックアップ
クラスタはビジネスノードであるため、セキュリティのために、ビジネスを一時的にサポートするために制御ノードを調整します.
その後、ビジネスノードは一時的に汚点を追加し、アップグレード期間のスケジュールを防止します.
2 kubeadmツールのインストール
3クベダムを1.14にアップグレード
4クbectlとクbeletをアップグレード
クbeletも再起動する必要があります
5一時バックアップのリストア
ビジネスノードの汚点を先に取り消す
次にmasterノードを復元します
6検査結果
以上、kubernetesの1.13から1.14へのアップグレードを完了しましたが、全体的にはアップグレードプロセスが楽です.アップグレードプロセスをまとめます.アップグレードガイドを詳しく読み、重要なビジネス情報のバックアップを完了し、kubelet構成を完了します. プライマリ制御ノードをアップグレードします. は、他の制御ノードをアップグレードします. は、ビジネスノードをアップグレードします.
に付随 kubelet再起動失敗 kubeletの再起動に失敗しました.
リファレンスhttps://github.com/kubernetes/kubernetes/issues/43704ヒント:kubelet起動時に--cgroups-per-qos=false--enforce-node-allocatable=""を追加すると解決します.以前にkubeletの構成をバックアップしたとき、 kubeadmアップグレード失敗
ヒントに従って、編集
kubeadm upgrade apply v 1.14.0を続行し、正常に完了します.
転載先:https://juejin.im/post/5c9ce517e51d452b837c959e
アップグレードの準備
今回のアップグレードは主に公式Upgrading kubeadm clusters from v 1.13 to v 1.14を参照
アップグレード前の注意事項(公式ドキュメントから翻訳):
要求に応じてkubernetes 1.14の変更説明を確認し、Urgent Upgrade Notesを重点的に読み、自分の業務と結びつけて、特に重大な変動は発見されず、安心してアップグレードすることができます.
kubernetesクラスタはkubernetes 1.13の新しいインストールガイドに従って構築され、以下のようになります.
[hall@192-168-10-21 ~]$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
192-168-10-14 Ready master 36h v1.13.0
192-168-10-18 Ready 103d v1.13.0
192-168-10-21 Ready master 104d v1.13.0
ビジネスデータのバックアップは、紹介する必要はありません.実際には、セキュリティのためにテストクラスタでアップグレードしてから、正式なクラスタのアップグレードを考慮したほうがいいです.
アップグレードプロセスの主な変化はkubernetesシステムサービスであり、kubeletに重点を置いているので、kubeletの構成をバックアップするのがより適切で、方法は以下の通りです.
1 kubeletサービス構成の表示:
[root@192-168-10-94 ~]# systemctl status kubelet
● kubelet.service - kubelet: The Kubernetes Node Agent
Loaded: loaded (/etc/systemd/system/kubelet.service; enabled; vendor preset: disabled)
Drop-In: /etc/systemd/system/kubelet.service.d
└─10-kubeadm.conf
Active: active (running) since 2019-03-19 18:38:46 CST; 1 weeks 1 days ago
Docs: https://kubernetes.io/docs/
Main PID: 6033 (kubelet)
Tasks: 17
Memory: 59.1M
CGroup: /system.slice/kubelet.service
└─6033 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --config=/var/lib/kubelet/config.yaml --cgroup-driver=cgroupfs --network-plugin=cni --pod-infra-container-image=re...
2サービスのプロファイル
10-kubeadm.conf
を表示します.[root@192-168-10-94 ~]# cat /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
# Note: This dropin only works with kubeadm and kubelet v1.11+
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"
Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"
# This is a file that "kubeadm init" and "kubeadm join" generates at runtime, populating the KUBELET_KUBEADM_ARGS variable dynamically
EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env
# This is a file that the user can use for overrides of the kubelet args as a last resort. Preferably, the user should use
# the .NodeRegistration.KubeletExtraArgs object in the configuration files instead. KUBELET_EXTRA_ARGS should be sourced from this file.
EnvironmentFile=-/etc/sysconfig/kubelet
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS
3関連するプロファイルのバックアップ
/etc/kubernetes/bootstrap-kubelet.conf ( , )
/etc/kubernetes/kubelet.conf
/var/lib/kubelet/kubeadm-flags.env
/etc/sysconfig/kubelet
次は正式にアップグレードプロセスを開始します.
マスターノードのアップグレード
アップグレードする前に、クラスタの使用を保証するために、複数の制御ノードがあることを確認してください.単一の制御ノードで、アップグレードが万一切れたら、面倒になるのではないかと心配しています.制御ノードを追加する方法は、上記のkubernetes 1.13の新しいインストールガイドを参照してください.
本明細書の
kubectl
以外のコマンドは、特に説明がなければrootアカウントを使用して実行される.1まずrepoソースのkubeadmが1.14.0のバージョンに更新されているかどうかを確認します.
yum list --showduplicates kubeadm --disableexcludes=kubernetes
私の地元のソースは1.14.0を見つけられませんでした.次のコマンドでクリーンアップし、後でチェックすると1.14.0が得られます.
yum --disablerepo=\* --enablerepo=kubernetes clean all
2 kubeadmバージョン情報の再表示
[root@192-168-10-21 ~]# kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"13", GitVersion:"v1.13.4", GitCommit:"c27b913fddd1a6c480c229191a087698aa92f0b1", GitTreeState:"clean", BuildDate:"2019-02-28T13:35:32Z", GoVersion:"go1.11.5", Compiler:"gc", Platform:"linux/amd64"}
3 kubeadmツールのインストール
yum install -y kubeadm-1.14.0-0 --disableexcludes=kubernetes
4 kubeadmバージョンのアップグレードが完了したことを確認する
[root@192-168-10-21 ~]# kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"14", GitVersion:"v1.14.0", GitCommit:"641856db18352033a0d96dbc99153fa3b27298e5", GitTreeState:"clean", BuildDate:"2019-03-25T15:51:21Z", GoVersion:"go1.12.1", Compiler:"gc", Platform:"linux/amd64"}
5アップグレードチェックとシナリオ
[root@192-168-10-21 ~]# 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] Fetching available versions to upgrade to
[upgrade/versions] Cluster version: v1.13.0
[upgrade/versions] kubeadm version: v1.14.0
Awesome, you're up-to-date! Enjoy!
kubeadm upgrade apply v1.14.0
ここのヒント情報は公式文書とは違いますが、これは正常な情報です.
6 kubeadmを1.14にアップグレード
kubeadm upgrade apply v1.14.0
この実行プロセスは、クラスタの状況に応じて数分程度実行され、出力情報も多く、次のようになります.
[root@192-168-10-21 ~]# kubeadm upgrade apply v1.14.0
[preflight] Running pre-flight checks.
[upgrade] Making sure the cluster is healthy:
.....
[upgrade/staticpods] Component "kube-scheduler" upgraded successfully!
[upload-config] storing the configuration used in ConfigMap "kubeadm-config" in the "kube-system" Namespace
[kubelet] Creating a ConfigMap "kubelet-config-1.14" in namespace kube-system with the configuration for the kubelets in the cluster
[kubelet-start] Downloading configuration for the kubelet from the "kubelet-config-1.14" ConfigMap in the kube-system namespace
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[bootstrap-token] configured RBAC rules to allow Node Bootstrap tokens to post CSRs in order for nodes to get long term certificate credentials
[bootstrap-token] configured RBAC rules to allow the csrapprover controller automatically approve CSRs from a Node Bootstrap Token
[bootstrap-token] configured RBAC rules to allow certificate rotation for all node client certificates in the cluster
[addons] Applied essential addon: CoreDNS
[addons] Applied essential addon: kube-proxy
[upgrade/successful] SUCCESS! Your cluster was upgraded to "v1.14.0". Enjoy!
[upgrade/kubelet] Now that your control plane is upgraded, please proceed with upgrading your kubelets if you haven't already done so.
7 CNI状況を検査し、アップグレードするかどうかを確定する
kubernetesアーキテクチャ、ネットワーク部分はContainer Network Interfaceインタフェースを決定し、具体的な実装は他のコンポーネントに渡される.私のクラスタはflannelを使用しています.チェックしてください.
kubectl get pods -n kube-system
...
kubectl describe pod/kube-flannel-ds-amd64-5xxh7 -n kube-system
...
Image: quay.io/coreos/flannel:v0.11.0-amd64
0.11を使用しているので、flannelのホームページを見て最新版であることがわかりました.このステップは処理しません.
8クbectlとクbeletをアップグレード
yum install -y kubelet-1.14.0-0 kubectl-1.14.0-0 --disableexcludes=kubernetes
9クbeletを再起動
[root@192-168-10-21 ~]# systemctl restart kubelet
Warning: kubelet.service changed on disk. Run 'systemctl daemon-reload' to reload units.
[root@192-168-10-21 ~]# systemctl daemon-reload
[root@192-168-10-21 ~]# systemctl restart kubelet
実際、クbeletの再起動に失敗し、エラー:Failed to start ContainerManager failed to initialise top level QOS containers.検査の過程は添付1を参照してください.
10アップグレード結果の確認
[hall@192-168-10-21 ~]$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
192-168-10-14 Ready master 38h v1.13.0
192-168-10-18 Ready 103d v1.13.0
192-168-10-21 Ready master 104d v1.14.0
192-168-10-21のステータスはReadyで、バージョンも1.14.0になり、マスターノードのアップグレードに成功しました.
その他のコントロールノードのアップグレード
マスターノードはチェックとアップグレードを実行し、192-168-10-14は
kubeadm upgrade apply v1.14.0
を実行するだけです.残念なことに、もう一つの状況に遭遇しました.failed to get APIEndpoint information for this node、調査過程は添付2を参照してください.
[hall@192-168-10-21 ~]$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
192-168-10-14 Ready master 39h v1.14.0
192-168-10-18 Ready 103d v1.13.0
192-168-10-21 Ready master 104d v1.14.0
ビジネスノードのアップグレード
1一時バックアップ
クラスタはビジネスノードであるため、セキュリティのために、ビジネスを一時的にサポートするために制御ノードを調整します.
[tyhall51@192-168-10-21 ~]$ kubectl taint node 192-168-10-14 node-role.kubernetes.io/master-
node/192-168-10-14 untainted
その後、ビジネスノードは一時的に汚点を追加し、アップグレード期間のスケジュールを防止します.
[tyhall51@192-168-10-21 ~]$ kubectl drain 192-168-10-18 --ignore-daemonsets
node/192-168-10-18 cordoned
error: unable to drain node "192-168-10-18", aborting command...
There are pending nodes to be drained:
192-168-10-18
error: cannot delete Pods with local storage (use --delete-local-data to override): kube-system/elasticsearch-logging-0, kube-system/elasticsearch-logging-1, kube-system/monitoring-influxdb-8b7d57f5c-2bhlw
2 kubeadmツールのインストール
3クベダムを1.14にアップグレード
[root@192-168-10-18 ~]# kubeadm upgrade node config --kubelet-version v1.14.0
[kubelet-start] Downloading configuration for the kubelet from the "kubelet-config-1.14" ConfigMap in the kube-system namespace
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[upgrade] The configuration for this node was successfully updated!
[upgrade] Now you should go ahead and upgrade the kubelet package using your package manager.
4クbectlとクbeletをアップグレード
クbeletも再起動する必要があります
5一時バックアップのリストア
ビジネスノードの汚点を先に取り消す
[tyhall51@192-168-10-21 ~]$ kubectl uncordon 192-168-10-18
node/192-168-10-18 uncordoned
次にmasterノードを復元します
[tyhall51@192-168-10-21 ~]$ kubectl taint node 192-168-10-14 node-role.kubernetes.io/master=:NoSchedule
node/192-168-10-14 tainted
6検査結果
[tyhall51@192-168-10-21 ~]$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
192-168-10-14 Ready master 40h v1.14.0
192-168-10-18 Ready 103d v1.14.0
192-168-10-21 Ready master 104d v1.14.0
以上、kubernetesの1.13から1.14へのアップグレードを完了しましたが、全体的にはアップグレードプロセスが楽です.アップグレードプロセスをまとめます.
に付随
systemctl status kubelet
のエラーメッセージ:Failed to start ContainerManager failed to initialise top level QOS containers
リファレンスhttps://github.com/kubernetes/kubernetes/issues/43704ヒント:kubelet起動時に--cgroups-per-qos=false--enforce-node-allocatable=""を追加すると解決します.以前にkubeletの構成をバックアップしたとき、
/var/lib/kubelet/kubeadm-flags.env
でkubeletの起動パラメータを定義し、その中に加えてkubeletを再起動し、正常に戻ります.[root@192-168-10-14 ~]# kubeadm upgrade apply v1.14.0
[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/config] FATAL: failed to getAPIEndpoint: failed to get APIEndpoint information for this node
ヒントに従って、編集
kubectl -n kube-system edit cm kubeadm-config -oyaml
kubeadm-configを使用して、apiEndpointsを次のように調整します.apiEndpoints:
192-168-10-21:
advertiseAddress: 192.168.10.21
bindPort: 6443
192-168-10-14:
advertiseAddress: 192.168.10.14
bindPort: 6443
kubeadm upgrade apply v 1.14.0を続行し、正常に完了します.
転載先:https://juejin.im/post/5c9ce517e51d452b837c959e