namespace
쿠버네티스는 클러스터 안에 가상 클러스터를 또 만들 수 있다.
- kubectl get namespace
pod
1) yaml 파일 정의해서 생성하기
simple-pod.yaml
apiVersion: v1 kind: Pod metadata: name: health-check-app spec: containers: - name: health-app image: chulm/health-check-app:latest ports: - containerPort: 8080 |
key |
설명 |
kind |
쿠버네티스 리소스의 유형을 지정 |
metadata |
쿠버네티스 리소스의 메타데이터 지정 |
spec |
리소스를 정의하는 속성 |
$ kubectl apply -f simple-pod.yaml
2) pod 정보 조회
$ kubectl get pod
$ kubectl get pods --all-namespaces -o wide
3) pod 내부 컨테이너 실행
$ kubectl exec -it health-check-app sh -c health-app
4) 로그 보기
$ kubectl logs health-check-app
5) pod 삭제
$ kubectl delete pod health-check-app
6) 리소스 전체 삭제
$ kubectl delete -f simple-my-pod.yaml
7) 로컬 포트 포워딩
$ kubectl port-forward health-check-app 8080:8080
replicaset
: 똑같은 정의를 갖는 파드를 여러 개 생성하고 관리하기 위한 리소스
simple-replicaset.yaml
apiVersion: apps/v1 kind: ReplicaSet metadata: name: health-check-app labels: app: healthcheck-test environment: dev spec: replicas: 3 selector: matchLabels: app: healthcheck-test template: metadata: labels: app: healthcheck-test spec: containers: - name: health-check-app image: chulm/health-check-app:latest ports: - containerPort: 8080 |
key |
설명 |
label |
쿠버네티스의 리소스를 선택하는데 사용한다. |
template |
template 속성의 내용은 pod 메타데이터의 정의와 같다. |
selector |
라벨 조건을 정의, equality based selector와 set based selector가 존재
: 집합형태로 표현
|
1) replicaset 생성
$ kubectl apply -f [file]
2) label 조회
$ kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS health-check-app-hng7g 1/1 Running 0 1m app=healthcheck-test health-check-app-klg9q 1/1 Running 0 1m app=healthcheck-test health-check-app-v6rhz 1/1 Running 0 1m app=healthcheck-test |
3) replicatset 삭제
$ kubectl delete rs health-check-app --cascade=false
: cascade default는 true, pod이 삭제됨
4) pod 삭제할 경우
: replicaset에 의해 복제된 개수가 유지되기 때문에 자동으로 Pod을 추가 생성
deployment
: 애플리케이션 배포의 기본 단위가 되는 리소스, rs의 상위 리소스
simple-deployment.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: health-check-app labels: app: healthcheck-test environment: dev spec: replicas: 3 selector: matchLabels: app: healthcheck-test template: ### template 아래는 pod 리소스 정의와 같음. metadata: labels: app: healthcheck-test spec: containers: - name: health-check-app image: chulm/health-check-app:latest ports: - containerPort: 8080 |
-
deployment 리소스는 replicaSet 리소스를 관리한다.
-
replicaSet의 리소스를 수정한다고 해서 revision이 변경되지는 않는다.
: 예로 replicas의 개수를 수정한다고 배포의 revision은 바뀌지 않으며, replicaSet만 변경된다.
-
컨테이너를 변경하고 재 배포하면, 기존 컨테이너는 중지되고 revision 이 2가 된다.
$ kubectl rollout history deployment health-check-app
deployments "health-check-app" REVISION CHANGE-CAUSE 1 kubectl apply --filename=simple-my-deployment.yaml --record=true 2 <none> (--record 옵션을 주지 않으면 명령어가 기록되지 않음) |
1) yaml 파일 정의해서 생성하기
$ kubectl apply -f simple-deployment.yaml --record
(명령 실행 기록을 남기는 --record 옵션)
2) deployment revision 확인
$ kubectl rollout history deployment health-check-app
$ kubectl rollout history deployment health-check-app --revision=1
3) rollback 하기
$ kubectl rollout undo deployment health-check-app
$ kubectl rollout undo deployment health-check-app --revision=1
4) deployment 진행 상태 확인
$ kubectl rollout status deployment health-check-app
5) deployment 상세 확인
$ kubectl describe deployment health-check-app
service
: po의 집합(주로 rs)에 대한 서비스 디스커버리를 제공하는 리소스
: service의 대상이 되는 pod는 label selector로 정해진다.
-
service type 4가지가 존재함.
cluster IP : cluster IP 생성
Node Port : cluster IP 생성 및 global port 개방
load Balancer : 로컬 환경에서는 사용 할 수 없음. 주로 클라우드 플랫폼에서 사용
external name : 셀렉터 및 포트 정의 하지 않음. externalName만으로 접근
simple-service.yaml
apiVersion: v1 kind: Service metadata: name: healthcheck-nodeport spec: type: NodePort ports: - port: 8080 targetPort: 8080 selector: app: healthcheck-test ##label과 연결 |
1) service 조회
$ kubectl get svc
ingress
service로 nodePort를 노출시킬 때, l4(tcp) 레벨까지만 다룰 수 있기 때문에 http/https 경로를 기반으로 서비스를 전환하는 l7 레벨의 제어는 불가능하다. 이를 해결하기 위한 리소스가 ingress이다.
로컬 환경에서는 인그레스를 사용해 서비스를 노출 시킬 수 없기 때문에 nginx_ingress_controller를 다음과 같이 배포해야 한다.
1) ingress-nginx의 배포
-namespace
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/mandatory.yaml
- service, pod
$kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/cloud-generic.yaml
2) ingress-nginx의 service와 pod 조회
$ kubectl -n ingress-nginx get svc, pod
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE |
3) simple-svc.yaml 생성 및 실행
apiVersion: v1 |
$ kubectl apply -f simple-svc.yaml
4) simple-ingress.yaml 생성 및 실행
apiVersion: extensions/v1beta1
|
$ kubectl apply -f simple-ingress.yaml
5) 테스트
$ curl http://localhost/healthCheck -H 'Host: com.k8s.myapp'
> 결과
'Cloud & NoSQL & Middleware > Kubernetes' 카테고리의 다른 글
kubernetes - secret (0) | 2019.10.11 |
---|---|
쿠버네티스 배경 및 입문 (0) | 2019.09.03 |