본문 바로가기

DevOps/쿠버네티스

쿠버네티스 RC를 통한 POD생성 및 Probe를 통한 health check

 

yml파일을 사용해서 쿠버네티스에서 pod만들기

multiContainer.yml
apiVersion: v1
kind: Pod
metadata:
  name: multi
  labels:
    app: wordpress
spec:
  containers:
    - name: wordpress
      image: reg.cloud.com/wordpress
      ports:
        - containerPort: 80
        - containerPort: 443
      env:
        - name: WORDPRESS_DB_HOST
          value: 127.0.0.1
        - name: WORDPRESS_DB_USER
          value: wordpress
        - name: WORDPRESS_DB_PASSWORD
          value: password
    - name: db
      image: reg.cloud.com/mysql
      env:
        - name: MYSQL_ROOT_PASSWORD
          value: password
        - name: MYSQL_DATABASE
          value: wordpress
        - name: MYSQL_USER
          value: wordpress
        - name: MYSQL_PASSWORD
          value: password
$ k create -f multiContainer.yml

 

## 해당 컨테이너 yml을 사용하여 pod을 생성(container포함)

 

상기 pod은 2개의 container을 포함한다 그러나 failover관련(replica가 없음) 설정이 없기 때문에 바로 죽게 된다. 즉, 상용에 사용 못하는 yml이다.(안정성을 위해 failover이 반드시 필요)

 

쿠버네티스의 scale out scale in은 replica의 숫자에 따라 다름. 쉽게 설정 가능하다.


 

RC를 통해 POD 만들어달라고 요청

 

$ k run --image=reg.cloud.com/nginx nginx-app --port=80 --generator=run/v1
$ k get rc

 

## remote서버로부터 nginx를가져와서 pod를 rc를 통해 만들기

 

 

 

## rc는 사용자가 추가한것

## pod은 쿠버네티스가 rc로 부터 명령을 받아서 만든것.


 

Daemon Sets(DS) 설정하기

apiVersion: apps/v1beta2 ##daemon set 설정
kind: daemonSet
metadata:
  name: ssd-monitor
spec:
  selector:
    matchLabels:
      app: ssd-monitor
  template:
    metadata:
      labels:
        app: ssd-monitor
    spec:
      nodeSelector:
        disk: ssd ##pod를 생성시에 node에 ssd라는 값이 있는 것에만 배포한다고 선언
      containers:
      - image: reg.cloud.com/kubia
        name: kubia
        ports:
        - containerPort: 8080
$ k label no <host> disk=ssd

 

## 라벨을 설정한 node에 생성되는 것을 볼 수 있다.

 

 

$ k label no <host> disk=hdd --overwrite

 

## node와 label매핑이 맞지 않은 것은 자동으로 terminate됨.

 


 

Probe를 사용하여 health check하기

apiVersion: v1
kind: Pod
metadata:
  name: test-probe
spec:
  containers:
  - image: reg.cloud.com/kubia-unhealthy
    name : kubia
    livenessProbe: ##매 1초마다 httpGet으로 health check
      httpGet: ##보통 httpGet으로 health check한다. tcp, exec command도 가능
        path: /
        port: 8080
    ports:
    - containerPort: 8080

※ 헬스체크용도의 path에는 컨텐츠가 없어야하고, 인증, SSL 기타 기능이 없는 get요청이여야 함

 

$ k describe po test-probe

 

## 특정 pod에 나타난 event history 확인

## 아래 이미지 event history를 보면 liveness 체크 후 500 fail이 났다는 것을 확인 할 수 있다.