728x90
쿠버네티스 아키텍쳐 구조도 - 그림1, 그림2 에 각각 또 필요한 부분이 빠져 있어서 그림 두개를 올림
쿠버네티스 주요 컴포넌트 정리
- kubectl (클라이언트)
- kubectl은 사용자 콘솔에서 명령어를 통해 쿠버네티스 클러스터와 통신하는 도구입니다.
- API 서버와 직접 통신합니다.
- Control Plane (k8s-master, 사용자 콘솔)
- API Server
- 클러스터의 핵심 컴포넌트로, 모든 외부 요청과 내부 통신을 처리합니다.
- 다른 쿠버네티스 컴포넌트들과 상호작용합니다.
- etcd
- 클러스터의 설정과 상태 데이터를 key-value 형태로 저장합니다.
- 모든 상태 정보(노드 상태, 파드 정보 등)를 보관합니다.
- Controller Manager
- 클러스터의 상태를 관리하는 컨트롤러 집합입니다.
- 예를 들어, 레플리케이션 컨트롤러는 파드의 수를 조정합니다.
- Scheduler
- 노드에 파드를 할당하는 역할을 수행합니다.
- 리소스 사용량과 정책에 따라 적절한 노드를 선택합니다.
- CoreDNS
- 클러스터 내부에서 DNS 서비스를 제공합니다.
- 서비스의 이름 해석(Name Resolution)을 처리합니다.
- API Server
- Worker Node (k8s-worker1, k8s-worker2)
- kubelet
- 각 노드에서 실행되는 에이전트로, API 서버와 통신하며 파드를 관리합니다.
- 파드의 라이프사이클을 모니터링하고 필요한 컨테이너를 시작 및 중지합니다.
- kube-proxy
- 네트워크 라우팅을 설정하고 외부와의 통신을 처리합니다.
- 서비스 간 트래픽을 라우팅합니다.
- Docker Engine
- 컨테이너를 실행하는 역할을 합니다.
- 파드 안에 있는 컨테이너를 구동합니다.
- kubelet
- 네트워크
- NIC (Network Interface Card)
- 노드 간, API 서버 간 통신을 지원하는 네트워크 인터페이스입니다.
- NIC (Network Interface Card)
- CNI (Container Network Interface)**란?
- 쿠버네티스는 CNI를 사용하여 다양한 네트워크 플러그인을 지원하며, 이를 통해 컨테이너 간 통신과 네트워크 관리를 수행합니다.
해당 아키텍쳐의 동작 흐름은 아래와 같다.
전체 흐름
- 사용자(콘솔)에서 kubectl을 통해 API 서버에 요청을 보냅니다.
- API 서버는 요청을 받아 etcd에서 상태를 확인하거나 업데이트합니다.
- Scheduler는 파드 배치 계획을 세워서 적절한 Worker Node에 전달합니다.
- 각 Worker Node의 kubelet이 요청된 파드를 실행하며 Docker Engine을 통해 컨테이너를 구동합니다.
- kube-proxy는 네트워크 라우팅을 처리해 서비스 간 트래픽을 연결합니다.
- CoreDNS가 클러스터 내부 DNS를 통해 이름 해석을 제공합니다.
[실습]
# 1. 원격 노드 접속
ssh k8s-master
# 2. CNI 설정 파일 확인
ls /etc/cni/net.d/
# 3. CNI 플러그인 활성화 확인
ps -ef | grep cni
# 4. 원격 노드 종료
exit
# 5. CNI 플러그인 이름 저장
echo "flannel" > /var/CKA2022/k8s_cni_name.txt
# 6. 저장된 CNI 이름 확인
cat /var/CKA2022/k8s_cni_name.txt
쿠버네티스 노드 확인 및 필터링 명령어 정리
1. 노드 정보 확인
- 명령어:
-
kubectl get nodes
- 출력결과:NAMESTATUSROLESAGEVERSION
hk8s-m Ready control-plane,master 33d v1.22.4 hk8s-w1 Ready <none> 33d v1.22.4 hk8s-w2 NotReady <none> 24d v1.22.4
2. 노드 이름만 출력하기
- 문제: cut 명령어 사용 시 오류 발생 (문법 문제).
- 명령어:
kubectl get nodes | cut -d' ' -f1
- 결과:
NAME hk8s-m hk8s-w1 hk8s-w2
3. 헤더 제외하고 노드 이름만 출력하기
- 명령어:
kubectl get nodes | cut -d' ' -f1 | grep -v NAME
- 설명:
- cut -d' ' -f1: 노드 목록에서 첫 번째 컬럼(이름) 추출.
- grep -v NAME: NAME 헤더를 제외하고 출력.
- 결과:
hk8s-m hk8s-w1 hk8s-w2
# 1. 모든 노드 이름 저장 (헤더 제외)
kubectl get nodes | cut -d' ' -f1 | grep -v NAME > /var/CKA2022/hk8s-node-info.txt
# 2. 파일 내용 확인
cat /var/CKA2022/hk8s-node-info.txt
# 3. Ready 상태 노드 출력
kubectl get nodes | grep -i -w ready
# 4. Ready 상태 노드 이름만 출력
kubectl get nodes | grep -i -w ready | cut -d' ' -f1
# 5. Ready 상태 노드 이름 저장
kubectl get nodes | grep -i -w ready | cut -d' ' -f1 > /var/CKA2022/hk8s-node-ready.txt
# 6. 저장된 Ready 노드 확인
cat /var/CKA2022/hk8s-node-ready.txt
문제1 - 멀티 클러스터 정보 보기
1-1 문제. k8s 클러스터로 이동
# 현재 설정된 Kubernetes 컨텍스트를 확인합니다.
kubectl config current-context
# Kubernetes 컨텍스트를 'k8s'로 전환합니다.
kubectl config use-context k8s
# 다시 현재 설정된 Kubernetes 컨텍스트를 확인합니다.
kubectl config current-context
전체 명령어와 결과
- 현재 컨텍스트 확인
kubectl config current-context
-
k8s
-
- 컨텍스트 변경
kubectl config use-context k8s
- Kubernetes 컨텍스트가 k8s로 변경되었습니다.
- 컨텍스트 확인 (변경된 상태)
kubectl config current-context
k8s- k8s로 설정되어 있습니다.
1-2 문제. k8s 클러스터의 상태를 확인하자.
명령어
kubectl cluster-info
결과
Kubernetes control plane is running at https://k8s-master:6443
CoreDNS is running at https://k8s-master:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
설명
- kubectl cluster-info
Kubernetes 클러스터의 제어 평면(Control Plane) 및 DNS 서비스의 정보를 출력합니다. - 결과의 의미
- Control Plane:
Kubernetes 클러스터의 API 서버가 https://k8s-master:6443에서 실행 중입니다.
Control Plane은 클러스터 상태를 관리하고 명령을 실행하는 핵심 구성 요소입니다. - CoreDNS:
클러스터의 DNS 서비스(CoreDNS)가 실행 중인 URL이 https://k8s-master:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy로 출력됩니다.
CoreDNS는 Kubernetes의 DNS를 제공해 Pod 이름을 도메인 이름으로 변환할 수 있게 합니다
- Control Plane:
1-3 문제. k8s 클러스터에서 동작중인 모든 CNI 이름을 /var/CKA2022/k8s cni_name.txt에 저장하시오!!
# 1. SSH로 Kubernetes 마스터 노드 접속
ssh k8s-master
# 2. CNI 설정 파일 확인
ls /etc/cni/net.d/
# 결과:
# 10-flannel.conflist
# 3. CNI 관련 프로세스 검색
ps -ef | grep cni
# 결과:
# root 1034 1 0 09:30 ? 00:00:29 /usr/bin/kubelet --network-plugin=cni ...
# 4. 로그아웃 (마스터 노드 종료)
exit
# 5. CNI 이름 'flannel'을 파일에 저장
echo "flannel" > /var/CKA2022/k8s_cni_name.txt
# 6. 파일 내용 확인
cat /var/CKA2022/k8s_cni_name.txt
# 결과:
# flannel
설명
- SSH 접속: k8s-master 노드에 접근합니다.
- CNI 설정 확인: /etc/cni/net.d/ 경로에 있는 CNI 설정 파일을 확인합니다. 결과로 10-flannel.conflist 파일이 나옵니다.
- CNI 프로세스 검색: kubelet이 CNI 플러그인을 사용하고 있는 것을 확인합니다.
- 로그아웃: 마스터 노드 세션을 종료합니다.
- CNI 이름 저장: CNI 이름 flannel을 **/var/CKA2022/k8s_cni_name.txt**에 저장합니다.
- 파일 확인: 저장된 내용을 확인하면 flannel이 출력됩니다.
1-4 문제. k8s 클러스터에서 ready 상태인 노드 이름을 추출하여 /var/CKA2022/k8s-node-ready.txt 에 저장하시오.
# 1. Kubernetes 노드 중 Ready 상태 확인
kubectl get nodes | grep -i -w ready
# 결과:
# k8s-master Ready control-plane,master 33d v1.22.4
# k8s-worker1 Ready <none> 33d v1.22.4
# k8s-worker2 Ready <none> 33d v1.22.4
# 2. Ready 상태 노드의 이름만 추출해 파일에 저장
kubectl get nodes | grep -i -w ready | cut -d' ' -f1 > /var/CKA2022/k8s-node-ready.txt
# 3. 저장된 파일 내용 확인
cat /var/CKA2022/k8s-node-ready.txt
# 결과:
# k8s-master
# k8s-worker1
# k8s-worker2
설명
- Ready 상태 확인
kubectl get nodes 명령어를 사용해 클러스터의 노드 상태를 확인하고, grep으로 Ready 상태인 노드만 필터링합니다. - 노드 이름만 추출
cut -d' ' -f1 명령어를 사용해 첫 번째 필드(노드 이름)만 추출합니다.- 결과를 /var/CKA2022/k8s-node-ready.txt 파일에 저장합니다.
- 파일 내용 확인
cat 명령어로 저장된 파일 내용을 확인하면 Ready 상태인 노드 이름이 출력됩니다.
728x90
'쿠버네티스' 카테고리의 다른 글
[쿠버네티스] pod 심화 과정 - 멀티 컨테이너 생성, 사이드카 파드 생성 (0) | 2024.12.28 |
---|---|
Kubernetes RBAC(Role-Based Access Control) 정리 (0) | 2024.12.22 |
[쿠버네티스] kube- 관련 개념 정리 (0) | 2024.12.11 |
[쿠버네티스] ETCD 관련 정리 (0) | 2024.12.11 |
쿠버네티스 개념 정리 - 1 (0) | 2024.12.07 |