개발자를 향해...
cka 강의 정리 본문
728x90
반응형
Deployment
제품 환경에서 프로그램을 배포하는 방법
- 롤링 업데이트(Rolling Update)
- 새 버전을 배포하면서, 새 버전 인스턴스를 하나씩 늘려가고 기존 버전의 인스턴스를 하나식 줄여나가는 방식
- 롤백
- 업그레이드 시 오류 발생 시 변경사항을 이전으로 돌리는것
Deployment는 원활한 업그레이드를 위해 롤링 업데이트, 롤백, 중지, 재개 등의 기능을 제공
명령어
- Deployment 생성하기
- 생성한 Deployment 확인
- 자동으로 생성된 ReplicaSet 확인하기
- 파드 확인하기
Services
- 내부 components 들과 어플리케이션 외부 간의 통신을 도움
- 어플리케이션 간의 통신, 어플리케이션과 유저 간의 통신을 도움
3 services type
- NodePort
- 노드에서 port로 들어오는 요청을 듣다가 요청이 오면 pod port로 전달
- label에 pod 가 여러개면 리퀘스트를 전달하는 파드를 endpoint로 지정하여 파드 간 로드 밸런싱의 역할을 한다
- ClusterIP
- 서로 다른 서비스 간의 소통을 가능하게 만들기 위해 Virtual IP 생성
- pod의 IP는 바뀔 수 있어서 application 간 통신에 적절 x
- 각 서비스는 ip name을 할당받고 이 name은 다른 pod가 service에 접근하기 위해 사용 => cluster IP
- LoadBalancer
- 여러 node의 각 pod에 접근하기 위해 하나의 url로 하나의 app에 접근하기위해 LB 필요
- url로 들어오는 사용자의 요청을 ip 주소로 바꾸어 접근할 수 있도록함
Namespaces
파드와 서비스 , 네트워킹 솔루션등이 하나의 Namespaces로 묶임
종류
- default Namespaces- 클러스터가 처음 설정될 때 k8s에 의해 자동으로 생성됨
- kube-system - k8s는 파드와 서비스들을 실수로 삭제나 수정하는 것을 방지하기 위한 공간
- kube-public- 모든 사용자가 접속할 수 있는 공간
특징
- 각 네임스페이스는 고유의 정책과 고유 저장소을 가질 수 있음
- 다른 네임스페이스의 요소에 접근하려면 아래와 같이 호출해야함
명령어
- 특정 Namespace에 pod 생성
kubectl create –f pod-definition.yml --namespace=myNamespaceName
- 새로운 Namespace 생성
kubectl create –f namespace-dev.yml
# or
kubectl create namespace dev
Imperative vs Declarative
k8s의 오브젝트를 관리하는 방법 2가지
Imperative(명령형)
- 무언가를 작업하기 위하여 “어떻게” 진행할 것인지를 나열하는 것(kubenetes에게 지시하는것) = Step by Step 지시
- 지금까지 무언가를 생성하기 위해 definition file을 kubectl create –f커맨드로 지정하고, 수정을 위해 kubectl replace 커맨드를 사용하고, 삭제를 위해 kubectl delete를 사용하는 이런 과정들인 모두 Imperative 방식
- 접근 방법 2가지
- run, create, expose,edit,scale 와 같은 imperative 명령어를 사용하기 → yaml이 필요 x,속도가 빠름/ 복잡한 설정을 넣어야할때 커맨드가 복잡해짐
- configuration file(=definition file) 사용하기
Declarative(선언형)
- “무엇”을 진행할것인지
- Declarative방식을 적용하려면 오브젝트를 만들고 수정하고 업데이트하기 위해 kubectl apply 커맨드를 사용
반응형