# ECR에 업로드 되어있는 Apache WebServer를 Pull 하여 eks에서 실행하는 과정이다.
1. ECR에 업로드 되어있는 이미지 확인
- apache-test-01 이라는 ECR 레포지토리 안 이미지 태그 이름으로 latest로 생성이 되어있다.
- 용량은 86.24MB 이다.
2. ECR에 저장되어 있는 이미지를 다운 받아보자.
- 기본 명령어
docker pull [AWS 계정번호].dkr.ecr.ap-northeast-2.amazonaws.com/[레포지토리이름:태그이름]
- 실제 이미지를 다운로드하기 위한 실행 명령어 예시
docker pull 1234567891011.dkr.ecr.ap-northeast-2.amazonaws.com/logstash:latest
- 만약 no basic auth credentials 오류가 발생한다면 아래 작업을 사전에 수행 해야한다.
- aws configure를 통해 보안자격증명을 등록해 준다.
- 이미지를 태그 후 push 하기위해 Docker image를 생성한 서버에서 ECR로 로그인 합니다.
- 로그인은 아래의 명령어를 활용하여 진행한다.
sudo aws ecr get-login --no-include-email --region ap-northeast-2
- ECR login 수행
sudo $(aws ecr get-login --no-include-email --region ap-northeast-2)
- login에 성공하면 아래와 같이 화면이 나온다.
- 이제 위의 이미지를 다운로드 하기 위한 명령어를 실행한다.
- 정상적으로 다운된것을 확인 할 수 있다.
sudo docker pull 1234567891011.dkr.ecr.ap-northeast-2.amazonaws.com/apache-test-01:latest
latest: Pulling from apache-test-01
68e7bb398b9f: Pull complete
3ab09b03ebe1: Pull complete
4953a393a1e6: Pull complete
Digest: sha256:4fc2448de425ce57c865deaa68460ba243798e7a45f4d471f0435a875754e478
Status: Downloaded newer image for 1234567891011.dkr.ecr.ap-northeast-2.amazonaws.com/apache-test-01:latest
1234567891011.dkr.ecr.ap-northeast-2.amazonaws.com/apache-test-01:latest
- docker 명령어로 이미지를 조회하면 다운받은 이미지를 확인 할 수 있다.
sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
1234567891011.dkr.ecr.ap-northeast-2.amazonaws.com/apache-test-01 latest ed247a450c50 24 hours ago 199MB
3. ECR에서 다운받은 이미지를 eks에서 실행하기
- 일단 정상적으로 이미지가 실행이 되는지 Docker 환경에서 실행하여 서비스를 올려보자.
- bastion host 서버에서 ip:80으로 붙으면 아래와 같이 아파치 웹서버가 올라온것을 확인 할 수 있다.
* 로컬 이미지 실행 방법
kubectl run apache --image=1234567891011.dkr.ecr.ap-northeast-2.amazonaws.com/apache-test-01:latest
- 다운받은 ECR 이미지를 eks 클러스터에 올려보자.
- 타입은 LoadBalancer 로 설정할 것이고, 타입을 LoadBalancer로 설정하면 AWS에서 자동으로 LB를 만들어준다.
- 총 3개의 yaml 파일을 생성하고 실행한다. (1. namespace.yaml 2. deployment.yaml 3. service.yaml)
- 첫번째로 namespace.yaml 파일을 생성한다. namespace는 우리가 사용하는 윈도우의 폴더라고 생각하면 쉽다. namespace를 삭제하면 해당 리소스 자원은 모두 삭제가 된다.
apiVersion: v1
kind: Namespace
metadata:
name: demo
- 두번째로 deployment.yaml 파일을 생성한다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: apache-test-03
labels:
app: apache-test-03
namespace: demo
spec:
replicas: 2
selector:
matchLabels:
app: apache-test-03
template:
metadata:
labels:
app: apache-test-03
spec:
containers:
- image: 123456789010.dkr.ecr.ap-northeast-2.amazonaws.com/apache-test-01:latest
imagePullPolicy: Always
name: apache-test-03
ports:
- containerPort: 80
protocol: TCP
- 세번째로 service.yaml 파일을 생성한다.
apiVersion: v1
kind: Service
metadata:
name: apache-test-03
namespace: demo
spec:
selector:
app: apache-test-03
type: LoadBalancer
ports:
- protocol: TCP
port: 80
targetPort: 80
- 생성 명령어
kubectl apply -f namespace.yaml
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
- 생성한 서비스의 접속을 위해 접속 정보를 조회한다.
- EXTERNAL-IP가 ALB의 DNS 주소라고 보면 되고, AWS 콘솔 화면으로 이동하여 LB를 보면 자동으로 생성된것을 볼 수 있다.
ubuntu@ip-192-168-0-178:~/yaml/yaml_new$ kubectl get svc -n demo
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
apache-test-03 LoadBalancer 10.100.143.223 a91d24f368b034215988c4dee423a957-775771401.ap-northeast-2.elb.amazonaws.com 80:30691/TCP 11m
- AWS LB에서 정보 확인 :: 태그 탭에서 eks에서 실행한 정보를 확인 할 수 있다.
- 실제 LB의 DNS 주소로 접근하여 웹 페이지가 정상적으로 뜨는지 확인한다.
- 설명 탭으로 이동하면 해당 LB의 DNS 주소를 확인할 수 있고, 이 DNS 주소가 사용자가 접근하는 URL 주소가 된다.
- 해당 DNS 주소로 접근한 모습, 정상적으로 Apache 웹페이지가 화면에 나타나는것을 볼 수 있다.
- 이제 앞 에서 생성한 yaml 파일을 삭제해보자, 3개의 yaml 파일을 삭제한다.
- yaml 파일을 삭제하면 해당 리소스도 함께 삭제 된다.
namespace.yaml
deployment.yaml
service.yaml
# yaml 파일 삭제
kubeclt delete -f namespace.yaml
kubectl delete -f deployment.yaml
kubectl delete -f service.yaml
- 끝 -
'k8s 실전 프로젝트 > 2. Application 빌드와 배포' 카테고리의 다른 글
Deployment, Service, Ingress 흐름 설명 (0) | 2022.03.10 |
---|---|
eks클러스터 생성 및 ALB 사용하기 (0) | 2022.03.08 |
2. EKS에 Wordpress 설치 (0) | 2022.03.03 |
1. k8s Application 설치(k8s-dashboard, prometeus+grafana) (0) | 2022.03.03 |