개요
k8s 업데이트하는 방법 및 출력 방식 변경을 알아보겠습니다.
핵심
1. kubeadm으로 cluster update
2. kubelet update
3. update할 node는 drain을 통하여 pod를 안전한 곳에 이동
controlplane 업데이트
Pod를 모두 다른 node로 이동
kubectl drain controlplane --ignore-daemonsets
daemonsets는 자동으로 drain 되지 않음으로 --ignore-daemonsets 을 주어서 강제로 내려야 합니다.
package 업데이트
apt update
업데이트 가능 package 확인
apt-cache madison kubeadm
kubeadm update
kubeadm 자동 업데이트 풀기
apt-mark unhold kubeadm
kubeadm 업데이트
apt-get update && apt-get install -y kubeadm='1.28.x-*'
kubeadm 자동 업데이트 막기
apt-mark hold kubeadm
cluster upgrade가능성 검사
kubeadm upgrade plan
아래와 같은 upgrade가능 정보가 나옵니다.
cluster upgrade 수행
kubeadm upgrade apply
수행되는 작업
- 업그레이드 실행: 사용자가 지정한 버전으로 쿠버네티스 클러스터의 컨트롤 플레인 노드들을 업그레이드합니다. 이는 쿠버네티스의 코어 컴포넌트들을 포함합니다 (예: kube-apiserver, kube-controller-manager, kube-scheduler, etcd 등).
- 구성 변경 적용: 클러스터의 구성 파일을 새 버전에 맞게 업데이트하고 필요한 변경사항을 적용합니다.
- 의존성 관리: 쿠버네티스의 다양한 컴포넌트들 간의 의존성을 고려하여 업그레이드가 진행됩니다. 예를 들어, API 서버가 먼저 업그레이드된 후 다른 컴포넌트들이 업그레이드됩니다.
- 버전 호환성 확인: 업그레이드 과정에서 클러스터의 현재 버전과 목표 버전 간의 호환성을 확인합니다. 이는 업그레이드 과정에서 발생할 수 있는 문제를 최소화하는 데 도움이 됩니다.
- 롤백 준비: 업그레이드 과정에서 문제가 발생할 경우를 대비하여 롤백을 준비합니다. 이는 업그레이드가 실패하거나 예기치 않은 문제가 발생했을 때 이전 버전으로 쉽게 되돌릴 수 있도록 합니다.
- 보안 및 기능 업데이트: 새 버전의 쿠버네티스는 종종 보안 패치와 새로운 기능을 포함하고 있어, 이를 통해 클러스터의 보안과 성능을 향상시킬 수 있습니다.
kubelet update
kubelet 자동 업데이트 풀기
apt-mark unhold kubelet
kubelet 업데이트
apt-get install kubelet=1.27.0-00
참고
apt-cache policy kubelet 해당 명령으로 설치 가능한 버전 확인 가능
단 apt-get update 먼저 해야 최신정볼르 받아 옵니다.
kubelet 자동 업데이트 막기
apt-mark unhold kubelet
cluster 구성 파일 변경 사항 적용
systemctl daemon-reload
쿠버네티스 업그레이드 과정에서 kubelet이나 다른 시스템 서비스의 구성 파일이 변경될 수 있습니다. systemctl daemon-reload 명령은 systemd 데몬에게 이러한 변경 사항을 재로드하라고 지시합니다. 즉, 변경된 구성 파일을 읽어들여 적용하는 과정입니다.
kubelet 재시작
systemctl restart kubelet
controlplane drain 풀기
kubectl uncordon controlplane
worker node 업데이트
controlplane 업데이트와 비교하여 아래 2개의 단계만 빠집니다.
kubeadm upgrade plan
kubeadm upgrade apply
controlplane taint 제거
kubectl taint node controlplane node-role.kubernetes.io/control-plane:NoSchedule-
taint를 제거해야 worker node가 drain되었을시 pod가 controlplane으로 넘어 갈수 있습니다.
worker node drain
kubectrl drain worker1 --ignore-daemonsets
daemonsets는 자동으로 drain 되지 않음으로 --ignore-daemonsets 을 주어서 강제로 내려야 합니다.
package 업데이트
apt update
업데이트 가능 package 확인
apt-cache madison kubeadm
kubeadm update
kubeadm 업데이트 풀기
apt-mark unhold kubeadm
kubeadm 업데이트
apt-get update && apt-get install -y kubeadm='1.28.x-*'
kubeadm 업데이트 막기
apt-mark hold kubeadm
kubelet update
kubelet 자동 업데이트 풀기
apt-mark unhold kubelet
kubelet 업데이트
apt-get install kubelet=1.27.0-00
kubelet 자동 업데이트 막기
apt-mark unhold kubelet
cluster 구성 파일 변경 사항 적용
systemctl daemon-reload
쿠버네티스 업그레이드 과정에서 kubelet이나 다른 시스템 서비스의 구성 파일이 변경될 수 있습니다. systemctl daemon-reload 명령은 systemd 데몬에게 이러한 변경 사항을 재로드하라고 지시합니다. 즉, 변경된 구성 파일을 읽어들여 적용하는 과정입니다.
kubelet 재시작
systemctl restart kubelet
worker node drain 풀기
kubectl uncordon woker1
controlplane taint 복구
kubectl taint node controlplane node-role.kubernetes.io/control-plane:NoSchedule
출력 방식 설정
custom-columns를 사용한다.
custom-columns의 값은 -o json의 결과 값을 기반으로 만들어집니다.
object의 접근은 . 으로 array의 접근은 []. 으로 접근 합니다.
kubectl get pod -o custom-columns=DEP:.metadata.name,STATE:.status.containerStatuses[].image \
--sort-by=.status.containerStatuses[].image
Rolling update 방법
k8s에서 기본적으로 사용하는 deployment update 방식 입니다.
그래서 image 변환시 아래와 같은 명령어를 사용하면됩니다.
kubectl set image {deployment 이름} {container 이름}={image 이름}
https://doitnow-man.tistory.com/entry/CKA-16-k8s-Rolling-update-and-Rollback
기본 namespace 전환
kubectl config set-context $(kubectl config current-context) --namespace=dev
PV와 PVC 연결
https://doitnow-man.tistory.com/entry/CKA-33-volume-%EA%B3%BC-PV-%EA%B7%B8%EB%A6%AC%EA%B3%A0-PVC
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>
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>
--endpoints 값
--cacert 값
--cert
--key
'Cloud > k8s-CKA' 카테고리의 다른 글
[CKA] 48. killer.sh (0) | 2023.11.18 |
---|---|
[CKA] 47. k8s 문제 풀이 모르는 것 정리 (0) | 2023.11.17 |
[CKA] 45. Troubleshooting (0) | 2023.11.07 |
[CKA] 44. network policy (0) | 2023.11.05 |
[CKA] 43. k8s 각종 보안 (image, securityContext) (0) | 2023.11.05 |