6. Cluster Maintenance
これは劉黛比CKAの講座を聞いて整理した書類です.これは単独で整理された文章ではなく、授業中に記録されたドキュメントなので、間違いがある可能性があります.
1. drain, cordon, uncordon (os upgrade)
プライマリノードのアップグレード
プライマリノードをアップグレードすると、プライマリノードの構成部品は機能しません.たとえば、作業ノードのシードを削除しても再生されません.ただし、ワークノードに異常がなければ、ユーザーは正常にサービスを使用できます.
ワークノードのアップグレード
ワークノードをアップグレードするには、3つの方法があります.
最初のステップでは、すべてのワークノードを一度にアップグレードします.もちろん、アップグレード中はユーザーがサービスを使用できません.
ステップ2では、ワークノードを順次アップグレードします.各ノードがアップグレードされるため、アップグレードノードのシードは他のノードに移行します.
3つ目の方法は、新しいノードを追加し、ワークロードを新しいノードに移行することです.
クbeadmクバーネディスアップグレード
1)クベドバージョンのアップグレード
2)kubeadmによるクラスタコンポーネントバージョンのアップグレード
3)Kubeletバージョンのアップグレード
クベドに配備されたクラスタへのアップグレード
3.バックアップとリカバリ
1. drain, cordon, uncordon (os upgrade)
コンセプト
ノードがダウンタイムしてから5分以内に再オンラインになった場合、ノードのシードはそのままになります.しかし、ノードが5分以上停止した場合、クバーネディスはノードが閉じたと判断し、ノードのシードを終了します.5分後にノードを再オンラインにしても、シードを再生成します.
5分がデフォルトです.--pod-eviction-timeoutでこの設定を変更できます.kube-controller-manager --pod-eviction-timeout=5m0x
ワークノードが5分以上停止したと仮定します.ノードに含まれるシードがコピーセットの場合、ノードが閉じると、他の作業ノードにシードが作成されます.ただし、コピーセットではないシードは、ダウンロード時、リカバリ時に生成されません.
OSをアップグレードするには、次の手順に従います.kubectl drain node-1 ( node-1 워커노드에 pod가 생성되지 않도록 제한을 건다.)
node-1 reboot
kubectl cordon node-2 (drain과 다르게 노드가 내려가고 노드 안에 잇는 pod가 다른 살아있는 노드로 옮겨가는것이 아니다. 단순히 pod가 스케줄되지 않도록 설정하는 것)
kubectl uncordon node-1 ( uncordon 한다고 다른 node에 있는 pod가 저절로 node-1에 오지 않는다. / 새로 파드를 생성하면 node-1에 스케줄링 될 수도 있다. / 또는 다른 노드에서 파드를 삭제하면 node-1로 스케줄리 될 수도 있다.
関連命令
はいすいめいれい
kubectl drain node01 --ignore-daemonsets
(daemonsets으로 만들어진 파드를 제외하고 drain)
「ignore-demonsetsオプションの説明」を参照してください。
Node 01にReplicationController、ReplicaSet、Job、Daemonsets、StatefulSetによって管理されていないシードが存在する場合、drawコマンドでエラーが発生します.
kubectl drain node-1 --ignore-daemonsets --force
命令によって強制的に排出することができますが、管理されていない種子は永遠に流失する可能性があります.
コマンドライン
kubectl cordon node-1
ノードに存在するシードをスケジューリングせずに維持する場合はcordonコマンドを使用します.
その他のコマンド
kubectl get nodes
ノードの確認
statusエントリは、スケジュールが無効かどうかを決定します.kubectl get pods -o wide
どのノードにどのシードが存在するかを決定kubectl get deployments.apps
kubectl get deplotments 랑 위 명령어가 다른점은 ?????
ノードに存在するアプリケーションを特定
Aアプリケーションは複数のパーティションに存在する場合があります.(?)kubectl describe node master | grep -i taint
基本的には、パイドがスケジューリングされないように、プライマリノードが汚染される.
2.クーバーネスソフトウェアバージョン
v1.18.0
(major, minor, patch)
クバーネディスの最初の主要バージョンv 1.0は2015年6月に発売
月次リリース
パッチのエラー修正
通常alpha->βバージョンで正式バージョンになります.
すべてのバージョンの履歴はクバーネディス傘下で確認できます.
controlplaneのコンポーネントkube-apiserver、controller-manager、kube-scheduler、kubelet、kube-proxy、kubectlは同じバージョンに従い、ETCDクラスタ、Core DNSは分離された項目であるため、それぞれのバージョンがある.
クバーネディス素子
クバーネディス旗
3.クラスタアップグレード
クバーネディスを使用する環境によって、アップグレードの方法が異なります.
GCPで管理サービスを利用する場合は、Kubeadmを最初から導入している場合によって、Kubeadmを使用する場合が異なります.
クラスタのアップグレードは、プライマリノードのアップグレード、ワークノードのアップグレードの2つの段階を経験します.
kube-controller-manager --pod-eviction-timeout=5m0x
kubectl drain node-1 ( node-1 워커노드에 pod가 생성되지 않도록 제한을 건다.)
node-1 reboot
kubectl cordon node-2 (drain과 다르게 노드가 내려가고 노드 안에 잇는 pod가 다른 살아있는 노드로 옮겨가는것이 아니다. 단순히 pod가 스케줄되지 않도록 설정하는 것)
kubectl uncordon node-1 ( uncordon 한다고 다른 node에 있는 pod가 저절로 node-1에 오지 않는다. / 새로 파드를 생성하면 node-1에 스케줄링 될 수도 있다. / 또는 다른 노드에서 파드를 삭제하면 node-1로 스케줄리 될 수도 있다.
kubectl drain node01 --ignore-daemonsets
(daemonsets으로 만들어진 파드를 제외하고 drain)
kubectl drain node-1 --ignore-daemonsets --force
kubectl cordon node-1
kubectl get nodes
kubectl get pods -o wide
kubectl get deployments.apps
kubectl get deplotments 랑 위 명령어가 다른점은 ?????
kubectl describe node master | grep -i taint
v1.18.0
(major, minor, patch)
クバーネディスの最初の主要バージョンv 1.0は2015年6月に発売
月次リリース
パッチのエラー修正
通常alpha->βバージョンで正式バージョンになります.
すべてのバージョンの履歴はクバーネディス傘下で確認できます.
controlplaneのコンポーネントkube-apiserver、controller-manager、kube-scheduler、kubelet、kube-proxy、kubectlは同じバージョンに従い、ETCDクラスタ、Core DNSは分離された項目であるため、それぞれのバージョンがある.
クバーネディス素子
クバーネディス旗
3.クラスタアップグレード
クバーネディスを使用する環境によって、アップグレードの方法が異なります.
GCPで管理サービスを利用する場合は、Kubeadmを最初から導入している場合によって、Kubeadmを使用する場合が異なります.
クラスタのアップグレードは、プライマリノードのアップグレード、ワークノードのアップグレードの2つの段階を経験します.
プライマリノードのアップグレード
プライマリノードをアップグレードすると、プライマリノードの構成部品は機能しません.たとえば、作業ノードのシードを削除しても再生されません.ただし、ワークノードに異常がなければ、ユーザーは正常にサービスを使用できます.
ワークノードのアップグレード
ワークノードをアップグレードするには、3つの方法があります.
ステップ2では、ワークノードを順次アップグレードします.各ノードがアップグレードされるため、アップグレードノードのシードは他のノードに移行します.
3つ目の方法は、新しいノードを追加し、ワークロードを新しいノードに移行することです.
クbeadmクバーネディスアップグレード
kubeadm upgrade plan
注目すべきは、kubeadmupgradeにはkubletアップグレードは含まれていないことです.kubeadm自体もクバーネディスと同じバージョンに従っています.<마스터 노드>
kubectl drain master --ignore-daemonsets
apt-get upgrade -y kubeadm=1.12.0-00
(apt install kubeadm=버전)
kubeadm upgrade apply 1.12.0
(이미지를 pull하고 컴포넌트들을 업그레이드 한다.)
kubectl get nodes
(해당 명령어를 통해 보이는 버전은 apiserver버전이 아니라 각 노드의 kubelet의 버전이다)
kubectl version --short
apt-get upgrade -y kubelet=1.12.0-00
(apt install kubelet=버전)
systemctl restart kubelet
kubectl get nodes
kubectl uncordon master
<워커 노드>
kubectl drain node01
ssh node01
apt-get upgrade -y kubeadm=1.12.0-00
(apt install kubeadm=버전)
apt-get upgrade -y kubelet=1.12.0-00
(apt install kubelet=버전)
kubeadm upgrade node config --kubelet-version v1.12.0
systemctl restart kubelet
logout
(master노드로 돌아옴)
kubectl uncordon node01
node02
node03
node04
반복
全体1)クベドバージョンのアップグレード
2)kubeadmによるクラスタコンポーネントバージョンのアップグレード
3)Kubeletバージョンのアップグレード
クベドに配備されたクラスタへのアップグレード
3.バックアップとリカバリ
バックアップターゲット
Resource Configuration, ETCD Cluster, Persistent Volumes
バックアップリソース構成
1)各リソースをプロファイルとして定義する場合は、Githubなどのバージョン管理ツールでプロファイルを管理および保持できます.
2)ただし、チームメンバーがプロファイルを変更せずに直接コマンドでリソースを変更した場合、プロファイルは最新バージョンに保持されません.したがって、kube-apiserverを直接クエリーしてプロファイルバックアップを作成する方法があります.kubectl get all -all--namespaces -o yaml > all-deploy-services.yaml
ETCDクラスタバックアップ
1)etcdはクラスタ内のすべてのリソースの状態を格納する.ホストノードに管理され、etcdを設定するときに、data-dir=/var/lib/etcdなどのデータが格納されるディレクトリパスを指定します.
2)etcdコントロールユーティリティでetcdスナップショットを生成することもできます.
ETCDCTL_API=3
etcdctl snapshot save sanpshot.dbsnapshot save [백업 파일 이름]\
snapshot status [백업 파일 이름]
ETCDクラスタ復旧
1)kube-apiserverを停止します.
kube-apiserverはETCDに関連しているため、ETCDを停止して復元する必要があります.service kube-apiserver stop
etcdctl restore [백업 파일 이름] --data-dir /var/lib/etcd-from-backup
--data-dir=/var/lib/etcd-from-backup(etcd 설정 파일 변경)
systemctl daemon-reload (service daemon 리로드)
service etcd restart (etcd 서비스 재시작)
service kube-apiserver start
どちらの方法にも長所と短所がある.ただし、管理サービスを使用する場合はetcdにアクセスする権限がない場合がありますので、kube-apiserverにクエリーする方法を選択したほうがいいです.kubectl get deployments.app,svc,pod
todo. マルチクラスタ構成
todo. etcd
Reference
この問題について(6. Cluster Maintenance), 我々は、より多くの情報をここで見つけました
https://velog.io/@be-lgreen/6.-Cluster-Maintenance
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
kubectl get all -all--namespaces -o yaml > all-deploy-services.yaml
snapshot save [백업 파일 이름]\
snapshot status [백업 파일 이름]
service kube-apiserver stop
etcdctl restore [백업 파일 이름] --data-dir /var/lib/etcd-from-backup
--data-dir=/var/lib/etcd-from-backup(etcd 설정 파일 변경)
systemctl daemon-reload (service daemon 리로드)
service etcd restart (etcd 서비스 재시작)
service kube-apiserver start
kubectl get deployments.app,svc,pod
Reference
この問題について(6. Cluster Maintenance), 我々は、より多くの情報をここで見つけました https://velog.io/@be-lgreen/6.-Cluster-Maintenanceテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol