Search
Duplicate
📒

[Kubernetes Infra] 08. 클러스터 업그레이드 & ETCD 백업/복구

상태
완료
수업
Kubernetes Infra
주제
4 more properties
참고

클러스터 업그레이드

쿠버네티스 버전 확인

NOTE
쿠버네티스는 활발하게 유지 보수되는 프레임워크이므로 이에 맞춰 주기적으로 버전을 업그레이드 해줘야 한다!
쿠버네티스의 버전 정보
# Cluster의 현재 쿠버네티스 버전 확인 kubectl get nodes # 노드들의 kubelet 버전 kubectl vesion # Client와 Server 버전 # workdloas들을 돌리고 있는 노드 확인 kubectl get nodes -o wide # 클러스터에서 돌아가고 있는 어플리케이션 확인 kubectl get deployments.apps
Bash
복사
kube-apiserver 기준으로 얼마나 차이가 나도되는가?
컴포넌트들이 모두 같은 버전이어야 할 필요는 없지만, kube-apiserver보다 더 버전이 높은 경우가 있으면 안된다!
Controll-manager, kube-scheduler ⇒ -1까지 가능
kubelet, kube-proxy ⇒ -2까지 가능
실제로는 kubeadm이 해당 컴포넌트들을 모두 설치관리 해주기때문에 버전차이가 발생하는 상황이 거의 발생하지 않는다.
kubeadm init \ --pod-network-cidr=10.244.0.0/16 \ --apiserver-advertise-address=192.168.32.10
Bash
복사
coredns, etcd, kube-apiserver, kube-controller-manager, kube-proxy, kube-scheduler의 오브젝트들이 kubeadm init 과정중에 자동으로 생성된다.

클러스터 업그레이드 방법

NOTE
클러스터를 업그레이드 하는 방식은 다양하며 상황에 맞추어서 진행해야 한다.
설치 및 업그레이드에서 주로 사용되는 도구들
모든 노드를 잠시 drain해서 업그레이드 한 다음 가동시켜도 되고, 하나씩 업그레이드 하거나 새로운 노드에 업그레이드를 하는 등 다양한 방식으로 진행할 수 있다.
# 업그레이드 버전결정 apt update apt-cache madison kubeadm k drain master --ignore-daemonsets kubeadm version # 노드 업그레이드 apt-mark unhold kubeadm apt-get update && apt-get install -y kubeadm=1.12.0-00 apt-mark hold kubeadm kubeadm version kubeadm upgrade plan kubeadm upgrade apply apt-mark unhold kubelet kubectl apt-get upgrade -y kubelet=1.12.0-00 kubectl=1.12.0-00 apt-mark hold kubelet kubectl sudo systemctl daemon-reload sudo systemctl restart kubelet k uncordon master
Bash
복사
마스터 노드 업그레이드
hold를 통한 자동업데이트 방지를 하는 이유는 여러가지가 존재한다.
쿠버네티스 클러스터는 많은 컴포넌트간에 연동되므로 버전변경시 호환 문제가 발생할 수 있다.
수동 업데이트가 이전 버전으로 롤백하는 것이 더 수월하다.
보안 및 규정에 대해 버전을 엄격하게 관리해야 할 수 있다.
kublet은 지속적으로 실행되는 데몬 프로세스이므로 systemd를 통해 프로세스를 재시작해야 한다.
kubeadm upgrade apply
마스터 노드에서 사용하며, 새로운 버전으로 쿠버네티스 구성요소를 업그레이드를 적용한다.
k drain node-1 --ignore-daemonsets ssh node-1 apt-mark unhold kubeadm apt-get update && apt-get install -y kubeadm=1.12.0-00 apt-mark hold kubeadm kubeadm upgrade node apt-mark unhold kubelet kubectl apt-get update && apt-get install -y kubelet=1.12.0-00 kubectl=1.12.0-00 apt-mark hold kubelet kubectl sudo systemctl daemon-reload sudo systemctl restart kubelet kubeadm upgrade node config --kubelet-verion v1.12.0 #node configuration을 업그레이드 logout k uncordon node-1
Bash
복사
워커 노드 업그레이드
kubeadm upgade node
마스터/워커 노드 모두에서 사용할 수 있으며, 노드에 특정 업그레이드 작업을 적용한다.
개별노드에 대한 업그레이드 수행 개념

ETCD 백업 및 복구

NOTE
버전을 업그레이드 할 때, 이전 클러스터에 대한 내용은 백업하는것이 좋다!
백업의 경우 3가지 방식이 존재한다.
resource configuration
yaml과 같은 코드를 깃허브에 저장하는 방식
ex) kubectl get all -A -o yaml > all-deploy.service.yaml
ETCD
실제 리소스가 모두 저장되는 위치
cat /etc/kubernetes/manifests/etcd.yaml # etcd 인증관련 정보 모두 볼 수 있음 ETCDCTL_API=3 etcdctl \ --endpoints=https://127.0.0.1:2379 \ --cacert=<trusted-ca-file> \ --cert=<cert-file> \ --key=<key-file> \ snapshot save <backup-file-location>
Bash
복사