[Kubernetes] 쿠버네티스 기본 사용법
OS환경은 Windows 10 기준으로 작성되었습니다.
3.2 쿠버네티스 기본 사용법 배우기
3.2.1 파드를 생성하는 방법
kubectl run nginx-pod --image=nginx
kubectl create nginx --image=nginx
run과 create 차이
- run으로 파드를 생성하면
단일 파드 1개만 생성되고 관리
된다. - create deployment 로 생성하면
디플로이먼트 라는 관리 그룹 내에서 파드가 생성
된다.
3.2.2 오브젝트란
- 쿠버네티스를 사용하는 관점에서 파드와 디플로이먼트는
스펙
과상태
등의 값을 가지고 있다. - 이러한 값을 가지고 있는 파드와 디플로이먼트를 개별 속성을 포함해
오브젝트
라 한다.
기본 오브젝트
- 파드
- 쿠버네티스에서 실행되는 최소 단위
- 독립적인 공간과 사용 가능한 IP를 가지고 있음.
- 네임스페이스
- 쿠버네티스 클러스터에서 사용되는 리소스들을 구분해 관리하는 그룹.
- 기본으로 할당 되는 default
- 쿠버네티스 시스템에서 사용되는 kube-system
- 쿠버네티스 외부에서 내부로 접속하게 도와주는 metallb-system
- 볼륨
- 파드 생성시 파드에 사용할 디렉터리를 임시로 제공하나 설정을 통해 저장과 보존이 가능한 디렉터리를 사용할 수 도 있다
- 서비스
- 파드 접속을 안정적으로 유지하도록 서비스를 통해 내/외부로 연결.
- 기존 인프라에서 로드밸런서, 게이트웨이와 비슷한 역할
디플로이먼트
- 기본 오브젝트만으로 쿠버네티스를 사용하기에는 한계가 있어서 좀 더 효율적으로 작동하도록 기능들을 조합하고 추가해 구현한 것.
- 파드에 기반을 두며,레플리카셋 오브젝트를 합쳐놓은 형태.
3.2.3 레플리카셋으로 파드 수 관리하기
--replicas
옵션을 통해 파드의 개수를 지정할 수 있다.kubectl scale deployment dpy-nginx --replicas=3
kubectl get pods -o wide
명령어를 통해 모든 파드가 워커 노드에 적용되고 IP가 부여ㅑ 됬는지 확인 할 수있다.kubectl delete deployment dpy-nginx
kubectl delete deployment dpy-nginx
명령어를 통해 생성한 디플로이먼트를 삭제할 수 있 다.kubectl delete deployment dpy-nginx
3.2.4 스펙을 지정해 오브젝트 생성하기
- 오브젝트 스펙은 야믈(YAML) 문법으로 작성한다.
- 야믈 파일을 참조하여 생성 된 디플로이먼트는
sed
라는 명령어로 속성을 변경한다. 또는 참조하는 야믈 파일을 직접 수정해도 된다.
3.2.5 apply로 오브젝트 생성하고 관리하기
run
의 단점이 많아 쿠버네티스에서는apply
라는 명령어를 제공한다.-
명령창에 직접 애드혹(일회적 사용)으로 오브젝트를 생성할때는
create
를 사용하고, 변경이 생길 가능성이 있는 복잡한 오브젝트는 파일로 작성한 후apply
로 적용하는것이 좋다. - 오브젝트 생성 명령어 비교 |구분|Run|Create|Apply| |:—:|:—:|:—:|:—:| |명령 실행|제한적임|가능함|안 됨| |파일 실행|안 됨|가능함|가능함| |변경 가능|안 됨|안 됨|가능함| |실행 편의성|매우 좋음|매우 좋음|좋음| |기능 유지|제한적임|지원됨|다양하게 지원됨|
3.2.6 파드의 컨테이너 자동 복구 방법
-
파드의 자동 복구 기술을
셀프 힐링
이라고 한다. - nginx-pod 컨테이너에서 배시셸에 접속.
kubectl exec -it nginx-pod -- /bin/bash
- 컨테이너에서 구동하는 nginx의 PID 확인
cat /run/nginx.pid
- 터미널을 한개 더 띄우고 nginx-pod에서 돌아가는 웹페이지를 1초마다 한번씩 요청
i=1; while true; do sleep 1; echo $((i+++)) `curl --silent 아이피 | grep title` ; done
- 배시 셸에서 nginx 프로세서인 PID 1번을 kill 명령어로 종료
kill 1
3.2.7 파드의 동작 보증 기능
- 파드 자체에 문제가 발생하면 파드를 자동 복구해서 파드가 항상 동작하도록 보장.
replicas
는 파드를 선언한 수대로 유지하도록 항상 확인하고 부족하면 새로운 파드를 만든다.- 파드의 동작을 보장하기 위한 조건으로는 디플로이먼트로 생성해야 한다.
3.2.8 노드 자원 보호하기
노드
는 쿠버네티스 스케줄러에서 파드를 할당받고 처리하는 역할cordon
명령을 통해 문제가 생길 가능성이 있는 노드에 파드가 할당되지 않게 스케줄되지 않는 상태라는 표시를 한다.uncordon
명령어로 파드가 할당되지 않게 설정했던 것을 해제 할수 있다.
3.2.9 노드 유지보수하기
drain
은 지정된 노드의 파드를 전부 다른 곳으로 이동시켜 해당 노드를 유지보수 할 수 있게 한다.- 파드는 언제라도 삭제할 수 있기 때문에
drain
은 실제로 파드를 옮기는 것이 아니라 노드에서 파드를 삭제하고 다른 곳에 다시 생성한다.
3.2.10 파드 업데이트하고 복구하기
업데이트하기
--record
옵션은 배포한 정보의 히스토리를 기록한다.kubectl apply -f ~~~~.yaml --record deployment.apps/rollout-nginx created
--record
옵션으로 기록된 히스토리는rollout history
명령으로 확인이 가능하다.kubectl rollout history deployment rollout-nginx
set image
명령으로 파드의 nginx 컨테이너 버전을 1.16.0으로 업데이트kubectl set image deployment rollout-nginx nginx=nginx:1.16.0 --record deployment.apps/rollout-nginx image updated
업데이트 실패 시 파드 복구하기
rollout history
명령으로 실행된 명령어 히스토리를 확인한다.rollout undo
명령어로 명령 실행을 취소하여 이전 단계로 상태를 되돌린다.
특정 시점으로 파드 복구하기
--to-revision
옵션으로 특정 시점으로 돌아갈 수 있다.- 처음상태인 revision 1 로 돌아가고 싶다면 아래와 같이 입력하면 된다.
kubectl rollout undo deployment rollout-nginx --to-revision=1