
🔅 vpn 아이디와 비밀번호, PuTTY IP address는 수업 시간에 배포한 것으로 막을 경우 실습할 수 없음
🔅 image는 해당 코드 이외의 다른 image를 사용해도 됨

🔸 개인의 투표 결과를 queue 형식으로 redis에 데이터 저장
🔸 redis Pod를 Deployment 형식으로 배포 + redis service를 ClusterIP 형식으로 서비스 노출
cluster 내부에서 redis Pod로 접근 가능
🔸 Code
vim redis.yaml > 코드 작성
kubectl apply -f redis.yaml
apiVersion: apps/v1 kind: Deployment metadata: labels: app: redis name: redis spec: replicas: 1 selector: matchLabels: app: redis template: metadata: labels: app: redis spec: containers: - image: local-registry.com:30500/redis:1.0 name: redis ports: - containerPort: 6379 name: redis volumeMounts: - mountPath: /data name: redis-data volumes: - name: redis-data emptyDir: {} --- apiVersion: v1 kind: Service metadata: labels: app: redis name: redis spec: type: ClusterIP ports: - name: "redis-service" port: 6379 targetPort: 6379 selector: app: redis
🔸Python Flask를 이용하여 만든 투표 대시보드에서 투표 수집
🔸 vote Pod를 deployment 형식으로 배포 + vote service를 NodePort 형식으로 서비스 노출
외부에서 특정 port #로 접근 가능
🔸 Code
vim vote.yaml > 코드 작성
kubectl apply -f vote.yaml
apiVersion: apps/v1 kind: Deployment metadata: labels: app: vote name: vote spec: replicas: 1 selector: matchLabels: app: vote template: metadata: labels: app: vote spec: containers: - image: local-registry.com:30500/vote:1.0 name: vote ports: - containerPort: 80 name: vote --- apiVersion: v1 kind: Service metadata: labels: app: vote name: vote spec: type: NodePort ports: - name: "vote-service" port: 5000 targetPort: 80 selector: app: vote
🔸 ifconfig하여 NODE IP address를 확인
🔸 kubectl describe svc를 하여 vote의 NodePort 확인
🔅 브라우저 URL에 [Node_IP]:[NodePort] 입력 후 접속
🔸 투표자와 투표 내용을 db(PostgreSQL)에 저장
🔸 Code
vim db.yaml > 코드 작성
kubectl apply -f db.yaml
apiVersion: apps/v1 kind: Deployment metadata: labels: app: db name: db spec: replicas: 1 selector: matchLabels: app: db template: metadata: labels: app: db spec: containers: - image: local-registry.com:30500/db:1.0 name: postgres env: - name: POSTGRES_USER value: postgres - name: POSTGRES_PASSWORD value: postgres - name: POSTGRES_HOST_AUTH_METHOD value: trust ports: - containerPort: 5432 name: postgres volumeMounts: - mountPath: /var/lib/postgresql/data name: db-data volumes: - name: db-data emptyDir: {} --- apiVersion: v1 kind: Service metadata: labels: app: db name: db spec: type: ClusterIP ports: - name: "db-service" port: 5432 targetPort: 5432 selector: app: db
🔸 투표를 집계하고 자바스크립트를 이용하여 만든 투표 결과 대시보드 제공
🔸 Code
vim result.yaml > 코드 작성
kubectl apply -f result.yaml
apiVersion: apps/v1 kind: Deployment metadata: labels: app: result name: result spec: replicas: 1 selector: matchLabels: app: result template: metadata: labels: app: result spec: containers: - image: local-registry.com:30500/result:1.0 name: result ports: - containerPort: 80 name: result --- apiVersion: v1 kind: Service metadata: labels: app: result name: result spec: type: NodePort ports: - name: "result-service" port: 5001 targetPort: 80 selector: app: result
🔸 ifconfig하여 NODE IP address를 확인
🔸 kubectl describe svc를 하여 result의 NodePort 확인
🔅 브라우저 URL에 [Node_IP]:[NodePort] 입력 후 접속
cats 또는 dogs 중 하나를 선택했지만 투표 결과는 50%/50%로 표시됨
🔅 redis에 저장된 queue 형식의 투표 결과를 PostgreSQL로 넘기는 컴포넌트 필요
🔸 redis에서 queue 형식으로 저장된 데이터를 받아와 {voter_id/vote} 형식의 고유 voter id로 데이터를 구분하여(.NET) db(PostgreSQL)에 저장
🔸 Code
vim worker.yaml > 코드 작성
kubectl apply -f worker.yaml
apiVersion: apps/v1 kind: Deployment metadata: labels: app: worker name: worker spec: replicas: 1 selector: matchLabels: app: worker template: metadata: labels: app: worker spec: containers: - image: local-registry.com:30500/worker:1.0 name: worker
🔸 ifconfig하여 NODE IP address를 확인
🔸 kubectl describe svc를 하여 result의 NodePort 확인
🔅 브라우저 URL에 [Node_IP]:[NodePort] 입력 후 접속
cats로 선택했을시 투표 결과는 100%/0%로 표시되어 투표 내용이 정상적으로 반영된 것을 확인함
현재 디렉토리에 존재하는 파일 모두 나타냄
배포(apply)된 pod 상태(생성 여부) 확인
배포(apply)된 service 상태(생성 여부, NodePort #) 확인
배포(apply)된 pod 상세 설명
배포(apply)된 service 상세 설명
worker pod의 log 상태를 보여줌
파일을 apply 하여 생성된 pod, service 등 삭제 :파일은 그대로 존재
파일명 변경
파일 자체 삭제
현재 노드의 IP address 확인 가능 (ex. 192.168.x.x)