1. 구성환경
- GCP VM에 minikube로 kubernetes 실행환경 구성
- Pod에 활용할 이미지에서 연동하는 Redis는 AWS에 구성
2. Redis 구동
cd /engn001/redis #경로 이동
nohup ./src/redis-server ./redis.conf & #background 실행
ps aux | grep redis #기동 확인
3. minikube 구동
minikube start
kubectl get nodes
4. Deployment 생성
-
kubectl run 명령어가 아닌 yaml 파일에 설정 정보를 명시하여 생성
-
파일명: my-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deploy-name #디플로이먼트 이름
labels:
app: my-deploy
spec:
replicas: 3 #3개의 레플리카 파드 생성
selector: #디플로이먼트가 관리할 파드를 찾는 방법
matchLabels:
app: my-deploy
template:
metadata:
labels:
app: my-deploy
spec:
containers:
- name: mycontainer
image: sftth/whms:1.1
ports:
- containerPort: 8080
kubectl create -f my-deploy.yaml
(생성되어 있으면 kubectl delete deployment my-deploy-name)
5. 서비스 생성
- 디플로이먼트를 통해 생성된 포드의 외부 노출을 위해 서비스 생성이 필요
- 생성 파일: my-service.yaml
apiVersion: v1
kind: Service
metadata:
name: my-service-name #서비스 이름 지정
spec:
ports:
- name: my-deploy-svc
port: 8080 #외부 노출 포트
targetPort: 8080 #컨테이너 내부 포트
type: LoadBalancer #Externel IP 활용 유형
selector:
app: my-deploy #외부 노출 pods의 label 선택
kubectl create -f my-service.yaml
(생성되어 있으면 kubectl delete svc my-service-name)
6. 확인
- 노드 확인
[***@gcp-minikube-vm minikube]$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
minikube Ready master 6d14h v1.17.3
- 디플로이 확인
[***@gcp-minikube-vm minikube]$ kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
my-deploy-name 3/3 3 3 14h
- Pods 확인
[***@gcp-minikube-vm minikube]$ kubectl get pods
NAME READY STATUS RESTARTS AGE
my-deploy-name-75876fb9db-pfpz5 1/1 Running 0 14h
my-deploy-name-75876fb9db-sm2pd 1/1 Running 0 14h
my-deploy-name-75876fb9db-vxxdt 1/1 Running 0 14h
- 서비스 확인
[Summit@gcp-minikube-vm minikube]$ kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 6d14h
my-service-name LoadBalancer 10.106.205.160 <pending> 8080:32025/TCP 3h36m
7. 외부 접속
- minikube의 경우 service 타입을 LoadBalancer 설정을 해도 External-IP가 pending으로 생성되지 않음
[***@gcp-minikube-vm minikube]$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 6d10h
my-service-name LoadBalancer 10.106.205.160 <pending> 8080:32025/TCP 51s
- minikube는 LoadBalancer 타입을 지원하지 않고 NodePort만 지원이 되므로 이 경우는 아래와 같이 로컬 내부에서 접속 테스트하는 것으로 검증 가능
[***@gcp-minikube-vm minikube]$ minikube service my-service-name
|-----------|-----------------|---------------|-----------------------------|
| NAMESPACE | NAME | TARGET PORT | URL |
|-----------|-----------------|---------------|-----------------------------|
| default | my-service-name | my-deploy-svc | http://192.168.99.100:32025 |
|-----------|-----------------|---------------|-----------------------------|
🎉 Opening service default/my-service-name in default browser...
xdg-open: no method available for opening 'http://192.168.99.100:32025'
💣 open url failed: http://192.168.99.100:32025: exit status 3
😿 minikube is exiting due to an error. If the above message is not useful, open an issue:
👉 https://github.com/kubernetes/minikube/issues/new/choose
[***@gcp-minikube-vm minikube]$ curl http://192.168.99.100:32025/signIn
8. 로그확인
kubectl describe pods #pod 정보 확인
kubectl logs podName #pod 로그 확인
댓글남기기