본문 바로가기
Kubernetes

Kubernetes 기본 명령어

by Nirah 2022. 12. 21.

※ 참고로 편의상  kubectl = k 로 alias 해놨다.

 

 

 

정보 확인

 

쿠버네티스는 네임스페이스끼리 통신할 때 텍스트 주소로 통신하기 때문에 coreDNS가 필수다.

다음 명령어로 coreDNS의 주소가 어디에 있는 지 확인할 수 있다.

 k cluster-info

 

coreDNS가 정상 실행running되고 있는 것을 확인하기 위해 아래 명령어를 쓴다.

 kubectl get all -n kube-system

 

특정 노드에 대한 정보를 확인해 보자.

cpu, memory 등의 용량을 볼 수 있고 kubelet과 kube-proxy 등의 버전을 볼 수 있다.

 k describe node master.labs.local

 

 

 

 

 

노드 스케쥴러

 

노드 스케쥴러의 진행상황을 실시간으로 볼 수 있다.

이 창을 따로 왼쪽에 띄워놓고 실시간 상황을 보자

watch kubectl get pods -o wide

 

watch kubectl get pods,networkpolicy,statefulset,service -o wide

 

nginx 이미지로 webserver 라는 컨테이너를 만들어보겠다.

k run webserver --image=nginx

 

매번 저 watch 실시간 화면을 보면서 ip를 알아낼 순 없기도 하고 목록이 많으면 찾기 어려우니까

awk를 써서 원하는 ip 부분만 표시시켜보자.

k get pods -o wide | awk '{print $1,$6}'

 

 

 

 

실행

메타데이터 이름은 무조건 소문자 사용

k run WEB1 --image=nginx:1.14

 

 

 

 

접속

 

webserver 컨테이너에도 이런식으로 도커처럼 접속이 가능하다.

(cat이나 ls 는 쉘에 접속 안해도 쓸 수 있는 명령어라 -it 옵션을 주진 않았다)

k exec webserver -- cat /etc/hosts

 

 k exec webserver -- ls /

 

쉘로 접속하면 nginx가 데몬실행이라 다음과 같이 -it 옵션을 줘야하고

도커처럼 왼쪽 hostname 부분 모양이 바뀐다 /# 

k exec webserver -it -- /bin/bash

 

다음과 같이 nginx 웹페이지의 내용을 바꿔보자

cd /usr/share/nginx/html/

echo "My name is Nirah" > index.html

cat index.html

 

빠져나올 때는 도커랑 다르게 exit를 써도 쉘밖으로 나가서 exited 되거나 하지 않는다.

(ctrl+p+q 빠이 빠이)

elinks http://172.16.220.70

 

 

웹페이지 내용 확인 elinks

 

다음과같이 webserver 접속시 띄우는 내용을 텍스트로 확인가능

curl http://172.16.220.70

 

yum -y install elinks

커멘드 기반의 웹브라우저를 볼 수 있는 프로그램이다.

curl은 완전이 텍스트 기반인 데 반해 이것은 그래픽을 조금 볼 수 있다.

elinks http://172.16.220.70

 

 

 

 port-forward

 

포트포워딩 (편의상 죽일수 있게 백그라운드로 실행 &)

k port-forward web 80:80 &

 

localhost = master node

 

 

 

 

 

 

deployment

 

deployment는 컨테이너를 대량으로 만들 때 쓴다.

 

run VS create

아래와 같이 run을 써서 webserver 이름으로 컨테이너를 만들면 기존에 이미 존재해서 안 만들어진다.

이런 일 때문에 대량으로 컨테이너를 만들 때 이름을 하나하나 지정해 주는 것은 매우 번거로운 일일 것이다.

 

하지만 deployment를 쓰면 replicas만 지정해주면 인스턴트하고 빠르게 컨테이너들을 대량생상할 수가 있다.

node 정보를 보면 자동으로 밸런싱이 되어서 컨테이너가 node1~3에 골고루 배치된 것이 보인다.

k create deployment web-apaches --image=httpd:latest --replicas=3

다음과 같이 watch 창에 3개의 복제 컨테이너가 생성되어 올라왔다.

각각의 컨테이너들을 구분하기 위해서 이름옆에 해쉬태그가 랜덤하게 자동으로 붙어서 생성된다.

개별삭제나 지정 시에는 이 해쉬태그를 이용하면 되겠다.

 

 

k get deployments

 

웹 아파치에 대한 자세한 정보를 얻고 싶으면 이렇게 한다.

3개를 요구 했고, 3개가 업데이트됐다는 정보가 레플리카스에 남아있다.

