본문 바로가기

DevOps/쿠버네티스

쿠버네티스 배포를 하기 위한 준비 readinessProbe, livenessProbe


쿠버네티스의 배포

## 쿠버네티스의 배포는 아래와 같이 진행됨

## pod 삭제(kill) -> restart(redeploy) -> ok

Readiness probes

## probe check, 응답이 없으면 end point로 보내지 않는다.

(해당 pod정보를 유효하지 않는다고 판단한다.)



## liveness probe : 응답없으면 kill, 정상적인 image인지 판단

## readiness probe : 대기, 기다리다가 사용자 connection가능하면 연결시켜줌


## 보통 2개를 동시에 사용한다. 서로 보완하는 관계

## tcp socket, http health 등 사용가능


nginx-ingress-controller.yml


apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: nginx-ingress-controller
  namespace: ingress-nginx 
spec:
  replicas: 1
  selector:
    matchLabels:
      app: ingress-nginx
  template:
    metadata:
      labels:
        app: ingress-nginx
      annotations:
        prometheus.io/port: '10254'
        prometheus.io/scrape: 'true'
    spec:
      serviceAccountName: nginx-ingress-serviceaccount
      containers:
        - name: nginx-ingress-controller
          image: quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.11.0
          args:
            - /nginx-ingress-controller
            - --default-backend-service=$(POD_NAMESPACE)/default-http-backend
            - --configmap=$(POD_NAMESPACE)/nginx-configuration
            - --tcp-services-configmap=$(POD_NAMESPACE)/tcp-services
            - --udp-services-configmap=$(POD_NAMESPACE)/udp-services
            - --annotations-prefix=nginx.ingress.kubernetes.io
          env:
            - name: POD_NAME
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
            - name: POD_NAMESPACE
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace
          ports:
          - name: http
            containerPort: 80
          - name: https
            containerPort: 443
          livenessProbe: ## nginx ingress default는 livenessProbe와 readinessProbe를 똑같은걸 사용한다는 것을 알 수 있다.
            failureThreshold: 3
            httpGet:
              path: /healthz
              port: 10254
              scheme: HTTP
            initialDelaySeconds: 10
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 1
          readinessProbe:
            failureThreshold: 3
            httpGet:
              path: /healthz
              port: 10254
              scheme: HTTP
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 1


## cli 명령어를 통해서 readinessProbe 체크하기

test-rc.yaml

apiVersion: v1
kind: ReplicationController
metadata:
  name: kubia-readiness
spec:
  replicas: 3
  selector:
    app: kubia
  template:
    metadata:
      labels:
        app: kubia
    spec:
      containers:
      - name: kubia
        image: reg.cloud.com/kubia
        readinessProbe:
          exec:
            command:
            - ls
            - /var/ready
        ports:
        - containerPort: 8080

$ k get svc

$ k create -f test-rc.yaml

$ k get rc

$ k get po -o wide

## STATUS가 running일때 READY가 0/X 이면 아직 컨테이너의 readiness probe가 통과 못했다 라는 것을 알 수 있다.




readinessProbe를 체크하여 start 정상적으로 되는지 확인하기

$ k exec kubia-readiness-5dk2s -- touch /var/ready
$ k get po -o wide
$ k get po -o wide
$ k get ep


## exec touch를 통해 readinessProbe가 준비가 되었음을 확인함

## endpoint(ep)에 추가됨을 알 수 있다.