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. equality based selector로 pod 조회


: 등가로 표현 (= , !=)

  • kubectl get pod -selector app=healthcheck-test


:약식으로는 -l 옵션으로 조회

  • kubectl get pod -l  app=healthcheck-test


  1. set based selector로 pod 조회 

: 집합형태로 표현 

  • kubectl get pod -l  ‘app in (healthcheck-test, other)’



 

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 리소스를 관리한다.

https://www.pinterest.co.kr/pin/825003225467521861/

  • 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
service/ingress-nginx   LoadBalancer   10.106.139.137   localhost     80:32144/TCP,443:30813/TCP   14m

NAME                                            READY     STATUS    RESTARTS   AGE
pod/nginx-ingress-controller-75cb46c787-t48kr   1/1       Running   0          16m

 

3) simple-svc.yaml 생성 및 실행

apiVersion: v1
kind: Service
metadata:
name: healthcheck-svc
spec:
ports:
- name: http
port: 8080
targetPort: 8080
selector:
app: healthcheck-test

 

$ kubectl apply -f simple-svc.yaml

 

 

4) simple-ingress.yaml 생성 및 실행

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: healthcheck-ingress
spec:
rules:
- host: com.k8s.myapp
http:
paths:
- path: /
backend:
serviceName: healthcheck-svc
servicePort: 8080

 

 

 

$ 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

+ Recent posts