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の新しいインストールガイドに従って構築され、以下のようになります.
    [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になり、マスターノードのアップグレードに成功しました.
    その他のコントロールノードのアップグレード
  • は、kubeadm、kubectl、kubeletツールを上記のようにアップグレードします.
  • は1.14
  • にアップグレードされました
    マスターノードはチェックとアップグレードを実行し、192-168-10-14はkubeadm upgrade apply v1.14.0を実行するだけです.
    残念なことに、もう一つの状況に遭遇しました.failed to get APIEndpoint information for this node、調査過程は添付2を参照してください.
  • クbelet
  • を再起動
  • アップグレード結果を確認
  • [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へのアップグレードを完了しましたが、全体的にはアップグレードプロセスが楽です.アップグレードプロセスをまとめます.
  • アップグレードガイドを詳しく読み、重要なビジネス情報のバックアップを完了し、kubelet構成を完了します.
  • プライマリ制御ノードをアップグレードします.
  • は、他の制御ノードをアップグレードします.
  • は、ビジネスノードをアップグレードします.

  • に付随
  • kubelet再起動失敗
  • kubeletの再起動に失敗しました.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を再起動し、正常に戻ります.
  • kubeadmアップグレード失敗
  • [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