먼저 설치 완료한 k8s-master를 킨 후 mobaxterm으로 접속하여 준다
이후 node01-03까지 전부 킨 후 "kubectl get nodes"를 입력하여 정상적으로 연결가능 여부를 확인하여 준다
쿠버네티스 책 p.96~103
◆ 마스터 노드
◇ kubectl
- kubectl을 통해서 쿠버네티스의 명령을 내리는 역할이며, 바로실행되는 바이너리구조이기에 master에만 있을 필요는 없음
◇ API 서버
- 이 명령을 입력 시 api서버로 전송하는 데 메인 전송 통로역할을 하여 필요한 서버들에다가 해당 명령어를 보내주는 것
◇ etcd
- 구성 요소들의 상태 값이 모두 저장되는 곳 = 모든 보고내용을 기록하는 노트
- 분산저장 가능한 key-value 저장소이기에 복제하여 저장하여 놓으면 하나의 etcd가 장애가 나거나 서버 정보가 날라가도 etcd가 하나라도 멀쩡하면 복구가 가능하다
◇ 컨트롤러 매니저
- 클러스터의 오브젝트 관리
- 상태 체크와 복구 및 요청받은 pod 개수대로 생성과 서비스와 pod 연결 등의 다양한 상태 값을 관리
◇ 스케쥴러
- 노드의 상태와 자원, 레이블, 요구조건 등을 고려해 pod를 어떤 워커노드에 생성할 지 결정하고 할당
◆ 워커 노드
◇ kubelet
- pod 구성내용(PodSpec)을 받아서 컨테이너 런타임으로 전달 및 컨테이너 정상 작동여부를 모니터링
◇ 컨테이너 런타임
- pod를 이루는 컨테이너의 실행을 담당
◇ Pod
- 한개 이상의 컨테이너로 단일 목적의 일을 하기 위해 모인 단위
- 언제라도 죽을 수 있는 존재 이기에 이해와 주의 필요
순서대로 진행하면서 "kubectl apply -f deployment.yaml"을 실행
※되지 않을 경우 api버전이 적은 것과 달라서 이기에 home에서 test 디렉토리를 생성하여 "vim deployment.yaml" 파일을 생성하여 내용 추가
하여 수정한 후 다시 시도 시 가능해짐
kind = 내가 만들고 싶은 쿠버네티스의 오브젝트
ㄴapi-resources를 통해 들어가는 이름과 경로 등을 확인할 수 있다
지울때 아래 명령어를 통해 삭제하며, 만들 때는 apply를 통해 만들 수 있다
#외부하고 연결 시 kube-proxy가 연결해주어야 하나 연동되지 않아 pod와 외부와는 연결되지 않음
이제 pod의 이름과 버전 등을 설정하여 주기 위해 실습을 진행한다
쿠버네티스 책 p.112~
먼저 "mkdir -p sources/ch02/02_env && cd $_"로 해당 디렉토리를 상위디렉토리까지 전부 생성 후 접속하고
"vim hello-app.yaml"파일을 생성하여 내용을 입력한 후 (맨위에 apiVersion: v1내용포함)
"vim nginx-pod.yaml"파일을 생성하여 내용을 입력하여 준다
이후 "kubectl run nginx-pod --image=nginx"명령어를 입력하여 생성하여 준 후
"kubectl get pod"로 컨테이너를 확인할 수 있다 (Creating > Running)
그 후 "kubectl create nginx-pod --image=nginx"하면 되지않으나 "kubectl create deployment dpy-nginx --image=nginx"를 통해 pod가 아닌 deployment를 만들 때는 사용가능하다
그리고 "kubectl get pod"를 사용하여 내용을 확인할 수 있다
(만약 Running이 되지 않을 경우 마지막에 버전 nginx:1.14.2 추가)
"kg po"로도 확인가능
ㄴ안될 시 ~/.bashrc의 내용에 추가하여 준 후 reboot
pod : 단일개체
replicaset : pod의 개수를 늘려주는(복제) 역할(개수 지정)
deployment : 여러개의 pod를 관리
ㄴ내용을 보면 1개가 안되는 것을 볼 수 있는 데 wide 명령어 옵션을 추가하여 어떤 node의 문제인지 알 수 있다
이렇게 출력된 내용을 자세히 보면 알수 있는 부분이 있으며 pod는 곂치면 안되기에 다 다른것을 볼 수 있다
그리고 deployment를 삭제하는 방법이 있으며,
이제 test/deployment.yaml 을 사용한다면
ㄴ이름, replica 개수, 사용 이미지 등을 동일하게 설정가능
주의사항으로는 deployment는 create하면서 replicas를 할 수 는 없으며, 만든 후 scale을 통해 변경할 수 있다
그렇기에 파일로 만들어서 여러개의 pod를 만들 수 있는 데 이것을 오브젝트 스펙이라 한다
ㄴ기본 metadata에는 name과 labels가 있는 데 레이블즈는 태그지정과 같이 특정 이름표라고 생각하면 된다
이제 pod를 전부 삭제한 후 nginx-pod.yaml파일로 생성하여 준다
그 후 replicas를 3으로 변경한 후 생성하여 주면
이렇게 생성된 것을 볼 수 있으며
replicas를 6개로 더 늘려주고 실행하게 되면
이미 있다고 표기되기 때문에 생성이 되어있다면 apply를 이용해야한다
이렇게 기존 3대에서 6대가 더 생성된 것을 볼 수 있다 (동일한 node01만 되지 않으며, 사람마다 안되는 node가 다름)
다시 pod 전부 삭제를 한 후
이후 각 pod와 deployment에 대한 정보를 보고 싶다면 "kubectl explain __"의 형식으로 정보를 확인 할 수 있다
네트워크 네임스페이스 (vlan처럼 논리적 격리)는 3계층 ip를 활용하여 구분지어 주는 것
예를 들어서 Apache2에서 /var/www/html/index.html이면 https://192.168.56.10/index.html 로 설정되는 데
local에서는 /var/www/html/이라는 디렉토리가 있으며 root까지 더 올라갈 수 있지만
웹에서는 192.168.56.10/의 / 가 root디렉토리가 되기 때문에 이 부분을 "chroot"라고 한다
chroot를 쓰려면 루트권한이 필요하며, chroot에서 시작된 프로세스또한 루트권한으로 움직인다
참고 : 리눅스 namespace 이해하기 인용
이제 다시 ~/sources/ch02/02_env/ 디렉토리에서 hello-app.yaml파일로 kubectl을 생성하여 준 후
생성된 ip의 8080포트로 접속 시 html값을 확인할 수 있다
이렇게 내부에서는 웹에 접속 시 내용을 확인할 수 있으나 56.102로 등록된 ip로 외부접속은 되지 않는 것을 볼 수 있는 데
외부에서 접속하기 위해서는 포트포워딩이 되어 있어야 따로 접속이 가능하다
'AWS 교육 > Docker-AWS (월)' 카테고리의 다른 글
250210 ssh 키, Kubernetes (0) | 2025.02.10 |
---|---|
250120_AWS Jenkins, DockerHub, GitHub 연결 (0) | 2025.01.20 |
250113_AWS Jenkins, Load Balancing, GitHub 연결 (0) | 2025.01.13 |
250106_AWS Code Deploy(CDA), project 초안 (0) | 2025.01.06 |
241230_AWS Jenkins-Docker, 로드 밸런스, 오토스케일링 그룹 (0) | 2024.12.30 |