LabHub

ブログ

CKA_6_Cluster_Maintenance

한국어English日本語

この記事は、Udemyの講座 https://www.udemy.com/course/certified-kubernetes-administrator-with-practice-tests および https://kodekloud.com/ の内容を学習しながらまとめたものです。

121 OS Upgrades

KubernetesのWorker Nodeの1台がダウンした場合、Kubernetesではどのように処理されるのでしょうか?Pod Eviction Timeout(デフォルト5分)に基づき、一定時間以上ダウンしているとNodeはdead nodeとして処理されます。5分以内にNodeが起動すればPodは復旧されます。

ハードウェアメンテナンスやOS再起動のためにNodeを停止する必要がある場合、停止前に稼働中のPodを他のNodeに移行する作業を行うことができます。これに関連してcordonという概念もあります。Kubernetesであるノードをcordonすると、schedulerはそのノードにPodを割り当てなくなります。cordonとdrainが完了すると、そのNodeはKubernetesクラスターに影響を与えないため、メンテナンスが可能な状態になります。

$ kubectl drain <node_name>

Worker Nodeが再び起動したら、uncordonを使用してスケジュール可能な状態に戻します。

upgrade

126 Cluster Upgrade Process

Kubernetesのアップグレードを行うには、さまざまなソフトウェアを同時にアップグレードする必要があり、アップグレード先のバージョンはkube-apiserverのバージョンを基準に決まります。kubectlを除くと、kube-apiserverのバージョンより高いバージョンは使用できません。また、アップグレードでは一度に複数のminor versionをスキップすることはできず、minor versionを1つずつ上げていく必要があります。

upgrade

アップグレードは大きく2つのステップで行われます。1つ目はMaster Nodeのアップグレード、2つ目はWorker Nodeのアップグレードです。Master Nodeをアップグレードするために一時的にMaster Nodeがダウンしても、Podへの影響は少ないため問題ありません。Worker Nodeのアップグレードが問題になる可能性があり、3つの戦略があります。

  1. 全Worker Nodeを停止し、kubectlアップグレードを実行。その後、全Worker Nodeを起動。
  2. Worker Nodeを1台ずつアップグレード。
  3. 新しいバージョンのWorker Nodeを追加しながら、既存のWorker Nodeを削除。

kubeadm upgrade plan を入力すると、Master Nodeのアップグレードに必要な情報が表示されます。ただし、kubeadmはKubeletのアップグレードには対応していません。Kubernetesのアップグレードには、kubeadmツールもアップグレードしてバージョンを合わせる必要があります。

upgrade

130. Backup and Restore Methods

宣言的(declarative)に記述されたYAMLファイルとしてのリソース設定は、GitHubなどに保管して管理できます。クラスター全体がダウンしても、この設定をapplyすることで復旧できます。ただし、命令的(imperative)に実行されたPodがあった場合、その情報は復旧されません。

以下のコマンドを使用すると、現在稼働中のすべてのリソースの設定を一括でYAMLファイルとしてエクスポートできます。

kubectl get all --all-namespace -o yaml > all-deploy-services.yaml

ETCDクラスターもデータを保存しているため、ETCDのデータをスナップショット形式でバックアップできます。etcdctl snapshot save <filename> コマンドを使用します。

etcd

ETCDTCL_API=3 etcdctl snapshot save snapshot.db

export ETCDCTL_API=3 コマンドでCLIで実行するetcd APIコマンドのバージョンを3に設定して進めます。リストアの手順は、service kube-apiserver stop コマンドでAPIサーバーを一時停止し、etcdctl snapshot restore snapshot.db --data-dir /var/lib/etcd-fron-backup コマンドでスナップショットをリストアし、systemctl daemon-reloadservice ectc restart でetcdを再起動します。最後に service kube-apiserver start でkube-apiserverを再起動すれば、リストアプロセスが完了します。

etcd

ETCDデータベースにTLSセキュリティが設定されている場合、etcdctlコマンド実行時に以下の引数も必須で渡す必要があります。

etcd

    Command:
      etcd
      --advertise-client-urls=https://192.10.124.9:2379
      --cert-file=/etc/kubernetes/pki/etcd/server.crt
      --client-cert-auth=true
      --data-dir=/var/lib/etcd
      --experimental-initial-corrupt-check=true
      --experimental-watch-progress-notify-interval=5s
      --initial-advertise-peer-urls=https://192.10.124.9:2380
      --initial-cluster=controlplane=https://192.10.124.9:2380
      --key-file=/etc/kubernetes/pki/etcd/server.key
      --listen-client-urls=https://127.0.0.1:2379,https://192.10.124.9:2379
      --listen-metrics-urls=http://127.0.0.1:2381
      --listen-peer-urls=https://192.10.124.9:2380
      --name=controlplane
      --peer-cert-file=/etc/kubernetes/pki/etcd/peer.crt
      --peer-client-cert-auth=true
      --peer-key-file=/etc/kubernetes/pki/etcd/peer.key
      --peer-trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
      --snapshot-count=10000
      --trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
backup
$ ETCDTCL_API=3 etcdctl snapshot save /opt/snapshot-pre-boot.db --endpoints=https://127.0.0.1:2379 --cert=/etc/kubernetes/pki/etcd/server.crt --cacert=/etc/kubernetes/pki/etcd/ca.crt --key=/etc/kubernetes/pki/etcd/server.key
Snapshot saved at /opt/snapshot-pre-boot.db
restore
$ ETCDTCL_API=3 etcdctl snapshot restore  --data-dir /var/lib/etcd-from-backup /opt/snapshot-pre-boot.db 2023-12-20 01:21:08.126263 I | mvcc: restore compact to 9192023-12-20 01:21:08.143486 I | etcdserver/membership: added member 8e9e05c52164694d [http://localhost:2380] to cluster cdf818194e3a8c32

etcdのstatic Pod定義で、data-directoryとして指定していたパスをHostPathに設定します。設定が完了すると一時的にetcdが停止するため、クラスターへのアクセスができなくなります。しかし、その後etcdデータベースが正常に動作すれば、クラスターへのアクセスが可能になります。

/etc/kubernetes/manifests/etcd.yaml
  - hostPath:
      path: /var/lib/etcd-from-backup
      type: DirectoryOrCreate
    name: etcd-data

マルチクラスター環境で複数のクラスター情報が登録されている場合、以下のコマンドで確認できます。

$ kubectl config get-clusters
NAME
cluster1
cluster2

クラスターコンテキストの切り替えには kubectl config use-context cluster2 を使用します。

クイズ

Q1: 「CKA_6_Cluster_Maintenance」の主なトピックは何ですか? CKA_6_Cluster_Maintenance

Q2: この記事の重要なポイントは何ですか? CKA_6_Cluster_Maintenance

Q3: この記事の概念を実践にどう適用できますか? 記事全体で議論されている実践的な例やパターンを参考にしてください。

コメント

まだコメントはありません。

ログインするとコメントできます