파드 생성
kubectl run nginx-pod(파드이름) --image=nginx(생성할이미지이름)
- 간단하게 생성가능
- 단일 파드 1개만 생성되고 관리된다.(과자 1개)
kubectl create deployment 파드이름 이미지이름
- Deployment라는 관리 그룹내에서 파드가 생성된다. (상자속 과자1개)
오브젝트
- 파드와 디플로이먼트는 스펙과 상태등의 값을 가지고 있다.
- 오브젝트 : 파드와 디플로이먼트를 개별 속성을 포함해 부르는 단위
기본 오브젝트
- 파드
- 쿠버네티스에서 실행되는 웹 서비스 구동하는데 필요한 최소단위
- 독립적인 공간과 사용가능한 IP를 가지고있다.
- 하나의 파드는 1개 이상의 컨테이너를 갖고 있기 때문에 여러기능을 묶어 하나의 목적으로 사용할 수 있다.
- 네임 스페이스
- 쿠버네티스 클러스터에서 사용되는 리소스들을 구분해 관리하는 그룹
- 기본 - default
- kube-system : 쿠버네티스 시스템에 사용됨
- metallb-system : 온프레미스에서 쿠버네티스를 사용할 경우 쿠버네티스 클러스터 내부로 접속하게 도와주는 컨테이너들이 속해있다.
- 볼륨
- 파드가 생성될 때 파드에서 사용할 수 있는 디렉터리를 제공
- 파드는 영속되는 개념이 아니라 제공되는 디렉터리도 임시로 사용된다.
- 하지만, 파드가 사라지더라도 저장과 보존이 가능한 디렉터리를 볼륨 오브젝트를 통해 생성하고 사용할 수있다.
- 서비스
- 파드는 클러스터 내에서 유동적이기 때문에 접속 정보가 고정일 수 없다.
- 파드 접속을 안정적으로 유지하도록 서비스를 통해 내/외부로 연결된다.
- 서비스는 새로 파드가 생성될 때 부여되는 새로운 IP를 기존에 제공하던 기능과 연결해 준다.
- 서비스는 쿠버네티스 외부에서 쿠버네티스 내부로 접속할 때 내부가 어떤 구조로 돼 있는지, 파드가 살았는지 죽었는지 신경 쓰지 않아도 이를 논리적으로 연결한다.
- 로드밸런서, 게이트웨이와 비슷한 역할
디플로이먼트
- 기본 오브젝트의 한계를 보완하고 좀 더 효율적으로 작동하도록 기능들을 조합하고 추가해 구현한 것
- 파드에 기반을 두며, 레플리카셋 오브젝트를 합쳐 놓은 형태
- API 서버와 컨트롤러 매니저는 파드 생성 감시 뿐만아니라 디플로이먼트 처럼 레플리카셋을 포함하는 오브젝트의 생성도 감시한다.
kubectl delete deployemnt dpy-hname
레플리카셋으로 파드 수 관리
- 레플리카 셋은 파드수를 보장하는 기능을 제공한다.
- 파드의 개수를 지정한대로 맞춰주는 역할
- ex) 파드수를 3개로 증가
kubectl scale deployment dpy-nginx --replicas=3
스펙을 지정해 오브젝트 생성
- 오브젝트 스펙
- 일반적으로 yaml 문법으로 생성
- 파일구조
- apiVersion: apps/v1 : API 버전
- kind: Deployment : 오브젝트 종류
- metadata
- spec
- 레플리카셋을 몇 개 생성할지
- 셀렉터의 레이블 지정
- 템플릿의 레이블 지정
- 템플릿에서 사용할 컨테이너 이미지 지정
apply로 오브젝트 생성하고 관리
kubectl apply -f ~/파일경로
- 파일 변경 사항 적용
- 변경 가능성이 있는 복잡한 오브젝트는 파일로 작성한후 apply로 적용하는 것이 좋다.
파드의 컨테이너 자동 복구
- 쿠버네티스는 거의 모든 부분이 자동 복구되도록 설계되어있다.
- 셀프 힐링 : 파드의 자동 복구 기술
- 제대로 작동하지 않는 컨테이너를 다시 시작하거나 교체해 파드가 정상적으로 작동하게 한다.
- 파드에 접속하려면 파드 IP를 알아야 한다.
kubectl exec -it nginx-pod -- /bin/bash
- nginx-pod의 컨테이너에서 배시 셸을 실행
kubectl exec에서 — 은 인자값을 나눌 때 사용한다.
파드 동작보증 기능
- 파드 자체에 문젝 발생하면 파드르 자동 복구해서 파드가 항상 동작하도록 보장한다.
- 디플로이먼트에 속하지 않은 일반파드는 삭제요청시 정상적으로 삭제된다.
- 디플로이먼트에 속한 파드의 경우, 임의로 파드를 삭제하면 replicas가 삭제된 파드를 확인하고 파드의 총 개수를 다시 맞추기위해 새로운 파드를 1개 생성한다.
- 디플로이먼트에 속한 파드는 상위 디플로이먼트를 삭제해야 파드가 삭제된다.
노드 자원 보호
- 노드는 쿠버네티스 스케줄러에서 파드를 할당받고 처리하는 역할
- 쿠버네티스는 파드를 각 노드로 공평하게 배분하는 특징이 있다.
kubectl cordon 노드이름
- 해당 노드에 파드가 할당되지 않게 스케줄되지 않는 상태로 변경한다.
kubectl uncordon 노드이름
노드 유지보수
- 유지보수를 위해 노드를 꺼야할 경우
drain
기능을 통해 지정된 노드의 파드를 전부 다른 곳으로 이동 시켜 해당 노드를 유지보수할 수 있게 한다.
- kubectl drain 명령을 통해 유지보수할 노드를 파드가 없는 상태로 만든다.
- 실제로 파드를 옮기는 것이아니라 노드에서 파드를 삭제하고 다른 곳에섣 다시 새엉한다.
- DaemonSet은 각 노드에 1개만 존재하는 파드라서 drain으로는 삭제 할 수없다.
kubectl drain w3-k8s --ignore-daemonsets
- 명령어를 통해 Daemonse을 무시하고 진행
- 해당 노드는 SchedulingDisabled상태가 되고 uncordon 명령을 실행해 복귀시킬 수 있다.
파드 업데이트
--record
배포한 정보의 히스토리를 기록하는 옵션
rollout status
명령으로 변경상태 히스토리에 남김
rollout history
명령을 실행해 히스토리 확인가능
set image
명령으로 업데이트
- 업데이트시 파드를 하나씩 순차적으로 지우고 업데이트된 버전으로 다시 생성한다.
업데이트 실패시 파드 복구
rollout undo
명령얼 명령실행을 취소 할 수 있다.
특정 시점으로 파드 복구
--to-revision
옵션으로 특정시점으로 돌아갈 수 있다.
kubectl rollout undo deployment rollout-nginx --to-revision=1
- 새로 생성된 파드들의 IP를 확인
다양한 오브젝트
데몬셋
- 디플로이먼트의 replicas가 노드 수 만큼 정해져 있는 형태
- 노드하나당 파드 한개만 생성가능
- 노드를 관리하는 파드라면 데몬셋으로 만드는게 효율적이다.
컨피그맵
kubectl delete pods —all
모든 파드 삭제
PV & PVC
- 파드에서 생성한 내용을 기록하고 보관하거나 모든 파드가 동일한 설정 값을 유지하고 관리하기 위해 공유된 볼륨으로부터 공통된 설정을 가지고 올수 있도록 설계해야 할때도있다.
- PVC(persistentVolumeClaim)
- 지속적으로 사용가능한 볼륨 요청
- PVC를 사용하려면 PV로 볼륨을 선언해야한다.
- 준비된 볼륨에서 일정공간을 할당받는다.
- PV(PersistentVolume)
- 지속적으로 사용가능한 볼륨
- 볼륨을 사용할 수 있게 준비하는 단계
- PV와 PVC가 연결되면 상태가
Bound
로 변경 된다.
- PV와 PVC를 구성하는 주체가 관리자와 사용자로 나뉘다.
- 관리자와 사용자가 나뉘어 있지 않다면 PV와 PVC를 통하지 않고 바로 파드에 공유가 가능한 NFS 볼륨을 마운트 할 수 있다.
스테이트풀셋
- 스테이트 풀셋은 volumeClaimTemplates 기능을 사용해 PVC를 자동으로 생성할 수 있고, 각파드가 순서대로 생성되기 때문에 고정된 이름, 볼륨, 설정등을 가질 수 있다.
- 스테이트풀셋은 일반적으로 헤드리스 서비스로 노출한다.
- 상태를 가지고 있는 오브젝트를 모두 노출하지 않고 상태값을 외부에 알리고 싶은 것만 선택적으로 노출하게 할 수 있다.
- volumeClaimTemplate를 이용해 자동으로 각파드에 독립적인 스토리지를 할당해 구성할 수 있다.