참고
클러스터 업그레이드
쿠버네티스 버전 확인
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
복사