6. Cluster Maintenance


これは劉黛比CKAの講座を聞いて整理した書類です.これは単独で整理された文章ではなく、授業中に記録されたドキュメントなので、間違いがある可能性があります.

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つの段階を経験します.

  • プライマリノードのアップグレード
    プライマリノードをアップグレードすると、プライマリノードの構成部品は機能しません.たとえば、作業ノードのシードを削除しても再生されません.ただし、ワークノードに異常がなければ、ユーザーは正常にサービスを使用できます.

  • ワークノードのアップグレード
    ワークノードをアップグレードするには、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.db
    snapshot 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