k describe deployments web-apaches

 

3개는 어떤 것에 접근하던 간에 동일한 정보라는 것을 알 수 있다.

세 쌍둥이!

 

elinks http://172.16.153.132

elinks http://172.16.51.69

elinks http://172.16.220.69

 

 

k edit deployment web-apaches

레플리카 3→ 5로 수정

 

자동으로 5개로 스케일 아웃 되었다!

 

지우는 방법은 이거 하나면 5개 다 싹 사라진다

 k delete deployments web-apaches

 

 

 

 

 

메니페스토 파일 저장

 

나중에 원하는 메니페스토 파일을 만들 때 컨테이너를 yaml이나 json의 파일 형식으로 저장해야 한다.

우선 wedserver 컨테이너를 yaml 파일로 출력해서 확인해 보겠다.

아래와 같이 각종 용량이나 정보 등을 띄워준다.

k get pods webserver -o yaml

(제이슨의 경우 k get pods web -o json)

 

위 출력 내용이 원하는 것이 확인 됐다면 바로 다음과 같이 파일로 저장한다.

k get pods webserver -o yaml > webserver.yaml

 

cat webserver.yaml |more -10

 

 

 

 

 

컨테이너 사전 시뮬레이션  (--dry-run)

 

회사에서 만든 컨테이너를 서버에 바로 올리는 것은 리소스를 차지하기도 하고 잘못 될 가능성이 있다.

그래서 컨테이너가 잘 작동할 지 올리기 전에 간단하게 사전 시뮬레이션 해보는 명령어가 있다.

 

새로 컨테이너 'web'을 하나 만들어보자.

 

 k run web --image=nginx:1.14 --port=80 --dry-run

이것은 테스트므로 실행된 상태는 아니라는 점을 명심해라.

 

실행 전 시뮬레이션한 컨테이너의 야믈 코드 조회 (-o yaml)

 k run web --image=nginx:1.14 --port=80 --dry-run -o yaml

 

이를 yaml 파일로 안전하게 따로 저장해서 백업하거나 수정할 수도 있다.

k run web --image=nginx:1.14 --port=80 --dry-run -o yaml > webserver.yaml

cat webserver.yaml

 

 

 

 

 

yaml 코드 파일로 컨테이너 실행

 

서버에 올린 컨테이너를 수정하고 적용하려면 이런식으로 yaml 파일을 수정해서 테스트한 뒤

그 yaml 파일(또는 json)을 올리는 과정이 필요하다.

yaml파일 작성에는 주의사항이 있는데, 들여쓰기 칸수가 정해져있고 이게 중요하게 작용한다는 점이다.

이렇게 두칸씩 스페이스를 누른 상태의 들여쓰기 방식으로 계층구조를 나타낼 수 있다.

들여쓰기를 해서 안으로 들어간 부분은 하위 아이템이 되는 것인데

여기서 앞 창문의 색상은 vehicle -> car -> window -> front -> color 를 타고 들어갔음을 알 수 있다.

 

https://blog.naver.com/rodpold/222756434024

 

YAML, YML 이란?

YAML은 공식 홈페이지의 말을 따르면 YAML Ain't Markup Language™ 의 줄임말이다. 이것...

blog.naver.com

 

 

우선 원본인 web 컨테이너를 삭제해버린다.

k delete pods web

 

이름 수정

삭제한 web이 남기고 간 yaml 코드의 이름 등을 다소 수정하여 실행

vi webserver.yaml

원본

수정 후

 

해당 yaml 파일로 컨테이너를 실행하려면 -f 파일 옵션을 붙여서 만들면 된다.

 k create -f webserver.yaml

 

이름이 수정한 대로 web2로 바뀌어서 잘 실행되고 있는 것을 확인 가능하다.

 

 

node name 수정

원래 노드 네임은 스케쥴러가 확인하여 자동으로 배정하는데 수동으로 yaml에서 지정해줄 수 있다

(원래 수동으로 설정하면 실수할 수도있으니 자동이 더 좋긴하다)

 

 

컨테이너포트의 프로토콜 지정 (디폴트값 TCP)

 

 

 

 

 

 

 

 

초기화

k delete pods webserver

k delete deployments web-apaches

 

 

 

'Kubernetes' 카테고리의 다른 글

kubectl config 명령어 (클러스터 context 변경)  (0) 2022.12.27
Namespace  (0) 2022.12.26
Kubernetes Resource 관리  (0) 2022.12.22
Kubernetes image pull error  (0) 2022.12.20
Kubernetes 개념 /설치 /조인  (0) 2022.12.19