2023. 9. 13. 03:02ㆍCareer/Interview
1. 쿠버네티스란?
컨테이너화된 애플리케이션을 관리하는 도구로, 효율적인 배포, 확장, 유지가 가능한 오픈 소스 컨테이너 오케스트레이션 도구입니다.
2. 쿠버네티스의 주요 구성 요소는 무엇인가요?
쿠버네티스는 API를 관리하는 control-plane 과 실제 애플리케이션 워크로드를 띄우는 worker node로 구성됩니다.
control-plane에는 api-server, scheduler, controller-manager, etcd, core-dns로 구성되어있습니다.
이때 각각의 worker node들은 kube-proxy를 통해 통신하며 마스터와 상호작용하기 위해 kubelet이 동작합니다.
3. 오케스트레이션의 의미를 아는지?
오케스트레이션이란 컨테이너와 연결된 리소스를 자동으로 관리하고 조정해주는 것을 의미합니다.
쿠버네티스에서는 네트워크, 배포, 확장, 자가치유 등을 통한 리소스 관리를 의미합니다.
4. 쿠버네티스 서비스는 무엇이고, 타입에는 어떤 것들이 있고 각각 역할이 무엇인지?
같은 기능을 하는 파드의 집합에 대한 단일 DNS와 IP를 부여하여 로드밸런싱을 수행하는 리소스입니다.
ClusterIP: 서비스의 기본 타입으로 클러스터 내부에서만 접근할 수 있는 IP를 통해 Pod로 접속할 수 있습니다.
NodePort: ClusterIP와 반대로 클러스터의 IP주소와 NodePort를 통해 외부에서 접속할 수 있습니다.
LoadBalancer: CSP의 로드 밸런서와 연결하여 외부 트래픽을 클라우드 쿠버네티스 클러스터 내로 포워딩 해줍니다.
ExternalName: 클러스터내의 서비스를 조회하여 외부 서버에 대한 CNAME(Domain Name) 정보를 얻어 외부 서비스에 접근할 수 있습니다.
5. 쿠버네티스와 도커 스웜의 차이점에 대해
초기 설정 | 사용자 친화적, 초기 설정 간단 | 설정과 관리가 복잡, 높은 유연성과 확장성 제공 |
스케일링 | 빠른 서비스 시작 | 대규모 클러스터와 애플리케이션 지원 |
로드 밸런싱 | 자동 포트 게시 | NodePort나 LoadBalancer 사용 필요 |
데이터 볼륨 | 로컬 볼륨, 스토리지 드라이버 사용 | 퍼시스턴트 볼륨(PV)과 퍼시스턴트 볼륨 클레임(PVC) 사용 |
업데이트 전략 | rolling updates 사용 | 다양한 전략 제공 (예: RollingUpdate, Recreate) |
통합 및 플러그인 | Docker API 통합, 좋은 플러그인 호환성 | 넓은 생태계, 다양한 클라우드/스토리지/네트워크 통합 옵션 |
커뮤니티 및 지원 | Docker, Inc. 지원, 상대적으로 적은 활동 | 강력한 커뮤니티, 여러 대기업 지원 |
6. ETCD란?
ETCD란 쿠버네티스 클러스터 내의 리소스 정보들을 key-value 형태로 저장한 데이터베이스입니다.
etcd에 저장도니 리소스 정보들을 바탕으로 scheduler는 어느 노드에 워크로드를 생성할지 판단하고
controller-manager는 워크로드의 수를 보장합니다.
7. 쿠버네티스 API 보안을 위한 솔루션에는 어떤 것들이 있습니까?
RBAC의 RoleBinding을 통한 사용자 및 Service Account에 대한 리소스 제어가 있습니다.
NetworkPolicy를 통한 IP, 파드, 네임스페이스, 포트에 대한 인바운드 아웃바운드 제어가 가능합니다.
8. 쿠버네티스 클러스터로 API 요청을 하는 방법에 대해서
kubectl, REST API, 프로그래밍 언어를 이용한 라이브러리 사용, kubectl proxy, Dashboard 등이 있습니다.
9. Ingress의 동작 원리에 대해서 알려주세요.
Ingress-Controller에 의해서 Ingress의 라우팅 정보를 습득한 후에
경로와 포트에 맞는 서비스를 타고 워크로드로 트래픽이 로드밸런싱 됩니다.
10. 특정 네임스페이스에 리소스를 제한하고 싶다면 어떻게 해야 하는가?
ResourceQuota를 이용하여 CPU 코어수와 메모리 크기를 제한할 수 있습니다.
또한, 특정 시간 이후로 자동으로 네임스페이스를 삭제하려고 할 때 TTL 옵션을 통해 주어진 시간 이후에 해당 네임스페이스를 자동으로 삭제할 수 있습니다
11. admin.conf 파일에는 어떤 정보들이 들어있는지?
admin.conf 파일은 클러스터 설정, 인증 정보, 연결할 클러스터 정보 등을 포함하고 있어
kubectl과 같은 클라이언트 도구로 클러스터와 통신하기 위한 용도로 사용됩니다.
클러스터에 대한 CA 인증서, 사용자 정보(토큰), 클러스터 정보, 현재 사용중인 context 등에 대한 정보가 담겨있습니다.
12. 쿠버네티스 버전 업그레이드 방식에 대해서 설명해주세요
먼저 kubeadm 버전을 확인하고 업데이트 버전을 다운받아 설치합니다.
control-plane 노드를 drain하고 kubectl, kubelet 업데이트 버전을 설치합니다.
시스템 데몬을 재시작하고, kubelet을 재시작합니다.
13. MSA의 장단점
Agile하게 독립적으로 서비스마다 배포가 가능하다는 것이며, 부하가 많은 서비스만 따로 수평적인 확장이 가능합니다.
하지만, 모놀리식에 비해 상대적으로 복잡하고 트랜잭션 등 고려해야 할 요소들이 많습니다.
14. Docker가 무엇인지 설명해주세요
Docker는 오픈소스 가상화 플랫폼으로 Host 운영체제가 달라도 항상 같은 환경에서 애플리케이션을 실행할 수 있도록 이미지화 할 수 있습니다.
15. Pod란 무엇인가요
Pod는 쿠버네티스에서 가장 기본적인 배포 단위이며, 하나 이상의 컨테이너를 포함하고 있습니다.
16. ReplicaSet의 목적은 무엇인가요?
Pod의 개수를 일정하게 보장해주기 위해 생성하는 리소스입니다.
control-plane의 controller-manager에 의해서 Pod의 개수가 일정하게 보장됩니다.
17. ConfigMap과 Secret의 차이는 무엇인가요?
기본적인 마운트 방식은 같지만 Secret의 경우에는 base64 타입으로 인코딩 되어 값이 저장됩니다.
일반적인 애플리케이션의 환경 설정에 필요한 변수들은 ConfigMap을 통해 저장하고,
애플리케이션이 동작하기 위해 필요한 Credential 등은 Secret을 이용해 저장합니다.
18. 쿠버네티스의 네트워킹 방식에 대해서 설명해주세요
1. Pod가 생성될 때, CNI 플러그인을 호출하여 해당 Pod에 대한 네트워크를 구성합니다.
2. 외부에서 특정 Pod나 Service에 접근하려 할 때, kube-proxy는 이를 감지하고 iptables 규칙을 사용하여 트래픽을 적절한 Pod로 라우팅합니다.
정리) CNI는 Pod의 네트워크 인터페이스와 관련된 기본 설정을 담당하고, 실질적인 트래픽 라우팅 및 로드밸런싱은 kube-proxy와 iptables이 담당합니다.
19. HPA(Horizontal Pod AutoScaling)에 대해서 설명해주세요
HPA는 metric-server에 의해 수집된 Pod의 CPU 및 메모리 사용량을 바탕으로
수평적 확장 및 축소가 가능하게 해주는 기능입니다.
20. Rolling Update | Blue-Green | Canary Deployment에 대해 비교 설명 해주세요
Rolling Update는 업데이트된 파드를 성공적으로 띄우고 이전 버전의 파드를 지우면서 순차적으로 업데이트 하는 방식
Blue-Green은 별도의 Deployment를 이용하여 현재 버전(Blue)와 업데이트 버전(Green)을 동시에 준비하여 트래픽을 전환하는 방식으로 배포하는 방식
Canary는 새버전의 애플리케이션을 일부 사용자에게만 제공하는 방식입니다.
21. QoS에 대해서 설명해주세요
파드의 각 컨테이너를 띄울 때 우선순위를 정할 때 사용합니다.
limit과 request이 같은 Guaranteed,
limit이 더 큰 Burstable,
아무 설정을 하지 않은 BestEffort 순으로 우선순위가 정해집니다.
22. liveness vs readiness probes의 차이점에 대해서 설명해주세요
LivenessProbe의 경우에는 조건을 충족하지 못했을 때 Pod를 재시작합니다.
ReadinessProbe의 경우에는 조건을 충족하지 못했을 때 트래픽을 차단합니다.
※ ReadinessProbe의 경우에는 트래픽이 너무 과부하 되어서 조건을 충족하지 못할 때 트래픽을 잠시 차단하여 트래픽 부하를 덜어주는 기능을 수행할 수도 있습니다.
23. AWS 클라우드 환경의 쿠버네티스에서 IAM Role을 사용한 접근 제어 방법에 대해서 설명해주세요.
ServiceAccount의 어노테이션으로 IAM Role을 등록해줍니다.
권한에 대한 정의는 Role을 생성해주고 RoleBinding을 통해 ServiceAccount에 권한을 생성해줍니다.
apiVersion: v1
kind: ServiceAccount
metadata:
annotations:
eks.amazonaws.com/role-arn: arn:aws:iam::123412341234:role/my-role
name: aws-sa
namespace: default
24. Anti Affinity에 대해서 설명해주세요.
각각의 Pod들이 모두 다른 노드 혹은 다른 AZ에서 실행되게 설정하는 것입니다.
Assigning Pods to Nodes
You can constrain a Pod so that it is restricted to run on particular node(s), or to prefer to run on particular nodes. There are several ways to do this and the recommended approaches all use label selectors to facilitate the selection. Often, you do not
kubernetes.io
25. PDB(Pod Disruption Budget)에 대해서 설명해주세요.
Pod를 일괄적으로 업데이트할 때 최소한의 가용성을 유지하기 위해, 최대로 삭제할 수 있는 Pod의 개수를 제한하는 것을 의미합니다.
26. ReplicaSet과 Deployment의 차이는 무엇인가요?
Deployment는 ReplicaSet과 달리 롤백, 롤아웃 기능을 제공하며 버전관리가 가능합니다.
28. 쿠버네티스의 드레인(Drain) 작업의 목적은 무엇인가요?
해당 노드에 더이상 파드를 스케쥴링하지 않도록 설정하는 용도입니다.
29. 쿠버네티스의 네트워크 폴리시(Network Policy)에 대해 설명하세요.
Pod, Namespace, IP, Port를 기준으로 In & Out 트래픽을 제어하는 네트워크 제어 규칙입니다.
30. Affinity와 Anti-Affinity에 대해 설명하세요.
Affinity:
Node Affinity
Pod가 특정 노드 레이블에 기반하여 스케줄링되도록 선호하는 노드를 지정하는 규칙을 정의할 수 있습니다.
Pod Affinity
Pod가 특정 조건을 만족하는 다른 Pod와 같은 노드에 배치되도록 선호하는 규칙을 정의할 수 있습니다.
Anti-Affinity:
Node Anti-Affinity
Pod가 특정 노드 레이블을 가진 노드에서 배치되는 것을 방지하는 규칙을 정의할 수 있습니다.
Pod Anti-Affinity
Pod가 특정 조건을 만족하는 다른 Pod와 같은 노드에 배치되는 것을 방지하는 규칙을 정의할 수 있습니다. 이는 고가용성을 증가시키기 위해 유용하며, 한 노드에서 실패할 경우 모든 연관된 Pod가 동시에 실패하는 것을 방지하려는 경우에 사용됩니다.
31. StatefulSet의 주요 용도는 무엇인가요?
Stateful한 애플리케이션을 관리하기 위한 것입니다. 데이터베이스나, 캐시서버와 같이 특정 상태를 유지해야하는 애플리케이션이 다운되는 경우 재실행되더라도 같은 상태를 유지하기 위해 StatefulSet을 사용합니다.
32. 쿠브컨트롤(kubectl) 명령어 중 자주 사용하는 것들은 무엇인가요?
get, describe, run, create, apply, replace, logs, exec -it -- /bin/bash, edit, delete, config, top, rollout, scale, set image, ...
33. 쿠버네티스의 라벨과 어노테이션의 차이점은 무엇인가요?
라벨은 객체를 식별하고 선택하기 위한 용도이고,
어노테이션은 리소스에 대한 특정 도구나 라이브러리에 정보를 제공하기 위해 사용됩니다.
따라서, 라벨을 이용하여 리소스를 필터링할 수 있지만, 어노테이션은 불가능합니다.
34. 쿠버네티스에 있는 Namespace의 목적은 무엇인가요?
쿠버네티스 리소스들을 논리적으로 분리,
네임스페이스별 리소스 제한,
RBAC, NetworkPolicy등을 이용한 엑세스 제한
35. 쿠버네티스의 헬스 체크 종류에 대해 설명하세요.
Liveness, Readiness, Startup Probe가 있습니다.
Liveness Probe는 컨테이너가 정상적으로 동작 중인지 확인하며, 비정상적일 때 컨테이너를 재시작합니다.
Readiness Probe는 컨테이너가 요청을 처리할 준비가 되었는지 확인하며, 비정상적일 때 트래픽을 차단합니다.
Startup Probe는 컨테이너가 시작됐는지 확인합니다.
이러한 Probe들은
HTTP GET, TCP Socket, 특정 명령어를 기반으로 컨테이너가 정상적으로 동작됐는지 확인할 수 있습니다.
36. Job과 CronJob의 차이점은 무엇인가요?
Job은 일회성으로 한번 실행되고 종료되지만, CronJob은 일정 주기로 반복해서 실행됩니다.
37. 쿠버네티스에서 로드 밸런싱이 어떻게 이루어지나요?
Service를 이용하여 Pod들에 대한 단일 진입점(IP, Domain Name)을 통해 로드밸런싱 됩니다.
Ingress를 이용하여 L7 로드밸런싱이 가능합니다.
38. 쿠버네티스의 초기화 컨테이너(Init Containers)의 목적은 무엇인가요?
다른 컨테이너들이 실행되기 전에 가장 먼저 실행되는 컨테이너입니다.
실행되기 전에 필요한 서비스, 리소스, 조건 등이 올바르게 구성되었는지 확인하는데 사용됩니다.
39. CNI(Container Network Interface)에 대해 설명해주세요.
쿠버네티스와 같은 오케스트레이션 플랫폼에서는 CNI를 사용하여 컨테이너 간의 통신, 서비스 디스커버리, 로드 밸런싱 등의 네트워킹 요구 사항을 구현합니다.
40. 쿠버네티스의 보안 기능 중 일부를 나열하고 설명하세요.
RBAC의 RoleBinding을 통한 사용자 및 Service Account에 대한 리소스 제어가 있습니다.
NetworkPolicy를 통한 IP, 파드, 네임스페이스, 포트에 대한 인바운드 아웃바운드 제어가 가능합니다.
41. 어떻게 컨테이너 간의 통신을 제어하나요?
생략
42. 쿠버네티스에서 스토리지 클래스(StorageClass)의 역할은 무엇인가요?
다양한 스토리지 유형과 해당 스토리지의 구성을 정의하게 해주는 리소스입니다.
동적 프로비저닝, 다양한 스토리지, 스토리지 설정 등이 가능합니다.
43. 쿠버네티스의 Custom Resource Definition(CRD)에 대해 설명하세요.
쿠버네티스 API를 사용하여 기본 오브젝트 외에도 커스터마이징한 리소스를 정의하고 사용할 수 있습니다.
44. DaemonSet의 주요 용도는 무엇인가요?
각 노드에 하나의 파드 인스턴스를 생성 및 보장하기 위해 사용됩니다.
모든 노드에서 지속적으로 생성되어야 하는 백그라운드 작업이나, 서비스를 관리하기 위해 사용됩니다.
ex) 모니터링, 로깅, 네트워크
45. 쿠버네티스에서의 오토스케일링 전략에 대해 설명해주세요.
HPA: 파드의 수를 자동으로 확장 및 축소합니다.
VPA: 파드의 CPU 및 메모리 리소스 요청 및 제한을 자동으로 조정합니다.
Cluster Autoscaler: CSP에서 제공하는 VM의 경우에는 인스턴스 스펙에 따라 최대 생성할 수 있는 파드의 수가 정해져있습니다. 따라서 Clsuter Autoscaler를 이용하여 노드의 개수를 조정할 수 있습니다.
46. 쿠버네티스의 연합(Federation) 클러스터의 장점은 무엇인가요?
여러 클러스터를 중앙에서 통합으로 관리할 수 있습니다.
가용성이 높습니다.
47. 쿠버네티스의 API 서버는 어떤 역할을 하나요?
쿠버네티스 API-Server는 클러스터 내로 들어오는 모든 API 요청을 관리하는 역할을 합니다.
해당 API요청에 대한 인증 및 인가 처리를 하고 받은 API 요청에 따라 쿠버네티스 오브젝트 CRUD를 수행합니다.
특정 리소스로 들어오는 요청을 적절하게 라우팅합니다.
48. 쿠버네티스의 스케쥴러(Scheduler)의 작동 원리는 무엇인가요?
Pod를 어느 Node에 배치할지 결정하는 역할을 합니다.
1. Pod를 배치할 수 있는 Node를 필터링하고,
2. 메트릭 정보를 통해 우선순위 규칙에 맞게 노드 점수를 산정합니다.
3. 가장 높은 점수를 받은 Node에 파드를 할당하고, 같은 점수가 있을 경우 selectHost() 함수를 사용하여 라운드-로빈 방식으로 할당합니다.
49. 쿠버네티스에서 민감한 정보를 관리하는 베스트 프랙티스는 무엇인가요?
1. Secret 리소스를 사용하여 정보를 저장합니다. Secret은 기본적으로 base64 인코딩이 되어 저장되기 때문에 추가적인 암호 설정을 위한 플러그인이 필요합니다.(ex. HashiCorp Vault)
2. RBAC을 사용하여 Secret에 대한 접근을 차단합니다.
3. ETCD 데이터 암호화: KMS같은 서비스를 이용하여 ETCD에 저장되는 데이터 자체를 암호화합니다.
50. 쿠버네티스에서 어떻게 롤백(Rollback)을 수행하나요?
Deployment를 사용하여 배포한 애플리케이션의 경우 히스토리 기능이 있어
kubectl rollout undo 명령어를 이용하여 롤백할 수 있습니다.
51. 쿠버네티스에서의 파드 간 연결은 어떻게 이루어지나요?
파드 및 서비스의 IP나 Domain Name을 통해 이루어집니다.
각 노드에는 kube-proxy가 존재하며 kube-proxy의 iptables에 따라 통신이 이루어집니다.
52. 쿠버네티스의 티인트(Taint)와 톨러레이션(Toleration)에 대해 설명하세요.
Taint는 특정 노드에 스케쥴링을 제어하는 역할을 하고 Toleration은 Taint 설정된 노드에도 스케쥴링 될 수 있도록 합니다.
키:값:옵션 의 형태로 Taint를 설정할 수 있는데
옵션에는 NoSchedule, PreferNoSchedule, NoExecute, NodeCondition 등이 있습니다.
53. 쿠버네티스의 서비스 계정(Service Account)의 목적은 무엇인가요?
파드가 클러스터 내의 다른 쿠버네티스 API 리소스와 통신하기 위해 사용되는 계정입니다.
54. 쿠버네티스의 컨트롤 플레인(Control Plane)에 포함된 주요 구성요소는 무엇인가요?
api-server, controller-manager, etcd, scheduler가 있습니다.
55. 쿠버네티스에서 스토리지를 프로비저닝(Provisioning)하는 방법에는 어떤 것들이 있나요?
정적 프로비저닝과 동적 프로비저닝이 있습니다.
정적 프로비저닝은 볼륨을 수동으로 생성하여 PV를 정의하고 PVC에 바인딩하여 파드에서 사용하는 방법이고
동적 프로비저닝은 SotrageClass를 이용하여 사용자가 정의한 요구사항을 기반으로 동적으로 볼륨을 생성하고 바인딩하여 파드에서 사용하는 방법입니다.
56. Admission Controller에 대해 설명해주세요.
쿠버네티스 API를 특정 조건에 따라 거부하거나,
자동으로 오브젝트 생성시 환경변수나 볼륨을 자동으로 추가하는 등의 로직을 수행할 수 있습니다.
대표적으로 존재하지 않는 네임스페이스에 오브젝트를 생성하는 것을 막거나
네임스페이스에 할당된 리소스 할당 제한을 오브젝트에 적용하거나
보안 정책을 추가하거나 할 수 있습니다.
'Career > Interview' 카테고리의 다른 글
클라우드 엔지니어 면접 질문 정리 - 네트워크 편 (0) | 2023.09.09 |
---|