この記事は、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を使用してスケジュール可能な状態に戻します。

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

アップグレードは大きく2つのステップで行われます。1つ目はMaster Nodeのアップグレード、2つ目はWorker Nodeのアップグレードです。Master Nodeをアップグレードするために一時的にMaster Nodeがダウンしても、Podへの影響は少ないため問題ありません。Worker Nodeのアップグレードが問題になる可能性があり、3つの戦略があります。
- 全Worker Nodeを停止し、kubectlアップグレードを実行。その後、全Worker Nodeを起動。
- Worker Nodeを1台ずつアップグレード。
- 新しいバージョンのWorker Nodeを追加しながら、既存のWorker Nodeを削除。
kubeadm upgrade plan を入力すると、Master Nodeのアップグレードに必要な情報が表示されます。ただし、kubeadmはKubeletのアップグレードには対応していません。Kubernetesのアップグレードには、kubeadmツールもアップグレードしてバージョンを合わせる必要があります。

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> コマンドを使用します。

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-reload と service ectc restart でetcdを再起動します。最後に service kube-apiserver start でkube-apiserverを再起動すれば、リストアプロセスが完了します。

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

- cacert
- cert
- endpoints
- key
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
$ 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
$ 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データベースが正常に動作すれば、クラスターへのアクセスが可能になります。
- 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: この記事の概念を実践にどう適用できますか?
記事全体で議論されている実践的な例やパターンを参考にしてください。