본문 바로가기
카테고리 없음

[cka] 필수문제 정리 - 1

by Geunny 2024. 9. 3.
반응형

cka 시험이 2주를 앞두고.. 필수 문제들을 정리한다.

 

 

시험 팁! 빠른 타이핑을 위한 명령어 미리 입력해두기

# (기본설정) 
alias k=kubectl # 시험에 적용되어 있다.

# sample yaml 얻기
export do="--dry-run=client -o yaml" # k create deploy nginx $do

# pod 삭제시 즉시삭제
export now="--force --grace-period 0" # k delete pod {pode-name} $now


# 출처 : 피터의 개발 이야기 [https://peterica.tistory.com/540]

 

1. Kubernetes 클러스터 업그레이드

https://webheck.tistory.com/entry/cka-Cluster-Upgrade-Process

 

[cka] Cluster Upgrade Process

1. This lab tests your skills on upgrading a kubernetes cluster. We have a production cluster with applications running on it. Let us explore the setup first.  What is the current version of the cluster?controlplane ~ ➜ k describe pod kube-contro

webheck.tistory.com

https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/

 

Upgrading kubeadm clusters

This page explains how to upgrade a Kubernetes cluster created with kubeadm from version 1.30.x to version 1.31.x, and from version 1.31.x to 1.31.y (where y > x). Skipping MINOR versions when upgrading is unsupported. For more details, please visit Versio

kubernetes.io

 

 

 

쿠버네티스를 업그레이드 하는 순서는 크게는 다음과 같다.

1. Container Engine 설치 (Docker/containerd , istio 등) - 시험에선 설치되어 있는 환경

2. Install

  1. Kubernetes 툴 설치 : kubeadm
  2. master, worker kubelet/kubectl 설치

3. kubeadm 을 이용한 Master 노드에서 API 업그레이드

4. Worker 노드에서 join 하기

 

다음 순서에 맞춰 업그레이드를 진행해 주면 된다.

 

1. 먼저 상단 Docs 에 들어간다. (Upgrading Kubeadm Clusters)

 

업그레이드할 버전을 확인후 진행해준다.

 

다음 명령어를 통해 kubeadm 업그레이드를 진행한다. (아래 내용은 Docs에 있는 내용)

★필수!! 시험에서 주어진 context 를 꼭 사용한다. (컨텍스트 사용은 시험 시작전 습관적으로 사용하여 확인하기)

[user@console ~]$ kubectl config use-context {$컨텍스트명}
# 이후 master node 를 확인후에 ssh 를 이용하여 이동
[user@console ~]$ kubectl get nodes
NAME		STATUS	ROLES					AGE		VERSION
master		Ready	control-plane,master	10d		v.1.30.1
worker		Ready	<none>					10d		v.1.30.1
[user@console ~]$ ssh master
# 이동후 sudo 명령어를 얻기 위해 sudo -i 입력
[user@master ~]$ sudo -i
[user@master ~]#

Determine which version to upgrade to

Find the latest patch release for Kubernetes 1.31 using the OS package manager:

- 업그레이드 할 버전을 체크

# Debian Linux
# Find the latest 1.31 version in the list.
# It should look like 1.31.x-*, where x is the latest patch.
sudo apt update
sudo apt-cache madison kubeadm

# RHEL Linux
sudo yum list --showduplicates kubeadm --disableexcludes=kubernetes

Upgrading control plane nodes

Call "kubeadm upgrade"

For the first control plane node

1. Upgrade kubeadm - kubeadm 을 먼저 업그레이드 해준다.

    ## kode-kloud 에서는 먼저 우분투 repository 에서 kubernetes 의 버전을 명시적으로 변경해 주어야 했다.
vim /etc/apt/sources.list.d/kubernetes.list
##"/etc/apt/sources.list.d/kubernetes.list" 1L, 108B     
deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.30/deb/ /

## REHL 의 경우 경로는 다음에 있다.
vi /etc/yum.repos.d/kubernetes.list


# Debian Linux
# replace x in 1.31.x-* with the latest patch version
sudo apt-mark unhold kubeadm && \
sudo apt-get update && sudo apt-get install -y kubeadm='1.31.x-*' && \
sudo apt-mark hold kubeadm

# REHL Linux
sudo yum install -y kubeadm-'1.31.x-*' --disableexcludes=kubernetes
 

2. Verify that the download works and has the expected version - 설치된 버전 확인해보기

kubeadm version

 

3. Verify the upgrade plan:This command checks that your cluster can be upgraded, and fetches the versions you can upgrade to. It also shows a table with the component config version states. - 쿠버네티스 컴포넌트 업그레이드 상태 확인하기

- plan 뒤에 버전을 입력하면 해당 버전에 대한 plan 만 목록을 확인할 수 있다.

sudo kubeadm upgrade plan v1.23.3 # 1.23.3 목록만 확인됨.

- 위 명령어를 입력하면 각 컴포넌트들이 어떤 버전으로 업그레이드 되는지 확인 가능하며 해당 업그레이드를 위한 kubeadm 명령어 (아래명령어) 도 알려준다. 

 

4. Choose a version to upgrade to, and run the appropriate command. - 업그레이드 적용

# replace x with the patch version you picked for this upgrade
sudo kubeadm upgrade apply v1.31.x

 

5. Manually upgrade your CNI provider plugin. - 실제 상황에서는 Container Network Interface 를 설치해야한다. ex) Flannel / Calico 등

 

이후 실제 현업에서는 다른 master 노드가 있을경우 위 docs에 포함된 명령어로 업그레이드 진행해야 하나 문제에서는 하나의 마스터 노드만 존재할 것임으로 스킵!

sudo kubeadm upgrade node ## 시험에서는 SKIP

 

Drain the node

이제 kubeadm 을 이용하여 각 컴포넌트의 업그레이드가 완료되었다.

kubelet 업그레이드를 위해 master 노드에서 사용중이었던 pod를 모두 drain 시켜준다.

이후 kubelet 을 업그레이드 진행해 주어야 한다.

drain 동작은 master 에서 진행되는 것이 아닌 kubelet 이 실행중인 환경으로 나와야 한다. (위 ssh master 위치에서 진행하면 안됨!)

# replace <node-to-drain> with the name of your node you are draining
kubectl drain <node-to-drain> --ignore-daemonsets
kubectl get ndoes # drian 작업 잘 진행되었는지 확인

 

 

drain 한 이후 다시 master 노드에 들어와서 kubelet 업그레이드를 docs를 활용하여 진행해준다.

Upgrade kubelet and kubectl

1. Upgrade the kubelet and kubectl

# replace x in 1.31.x-* with the latest patch version
# Debian
sudo apt-mark unhold kubelet kubectl && \
sudo apt-get update && sudo apt-get install -y kubelet='1.31.x-*' kubectl='1.31.x-*' && \
sudo apt-mark hold kubelet kubectl

# REHL
sudo yum install -y kubelet-'1.31.x-*' kubectl-'1.31.x-*' --disableexcludes=kubernetes

 

2. Restart the kubele

sudo systemctl daemon-reload
sudo systemctl restart kubelet

 

Uncordon the node

이후 다시 마스터 노드에 pod가 스케쥴링 되도록 uncrodon 을 진행한다 ( master 위치가 아닌 exit 를 이용하여 console로 나오는거 꼭 확인!)

# replace <node-to-uncordon> with the name of your node
kubectl uncordon <node-to-uncordon>

 

 

2. ETCD 백업문제 (고득점임.. 꼭 숙지해서 점수 따기)

https://webheck.tistory.com/entry/cka-Backup-and-Restore-Methods

 

[cka] Backup and Restore Methods

1. We have a working Kubernetes cluster with a set of web applications running. Let us first explore the setup.How many deployments exist in the cluster in default namespace? controlplane ~ ➜ k get deployments.apps NAME READY UP-TO-DATE AVAILABLE AGEblu

webheck.tistory.com

 

https://webheck.tistory.com/entry/cka-Backup-and-Restore-Methods-2

 

[cka] Backup and Restore Methods 2

1. In this lab environment, you will get to work with multiple kubernetes clusters where we will practice backing up and restoring the ETCD database. 2. You will notice that, you are logged in to the student-node (instead of the controlplane).The student-

webheck.tistory.com

ETCD 백업의 동작은 크게 두가지로 진행된다.

 

1. 현재의 상태를 스냅샷으로 저장하기.

2. 저장된 스냅샷으로 ETCD 복원하기.

 

ETCD Bakup

docs 에서 내가 검색한 키워드 -> etcd -> Kubernetes Components | Kubernetes -> etcd -> back-up

https://kubernetes.io/docs/tasks/administer-cluster/configure-upgrade-etcd/#backing-up-an-etcd-cluster

 

Operating etcd clusters for Kubernetes

etcd is a consistent and highly-available key value store used as Kubernetes' backing store for all cluster data. If your Kubernetes cluster uses etcd as its backing store, make sure you have a back up plan for the data. You can find in-depth information a

kubernetes.io

 

1. etcdctl 을 이용하여 백업진행. 진행시 컨테스트 변경 및 노드 접근하여 진행.

ETCDCTL_API=3 etcdctl --endpoints $ENDPOINT snapshot save snapshot.db

# 문제에서 각 키를 주어준다면 아래 활용
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>

 

ETCD Restore

위 에서 생성한 backup 파일 또는 주어진 backup 파일을 이용하여 현재 컨텍스트의 etcd 를 백업할 수 있다.

ETCDCTL_API=3 etcdctl snapshot restore --data-dir <data-dir-location> snapshotdb
#### 현재 날짜 (2024.09.03) 기준 etcdctl 이 deprecate 되었다. 아래명령어를 사용하여 백업이 가능하다.
etcdutl --data-dir <data-dir-location> snapshot restore snapshot.db


Note:
The usage of etcdctl for restoring has been deprecated since etcd v3.5.x and is slated for removal from etcd v3.6. It is recommended to utilize etcdutl instead.

 

나머지는 추후..정리..... 넘 많다.

 

댓글