티스토리 뷰
kubeadm 클러스터 업그레이드
이 페이지에서는 kubeadm으로 생성된 Kubernetes 클러스터를 버전 1.20.x에서 버전 1.21.x로, 버전 1.21.x에서 1.21.y(여기서 y > x)로 업그레이드하는 방법을 설명합니다. 업그레이드 시 MINOR 버전 건너뛰기는 지원되지 않습니다.
- 기본 제어 영역 노드를 업그레이드합니다.
- 추가 제어 평면 노드를 업그레이드합니다.
- 작업자 노드를 업그레이드합니다.
시작하기 전에
- 릴리스 정보 를 주의 깊게 읽으십시오 .
- 클러스터는 정적 제어 평면과 etcd 포드 또는 외부 etcd를 사용해야 합니다.
- 데이터베이스에 저장된 앱 수준 상태와 같은 중요한 구성 요소를 백업해야 합니다. kubeadm upgrade작업 부하에는 영향을 미치지 않고 Kubernetes 내부 구성 요소만 다루지만 백업은 항상 모범 사례입니다.
- 스왑을 비활성화해야 합니다 .
추가 정보
- kubelet MINOR 버전 업그레이드 전에 드레이닝 노드 가 필요합니다. 제어 평면 노드의 경우 CoreDNS Pod 또는 기타 중요한 워크로드를 실행할 수 있습니다.
- 컨테이너 사양 해시 값이 변경되어 업그레이드 후 모든 컨테이너가 다시 시작됩니다.
업그레이드할 버전 결정
OS 패키지 관리자를 사용하여 안정적인 최신 1.21 버전을 찾으십시오.
apt update
apt-cache madison kubeadm
# find the latest 1.21 version in the list
# it should look like 1.21.x-00, where x is the latest patch
컨트롤 플레인 노드 업그레이드
컨트롤 플레인 노드의 업그레이드 절차는 한 번에 하나의 노드에서 실행해야 합니다. 먼저 업그레이드할 컨트롤 플레인 노드를 선택합니다. 파일 이 있어야 /etc/kubernetes/admin.conf합니다.
"kubeadm 업그레이드" 호출
첫 번째 제어 평면 노드의 경우
- kubeadm 업그레이드:
# replace x in 1.21.x-00 with the latest patch version
apt-mark unhold kubeadm && \
apt-get update && apt-get install -y kubeadm=1.21.x-00 && \
apt-mark hold kubeadm
-
# since apt-get version 1.1 you can also use the following method
apt-get update && \
apt-get install -y --allow-change-held-packages kubeadm=1.21.x-00
- 다운로드가 작동하고 예상 버전이 있는지 확인합니다.
-
kubeadm version
- 업그레이드 계획 확인:이 명령은 클러스터를 업그레이드할 수 있는지 확인하고 업그레이드할 수 있는 버전을 가져옵니다. 또한 구성 요소 구성 버전 상태가 포함된 테이블도 표시됩니다.
-
kubeadm upgrade plan
참고: kubeadm upgrade 또한 이 노드에서 관리하는 인증서를 자동으로 갱신합니다. 인증서 갱신을 거부하려면 플래그 --certificate-renewal=false를 사용할 수 있습니다. 자세한 내용은 인증서 관리 안내서 를 참조하십시오 .
참고:kubeadm upgrade plan 수동 업그레이드가 필요한 구성 요소 구성이 표시되면 사용자는 명령줄 플래그를 통해 대체 구성이 포함된 구성 파일을 제공 해야 합니다 kubeadm upgrade apply. --config그렇게 하지 않으면 kubeadm upgrade apply오류와 함께 종료되고 업그레이드가 수행되지 않습니다.
- 업그레이드할 버전을 선택하고 적절한 명령을 실행합니다. 예를 들어:명령이 완료되면 다음이 표시되어야 합니다.
- [upgrade/successful] SUCCESS! Your cluster was upgraded to "v1.21.x". Enjoy! [upgrade/kubelet] Now that your control plane is upgraded, please proceed with upgrading your kubelets if you haven't already done so.
-
# replace x with the patch version you picked for this upgrade sudo kubeadm upgrade apply v1.21.x
- CNI 공급자 플러그인을 수동으로 업그레이드합니다.CNI 공급자가 DaemonSet으로 실행되는 경우 추가 컨트롤 플레인 노드에서는 이 단계가 필요하지 않습니다.
- CNI(컨테이너 네트워크 인터페이스) 제공업체에 따라야 할 자체 업그레이드 지침이 있을 수 있습니다. 애드온 페이지에서 CNI 공급자를 찾고 추가 업그레이드 단계가 필요한지 확인하십시오 .
다른 제어 평면 노드의 경우
첫 번째 제어 평면 노드와 동일하지만 다음을 사용합니다.
sudo kubeadm upgrade node
대신에:
sudo kubeadm upgrade apply
또한 더 이상 CNI 제공자 플러그인을 호출 kubeadm upgrade plan하고 업그레이드할 필요가 없습니다.
노드 비우기
- 노드를 예약 불가능으로 표시하고 워크로드를 제거하여 유지 관리를 위해 노드를 준비합니다.
-
# replace <node-to-drain> with the name of your node you are draining kubectl drain <node-to-drain> --ignore-daemonsets
kubelet 및 kubectl 업그레이드
- kubelet 및 kubectl 업그레이드
# 1.21.x-00의 x를 최신 패치 버전으로 교체
apt-mark unhold kubelet kubectl && \
apt-get 업데이트 && apt-get 설치 -y kubelet=1.21.x-00 kubectl=1.21.x-00 && \
apt-mark 홀드 kubelet kubectl
-
# apt-get 버전 1.1부터 다음 방법을 사용할 수도 있습니다.
apt-get 업데이트 && \
apt-get 설치 -y --allow-change-hold-packages kubelet=1.21.x-00 kubectl=1.21.x-00
- kubelet을 다시 시작합니다.
-
sudo systemctl daemon-reload sudo systemctl restart kubelet
노드 차단 해제
- 예약 가능으로 표시하여 노드를 다시 온라인 상태로 만듭니다.
-
# replace <node-to-drain> with the name of your node kubectl uncordon <node-to-drain>
작업자 노드 업그레이드
작업자 노드의 업그레이드 절차는 워크로드를 실행하는 데 필요한 최소 용량을 손상시키지 않으면서 한 번에 하나의 노드 또는 몇 개의 노드를 실행해야 합니다.
kubeadm 업그레이드
- kubeadm 업그레이드:
# replace x in 1.21.x-00 with the latest patch version
apt-mark unhold kubeadm && \
apt-get update && apt-get install -y kubeadm=1.21.x-00 && \
apt-mark hold kubeadm
-
# since apt-get version 1.1 you can also use the following method
apt-get update && \
apt-get install -y --allow-change-held-packages kubeadm=1.21.x-00
"kubeadm 업그레이드" 호출
- 작업자 노드의 경우 로컬 kubelet 구성을 업그레이드합니다.
-
sudo kubeadm upgrade node
노드 비우기
- 노드를 예약 불가능으로 표시하고 워크로드를 제거하여 유지 관리를 위해 노드를 준비합니다.
-
# replace <node-to-drain> with the name of your node you are draining kubectl drain <node-to-drain> --ignore-daemonsets
kubelet 및 kubectl 업그레이드
- kubelet 및 kubectl 업그레이드:
# replace x in 1.21.x-00 with the latest patch version
apt-mark unhold kubelet kubectl && \
apt-get update && apt-get install -y kubelet=1.21.x-00 kubectl=1.21.x-00 && \
apt-mark hold kubelet kubectl
-
# since apt-get version 1.1 you can also use the following method
apt-get update && \
apt-get install -y --allow-change-held-packages kubelet=1.21.x-00 kubectl=1.21.x-00
- kubelet을 다시 시작합니다.
-
sudo systemctl daemon-reload sudo systemctl restart kubelet
노드 차단 해제
- 예약 가능으로 표시하여 노드를 다시 온라인 상태로 만듭니다.
-
# replace <node-to-drain> with the name of your node kubectl uncordon <node-to-drain>
클러스터 상태 확인
모든 노드에서 kubelet이 업그레이드된 후 kubectl이 클러스터에 액세스할 수 있는 모든 곳에서 다음 명령을 실행하여 모든 노드를 다시 사용할 수 있는지 확인하십시오.
kubectl get nodes
STATUS열은 모든 노드에 대해 표시 되어야 Ready하며 버전 번호가 업데이트되어야 합니다.
실패 상태에서 복구
kubeadm upgrade예를 들어 실행 중 예기치 않은 종료로 인해 실패하고 롤백되지 않으면 다시 실행할 수 있습니다 kubeadm upgrade. 이 명령은 멱등성이고 결국 실제 상태가 선언한 원하는 상태인지 확인합니다.
kubeadm upgrade apply --force잘못된 상태에서 복구하기 위해 클러스터가 실행 중인 버전을 변경하지 않고 실행할 수도 있습니다 .
업그레이드하는 동안 kubeadm은 아래에 다음 백업 폴더를 씁니다 /etc/kubernetes/tmp.
- kubeadm-backup-etcd-<date>-<time>
- kubeadm-backup-manifests-<date>-<time>
kubeadm-backup-etcd이 제어 평면 노드에 대한 로컬 etcd 멤버 데이터의 백업을 포함합니다. etcd 업그레이드가 실패하고 자동 롤백이 작동하지 않는 경우 이 폴더의 내용을 에서 수동으로 복원할 수 있습니다 /var/lib/etcd. 외부 etcd를 사용하는 경우 이 백업 폴더는 비어 있습니다.
kubeadm-backup-manifests이 제어 평면 노드에 대한 정적 포드 매니페스트 파일의 백업이 포함되어 있습니다. 업그레이드가 실패하고 자동 롤백이 작동하지 않는 경우 이 폴더의 내용을 에서 수동으로 복원할 수 있습니다 /etc/kubernetes/manifests. 어떤 이유로 특정 구성 요소에 대한 사전 업그레이드 및 사후 업그레이드 매니페스트 파일 간에 차이가 없으면 해당 구성 요소에 대한 백업 파일이 작성되지 않습니다.
작동 방식
kubeadm upgrade apply다음을 수행합니다.
- 클러스터가 업그레이드 가능한 상태인지 확인합니다.
- API 서버에 연결할 수 있습니다.
- 모든 노드가 Ready상태 에 있음
- 제어 영역이 정상입니다.
- 버전 편향 정책을 시행합니다.
- 제어 평면 이미지가 사용 가능하거나 기계로 가져올 수 있는지 확인하십시오.
- 구성 요소 구성에 버전 업그레이드가 필요한 경우 교체를 생성하거나 사용자가 제공한 덮어쓰기를 사용합니다.
- 컨트롤 플레인 구성 요소를 업그레이드하거나 하나라도 나타나지 않는 경우 롤백합니다.
- 신규 CoreDNS및 kube-proxy매니페스트를 적용하고 필요한 모든 RBAC 규칙이 생성되었는지 확인합니다.
- API 서버의 새 인증서 및 키 파일을 생성하고 180일 이내에 만료되는 오래된 파일을 백업합니다.
kubeadm upgrade node추가 제어 평면 노드에서 다음을 수행합니다.
- 클러스터 에서 kubeadm ClusterConfiguration을 가져옵니다.
- 선택적으로 kube-apiserver 인증서를 백업합니다.
- 제어 평면 구성 요소에 대한 정적 Pod 매니페스트를 업그레이드합니다.
- 이 노드에 대한 kubelet 구성을 업그레이드합니다.
kubeadm upgrade node작업자 노드에서 다음을 수행합니다.
- 클러스터 에서 kubeadm ClusterConfiguration을 가져옵니다.
- 이 노드에 대한 kubelet 구성을 업그레이드합니다.
- Total
- Today
- Yesterday
- MSA
- 5.4.0.1072
- 오라클 홈디렉토리 copy 후 startup 에러
- 오라클 인스턴트클라이언트(InstantClient) 설치하기(HP-UX)
- (InstantClient) 설치하기(HP-UX)
- [오라클 튜닝] sql 튜닝
- 설치하기(HP-UX)
- 오라클
- 오라클 트러블 슈팅(성능 고도화 원리와 해법!)
- 쿠버네티스
- 앤시블
- 스토리지 클레스
- 테라폼
- 여러서버 컨트롤
- CVE 취약점 점검
- 코로나19
- 우분투
- Oracle
- ubuntu
- K8s
- 트리이스
- 키알리
- directory copy 후 startup 에러
- startup 에러
- pod 상태
- ORACLE 트러블 슈팅(성능 고도화 원리와 해법!)
- 버쳐박스
- 튜닝
- 커널
- [오라클 튜닝] instance 튜닝2
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |