1. kubectl 이란?

쿠버네티스 관리자가 쿠버네티스 클러스터를 관리하기 위해서 명령을 내릴 때 kubectl 을 이용한다.

 

 

2. kubectl의 기능:

kubectl 로 내린 명령은 control plane 에 있는 kube-apiserver 로 전송되서 명령이 실행된다.

 

kube-apiserver 는 요청이 오면 etcd 에 Command/Query를 통해서 응답을 작성한다.

 

kubectl 은 이 응답을 받아서 우리에게 출력해주는 것이다.

 

 

3. kubectl 을 사용하기 위한 .kube/config:

kubectl 로 명령을 내리기 위해서는 다음과 같은 추가적인 정보가 있어야한다:

  • kubernetes cluster location (명령이 전달될 URL 을 말한다)
  • kubernetes credentials (명령을 내리기 위해 필요한 인증을 말한다.)
  • Context (명령을 내릴 클러스터를 말한다. Context 는 클러스터 + 사용자 이름 + 네임스페이스의 조합으로 구성된다. 즉 어떤 클러스터에 어떤 자격증명을 내릴 것인지 정하는 것.)

 

kube-apiserver 로 전달되는 데이터들은 다음과 같다:

  • kubectl 로 지정한 명령어들과 파라미터들
  • Context
  • Credential

 

이런 정보들은 홈디렉토리에서 숨겨진 폴더인 .kube 안에 있는 config 파일에 등록되어있다:

  • 여기에는 clusterName 과 같은 정보도 추가적으로 들어있다.
apiVersion: v1
kind: Config
clusters:
- name: cluster-name
  cluster:
    server: https://cluster-api-server-endpoint
users:
- name: user-name
  user:
    client-certificate: /path/to/cert.pem
    client-key: /path/to/key.pem
contexts:
- name: context-name
  context:
    cluster: cluster-name
    user: user-name
current-context: context-name

 

 

.kube/config 를 이용해서 Config 정보를 관리할 수 있는 명령어는 다음과 같다:

  • 구성 정보 보기:
    • kubectl config view
  • 새 클러스터, 사용자, 컨텍스트 추가:
    • kubectl config set-cluster
    • kubectl config set-credentials
    • kubectl config set-context
  • 사용 중인 컨텍스트 변경:
    • kubectl config use-context

 

 

4. kubectl 과 GKE 와의 통합

GKE 와 연결하기 위해선 다음과 같이 명령을 내려야한다:

  • get-credentials 명령을 통해서 GKE 와 연결을 하기위한 인증 정보를 가지고 온다.
  • gcloud 명령어는 google cloud shell 에선 기본적으로 설치가 되어있어서 사용할 수 있다.
  • 로컬 환경에서 이 명령어들을 실행해서 GKE 와 연결하려면 다음과 같다:
    • 1. Google Cloud SDK 설치
    • 2. gcloud init 명령 실행 후 Google 계정 로그인 및 GKE 가 포함된 프로젝트 선택.
    • 3. gcloud container clusters get-credentials [CLUSTER_NAME] --zone [ZONE_NAME] 명령을 실행한다. 그러면 .kube/config 에 선택된 클러스터 정보들과 credential 을 기록해준다.
    • 4. GKE 와 연결할 수 있는 필요 정보를 가지고 왔으니 이후부터는 kubectl 을 통한 명령어를 날릴 수 있음.
    • 추가: (만약 다른 GKE 에서 다른 클러스터에 접속하고 싶다면 gcloud container clusters get-credentials [CLUSTER_NAME] --zone [ZONE_NAME] 에서 CLUSTER 와 ZONE 에 대한 정보를 다르게해서 날려야한다.

$ gcloud container clusters \ get-credentials [CLUSTER_NAME] \ --zone [ZONE_NAME]

 

 

5. kubectl 명령어 구문:

kubectl 명령어는 다음과 같은 구조로 이뤄진다:

  • COMMAND 는 내가 원하는 명령을 말한다. (e.g kubectl describe, get, log, exec 등)
  • TYPE 은 명령이 수행될 쿠버네티스 오브젝트를 말한다.
  • NAME 은 오브젝트를 식별할 수 있는 이름을 말한다.
  • FLAG 는 명령에 좀 더 디테일한 설정을 할 수 있도록 하는 옵션 값이다.

+ Recent posts