쿠버네티스 입문 - 3챕터

최시원·2023년 3월 2일
0

쿠버네티스 입문

목록 보기
2/7

kubectl CLI 설치

https://kubernetes.io/ko/docs/tasks/tools/install-kubectl-linux/
를 참고했다. 책의 내용과 동일함.

kubectl 기본 사용법

kubectl 명령어의 구성(생김새)

kubectl [command][TYPE] [NAME][flags]

command : 자원에 실행하려는 동작을 의미함. create, get, delete 등
type : 자원 타입을 의미함. pod, service, ingress 등
name : 자원 이름을 의미함.
flags : 부가적인 설정 옵션

The connection to the server localhost:8080 was refused - did you specify the right host or port?

위와 같은 오류가 떠서 찾아보는 중, 내 마스터노드에

mkdir -p HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):(id -g) $HOME/.kube/config

다음 명령을 실행하지 않았다는 것을 알게 되었다. 애초에 $HOME/.kube/config 파일이 해당 위치에 존재하지도 않는다. 실습이 전체적으로 꼬인것 같아 아예 삭제하고 새로 클러스터를 구성해야 할 것 같다.

kubectl get pods의 실행 화면이다

NAME : 파드 이름이 나온다.
READY : 0/1이면 파드는 생성되었으나 사용할 준비가 되지 않았다는 의미. 1/1이면 생성되었으며 사용할 준비도 되었다는 의미이다
STATUS : 파드의 현재 상태를 의미한다. Running은 파드가 실행되었다는 의미. 새로운 파드를 생성하는중에는 Terminating(컨테이너 접속중) 이나 ContainerCreating(컨테이너 생성중) 등으로 표시된다
RESTARTS : 해당 파드의 재사직 횟수를 의미한다
AGE : 파드의 생성 후 시간을 의미한다.

kubectl get services 의 실행 화면이다. svc는 service의 줄임말

NAME : 서비스의 이름
TYPE : 서비스 타입
CLUSTER-IP : 현재 클러스터 안에서 사용되는 IP
EXTERNAL-IP : 클러스터 외부에서 접속할 때 사용하는 IP이다. 별도 설정하지 않았을 시 none 이다.
PORTS : 해당 서비스에 접속하는 포트
AGE : 자원 생성 후 지난 시간.

POSIX/GNU 스타일 명령 작성 규칙
kubectl은 POSIX/GNU스타일의 명령 작성 규칙을 따른다.

다음 예시를 살펴보자

kubectl -n default exec my-pod -c my-container -- ls /

-n default : -n은 --namespace 옵션이다. 쿠버네티스 클러스터의 namespace를 default로 설정하라는 의미이다.

exec my-pod : 'my-pod'라는 이름의 파드에 해당 명령을 실행하라는 뜻이다(필수 인자)

-c my-container : 컨테이너 지정 옵션이다. -c == -container. 파드 안에 여러개의 컨테이너가 실행되었을 때 특정 컨테이너를 지정하는 옵션이다. my-container는 사용자가 만든 컨테이너이다

-- ls / 쿠버네티스 관련 옵션들을 모두 종료한다는 의미이다. 이후 컨테이너에서 실행할 명령 설정이 가능하다.

** 기억해 둘 만한 전역 플래그
-h(--help) : kubectl [command] --helop 형태로 사용한다. 개별 명령의 도움말을 출력한다
-v[log level] : 명령을 실행하는 과정의 로그를 출력하거나 로그 레벨을 설정한다. 디버깅 시에 사용한다.

kubeconfig 환경변수

kubectl api-resources

SHORTNAMES(자원의 단축 이름) APIGROUPT(함께 노출되는 자원 집합), NAMESPACED(특정 네임스페이스에 속해있는가?), KIND(객체 스키마) 등의 정보를 제공한다.

만약 도커 데스크탑으로 쿠버네티스를 사용한다면 자동으로 kubeconfig가 설정된다.

kubectl config use-context docker-desktop

위 명령으로 실행해 사용 가능하다

--kubeconfig 옵션으로 다른 설정파일을 지정할 수 있다

kubectl -kubeconfig=AWSconfig get pods
kubectl -kubeconfig=GCPconfig get pods

디플로이먼트를 이용해 컨테이너 실행

k8s로 컨테이너 실행시에는 두가지 방법이 있다.

  1. kubectl run
  2. YAML형식의 탬플릿 사용

kubectl run으로 컨테이너 실행하기

kubectl run [deployment name] --image [container image name] --port=[port number]

해당 명령은 다음과 같이 전달된다
[사용자] -(명령)-> [쿠버네티스 클러스터의 컨테이너] <-(컨테이너 이미지)- [도커 허브]

사용자가 쿠버네티스 클러스터에 컨테이너 실행 명령을 내리면 컨테이너 이미지를 쿠버네티스 클러스터 안으로 가져와 실행한다.

디플로이먼트 설정이 담긴 탬플릿(yaml파일)로 컨테이너를 실행할 수도 있다.
책을 참고하면 탬플릿의 예시가 나온다.

외부에서 클러스터 안 app에 접근하기

외부 접근을 위해서는 k8s service를 사용해야 한다. 바로 파드에 접근할 수 없다
서비스 타입에는 ClusterIP, NodePort, LoadBalancer, ExternaName이 있다.

서비스 하나에 모든 노드의 지정된 포트를 할당하는 NodePort가 실습내용이다.
다음 명령어를 사용한다

kubectl expose deployment nginx-app --typNodePort

nginx-app은 컨테이너 이름이다

이후 kbuectl get service 명령으로 nginx-app이라는 서비스가 NodePort 타입으로 실행된것을 확인 가능하다

Port(s) 항목에 80:31572를 확인할 수 있는데, 쿠버네티스 내부의 80번 포트가 31572라는 외부 포트와 연결되었다는 뜻이다

이는 웹 브라우저에서 localhost:31572로 접속하면 클러스터 안의 해당 app에 접근 가능하다는 의미이다. nginx 기본페이지를 확인할 수 있다.

0개의 댓글