Kubernetes

Kubernetes 오브젝트를 이용한 Apache 웹 서버 구성하기

JAEJUNG 2021. 9. 7. 16:22

목표

Kubernetes를 활용하여 아파치 웹 서버를 구축한다.

 

설치 환경

웹 서버 설치 환경은 Ubuntu 20.04.2 LTS이다.

 

구성 과정

1. 오브젝트 구성

2. Probe 구성

3. Replicaset 생성

4. Load Balancer 생성


1. 오브젝트 구성

 

httpd 이미지를 통해 오브젝트를 구성한다.

vagrant@kube-control1:~$ kubectl run httpd --image httpd
pod/httpd created

 

2. Probe 구성

 

컨테이너를 주기적으로 진단하기 위한 프로브를 구성한다.

프로브는 크게 startupProbe, livenessProbe, readinessProbe로 구분한다. 

 

startupProbe

startupProbe가 선언돼있으면, 진단이 통과되기 전까지 다른 probe를 활성화하지 않는다.

Container의 애플리케이션이 시작되었는지 확인한다.

 

livenessProbe

Container가 동작 중인지 확인하며, 진단에 실패하면 재시작 정책을 적용한다.

✔️애플리케이션에 따라 정상 동작까지의 시간이 다르기 때문에, period를 설정하지 않으면

무한 재부팅이 발생할 수 있다.

 

readinessProbe

Container가 요청을 처리할 준비가 되었는지 확인한다.

livenessProbe와 동일하게 체크 응답용 페이지를 만들어두고 정상적인 200 return code를

응답받지 못하면 readinessProbe는 failed 처리되고, 파드의 IP 주소를 제거한다.

 

++

Probe를 구성할 때 initailDelaySeconds(초기 지연 시간)을 너무 짧게 잡아버리면

아래와 같이 재시작 루프에 빠질 수 있으므로 적절한 시간으로 설정한다.

 

이번 실습에선 간편한 구성을 위해 livenessProbe와 startupProbe만 설정하고, 추가적인 옵션은 사용하지 않는다.

probe를 생성한 후에 describe 명령어를 통해 probe 정보를 확인한다.

vagrant@kube-control1:~/tmp$ tail -8 myapp-rs.yaml
        livenessProbe:
          httpGet:
            path: /
            port: 80
        startupProbe:
          httpGet:
            path: /
            port: 80

vagrant@kube-control1:~/tmp$ kubectl describe pod myapp-rs | grep Liveness
    Liveness:       http-get http://:80/ delay=0s timeout=1s period=10s #success=1 #failure=3

vagrant@kube-control1:~/tmp$ kubectl describe pod myapp-rs | grep -i startup
    Startup:        http-get http://:80/ delay=0s timeout=1s period=10s #success=1 #failure=3

 

3. Replicaset 생성

 

Replicaset은 Replication Controller와 같지만, RC와 다르게 "집합성 기준" 레이블 셀렉터를 지원한다.

  • matchLabels: 일치성 기준 레이블 셀릭터 지정 (일치성 : key-value가 모두 일치해야 한다.)
  • matchExpressions: 집합성 기준 레이블 셀렉터 지정 (집합성 : key-value가 일치하거나, key만 일치하는 것도 지원)
vagrant@kube-control1:~/tmp$ kubectl create -f myapp-rs.yaml 
replicaset.apps/myapp-rs created

vagrant@kube-control1:~/tmp$ kubectl get replicasets.apps
NAME       DESIRED   CURRENT   READY   AGE
myapp-rs   3         3         3       50s

✔️추후 RC는 사용되지 않을 것이므로, Replica Set 사용을 권장한다.

 

4. Load Balancer 생성

 

이 로드 밸런서를 통해 Service와 Pod에 접근이 가능하다.

 

yaml 파일을 통해 로드 밸런서 서비스를 생성해준다.

vagrant@kube-control1:~/tmp$ cat myapp-svc-lb.yaml 
apiVersion: v1
kind: Service
metadata:
  name: myapp-svc-lb
spec:
  type: LoadBalancer
  ports:
  - port: 80
    targetPort: 80
  selector:
    app: myapp-rs

 

service의 정보를 확인하여 로드 밸런서의 ip 주소를 얻고, 로드 밸런서의 IP로 접근한다.

curl 명령어를 통해 정상적으로 통신이 되는 것을 확인할 수 있다.

vagrant@kube-control1:~/tmp$ kubectl get svc | grep svc
myapp-svc-lb   LoadBalancer   10.97.186.47   192.168.100.200   80:31654/TCP   29m

vagrant@kube-control1:~/tmp$ curl 10.97.186.47
<html><body><h1>It works!</h1></body></html>

 

웹에서 LoadBalancer의 External IP로 접속 시 "It works"가 표시되는 것을 확인할 수 있다.