YOKOHEI.COM

YOKOHEI.COM

›Kubernetes Basics

Kubernetes Basics

  • Kubernetes Basics
  • Commands
  • Static Pod
  • Drain & Uncordon
  • Cluster Upgrade
  • Backup & Restore
  • Certification
  • RBAC
  • CNI
  • CoreDNS
  • Ingress

Kubernetes the Hard Way

  • the Hard Way?
  • AWS Prerequisites
  • CA and TLS
  • Configuration Files
  • Data Encryption
  • Bootstrapping etcd
  • Bootstrapping Control Plane
  • Bootstrapping Worker Node
  • kubectl configuraton
  • Pod Network
  • RBAC for Kubelet
  • Coredns Add-On
  • Test
  • TLS Bootstrapping

Amazon EKS

  • EKS Introduction
  • Ingress with ALB
  • PersistentVolume with EBS
  • NetworkPolicy with Calico
  • Secret with KMS
  • EKS Hands-On

Backup & Restore

バックアップとリストア手法

  • マニフェストファイルを利用する
  • etcd のスナップショットを利用する

マニフェストファイルを利用する

クラウドサービスなどでホストしている Kubernetes クラスタの場合 etcd にアクセスできないので、マニフェストファイルをバックアップする必要が出てくる。
以下のコマンドで一括取得し、一部のコンポーネントについてはバックアップが可能。

$ kubectl get all --all-namespaces -o yaml > full-backup.yaml

etcd のスナップショットを利用する

etcd のスナップショットを利用したリストアについて以下で解説する。

etcd への接続準備

$ kubectl describe pod etcd-master -n kube-system などのコマンドから、接続に必要な情報を取得しておく。

一部抜粋

    Command:
      etcd
      --advertise-client-urls=https://127.0.0.1:2379
      --cert-file=/etc/kubernetes/pki/etcd/server.crt
      --client-cert-auth=true
      --data-dir=/var/lib/etcd
      --initial-advertise-peer-urls=https://127.0.0.1:2380
      --initial-cluster=master=https://127.0.0.1:2380
      --key-file=/etc/kubernetes/pki/etcd/server.key
      --listen-client-urls=https://127.0.0.1:2379
      --listen-peer-urls=https://127.0.0.1:2380
      --name=master
      --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

スナップショットの取得

上で取得した情報を利用し、/tmp/snapshot-pre-boot.db にバックアップ用のスナップショットを保存する。

$ ETCDCTL_API=3 etcdctl --endpoints=https://[127.0.0.1]:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt \
     --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key \
     snapshot save /tmp/snapshot-pre-boot.db

Snapshot saved at /tmp/snapshot-pre-boot.db

スナップショットを新しいフォルダにリストア

data-dir および initial-cluster-token を新しいものに変更し、データをまずはリストアする。

ETCDCTL_API=3 etcdctl --endpoints=https://[127.0.0.1]:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt \
     --name=master \
     --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key \
     --data-dir /var/lib/etcd-from-backup \
     --initial-cluster=master=https://127.0.0.1:2380 \
     --initial-cluster-token etcd-cluster-1 \
     --initial-advertise-peer-urls=https://127.0.0.1:2380 \
     snapshot restore /tmp/snapshot-pre-boot.db

2019-09-21 15:43:18.312634 I | mvcc: restore compact to 1316
2019-09-21 15:43:18.318647 I | etcdserver/membership: added member e92d66acd89ecf29 [https://127.0.0.1:2380] to cluster 7581d6eb2d25405b

稼働中の etcd pod の設定を変更する

今回 etcd は static pod で動いているので /etc/kubernetes/manifests/etcd.yaml を編集すればよい。

起動時に渡されるコマンドを以下の通りに変更する。

--data-dir=/var/lib/etcd-from-backup
--initial-cluster-token=etcd-cluster-1

また、 Volume 周りについても設定変更が必要で、etcd-data の mountPath と hostPath を変更する。

    volumeMounts:
    - mountPath: /var/lib/etcd-from-backup
      name: etcd-data
    - mountPath: /etc/kubernetes/pki/etcd
      name: etcd-certs
  hostNetwork: true
  priorityClassName: system-cluster-critical
  volumes:
  - hostPath:
      path: /var/lib/etcd-from-backup
      type: DirectoryOrCreate
    name: etcd-data
  - hostPath:
      path: /etc/kubernetes/pki/etcd
      type: DirectoryOrCreate
    name: etcd-certs

参考資料

  • https://github.com/mmumshad/kubernetes-the-hard-way/blob/master/practice-questions-answers/cluster-maintenance/backup-etcd/etcd-backup-and-restore.md
  • https://github.com/etcd-io/etcd/blob/master/Documentation/op-guide/recovery.md
  • https://www.youtube.com/watch?v=qRPNuT080Hk
← Cluster UpgradeCertification →
▼ Codes ▼
LeetCodeGitHub
▼ Profile ▼
LinkedInFlickr
▼ Logo made with DesignEvo ▼
DesignEvo
Copyright © 2020 Kohei Yoshida