2. CRI-O 와 Kubernetes 를 활용한 httpd 배포
2. CRI-O 와 Kubernetes 를 활용한 httpd 배포
1) httpd 설치
(control 노드에서)
httpd 이미지를 배포합니다.
# kubectl create deployment httpd --image=httpd
deployment.apps/httpd created
배포 명령 이후 진행상태가 이벤트 로그에 기록되므로 아래와 같이 출력해 볼 수 있습니다.
# kubectl get events |grep httpd
70s Normal Scheduled pod/httpd-975f8444c-5xfch Successfully assigned default/httpd-975f8444c-5xfch to sysdocu-189114
70s Normal Pulling pod/httpd-975f8444c-5xfch Pulling image "httpd"
58s Normal Pulled pod/httpd-975f8444c-5xfch Successfully pulled image "httpd" in 11.734922345s (11.734929076s including waiting)
58s Normal Created pod/httpd-975f8444c-5xfch Created container httpd
58s Normal Started pod/httpd-975f8444c-5xfch Started container httpd
70s Normal SuccessfulCreate replicaset/httpd-975f8444c Created pod: httpd-975f8444c-5xfch
70s Normal ScalingReplicaSet deployment/httpd Scaled up replica set httpd-975f8444c to 1
httpd 배포 정보를 확인합니다.
# kubectl describe deployment httpd
2) yaml 파일 생성 및 배포
httpd 리소스 템플릿 파일을 생성합니다.
# kubectl get deployment httpd -o yaml > httpd.yaml
생성된 httpd.yaml 파일을 열어 포트를 추가합니다.
# vi httpd.yaml
... spec: containers: - image: httpd imagePullPolicy: Always name: httpd ports: - containerPort: 80 protocol: TCP resources: {} terminationMessagePath: /dev/termination-log terminationMessagePolicy: File ... |
수정된 yml 파일을 기본 httpd 템플릿으로 갱신 (over write) 합니다.
# kubectl replace -f httpd.yaml
deployment.apps/httpd replaced
갱신 시간으로 이미지 업데이트 내역을 확인 할 수 있습니다.
# kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
httpd 1/1 1 1 11m
# kubectl expose deployment/httpd
service/httpd exposed
클러스터 httpd 서비스 IP 를 출력합니다.
# kubectl get svc httpd
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
httpd ClusterIP 10.99.72.96 <none> 80/TCP 5m24s
출력된 클러스터 IP 로 httpd 접근 확인이 가능합니다.
# curl 10.99.72.96:80
<html><body><h1>It works!</h1></body></html>
엔드포인트 httpd 서비스 IP 출력합니다.
# kubectl get ep httpd
NAME ENDPOINTS AGE
httpd 10.101.0.195:80 5m51s
출력된 엔드포인트 IP 로 httpd 접근 확인이 가능합니다.
# curl 10.101.0.195:80
<html><body><h1>It works!</h1></body></html>
3) httpd 스케일 아웃 (Replica)
httpd 의 replica 를 3으로 조정하면 3개의 POD 가 생성된 것을 확인 할 수 있습니다.
# kubectl scale deployment httpd --replicas=3
deployment.apps/httpd scaled
복제되는 과정에서 시간이 약간 걸리며 watch 명령으로 모니터링을 해보면 아래와 같이 Ready 와 AVAILABLE 값이 3까지 늘어나는 것이 보입니다.
# watch kubectl get deployment httpd
NAME READY UP-TO-DATE AVAILABLE AGE
httpd 3/3 3 3 15h
엔드포인트도 POD 개수대로 늘어난 것을 확인할 수 있습니다.
# kubectl get ep httpd
NAME ENDPOINTS AGE
httpd 10.101.0.129:80,10.101.0.195:80,10.101.0.67:80 41m
이제는 POD 를 삭제해도 replica 개수 3 으로 유지 (자동 생성) 됩니다.
클러스터 IP 로 접근을 해보면 3개의 POD 로 분산되어 접근되는 것을 확인할 수 있습니다.
4) 클러스터 외부에서 접근 허용 설정
현재의 POD 정보 입니다.
# kubectl get pods
NAME READY STATUS RESTARTS AGE
httpd-56b65865c4-74zxp 1/1 Running 0 15h
httpd-56b65865c4-b8phd 1/1 Running 0 10m
httpd-56b65865c4-dkjdc 1/1 Running 0 10m
NAME 값을 이용하여 POD 의 환경 설정값을 확인합니다.
# kubectl exec httpd-56b65865c4-74zxp -- printenv |grep KUBERNETES
KUBERNETES_PORT=tcp://10.96.0.1:443
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
KUBERNETES_SERVICE_HOST=10.96.0.1
KUBERNETES_SERVICE_PORT=443
KUBERNETES_SERVICE_PORT_HTTPS=443
현재의 서비스 정보 입니다.
# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
httpd ClusterIP 10.99.72.96 <none> 80/TCP 51m
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 18h
외부에서 접근이 가능하도록 svc 값을 삭제하고 LoadBalancer 형태로 다시 생성해 줍니다.
# kubectl delete svc httpd
service "httpd" deleted
# kubectl expose deployment httpd --type=LoadBalancer
service/httpd exposed
다시 svc 정보를 출력해보면 httpd 가 LoadBalancer 형태로 생성되었으며, EXTERNAL-IP 는 없는 상태입니다.
# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
httpd LoadBalancer 10.96.23.114 <pending> 80:31452/TCP 2m29s
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 18h
웹브라우저를 통해 새로 생성된 포트로 접근을 해보면 httpd 초기 페이지가 출력되며, 3개의 POD 로 분산 접근이 됩니다.
http://<서버 공인 IP>:31452
[참조] https://blog.psnote.co.kr/184
'리눅스 > Containers & Kubernetes' 카테고리의 다른 글
4. Kubernetes 대시보드 설치 (0) | 2023.01.03 |
---|---|
3. Namespace 생성, LimitRange 를 이용한 자원 사용량 제한, POD 및 Deployment 생성, 자원 제한 확인 (0) | 2022.12.29 |
1. Ubuntu 22.04 에서 CRI-O, Kubernetes 1.26, Calico 설치하기 (0) | 2022.12.26 |
6. Docker PHPMyAdmin 설치 (0) | 2022.12.23 |
5. Docker 이미지 생성 (컨테이너 현재 상태 저장) (0) | 2022.12.22 |