묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결쿠버네티스 어나더 클래스-Sprint 1, 2 (#실무기초 #설치 #배포 #Jenkins #Helm #ArgoCD)
버추얼 박스를 꼭 설치해야 하나요?
minikube로는 로컬 환경 구성을 하면 안될까요?
-
해결됨eks를 활용한 spring 운영서버 배포(feat. devops의 모든것)
강의 내용에서 보강 하고 싶어서 질문 드립니다 - DEV, PROD 환경
실전에서는 주로 어떻게 하는지 궁금 해서 질문 드립니다. 보통 실전에서는 개발서버 및 상용서버가 각각 물리적으로 분리 된 상태에서 관리를 할텐데요. 현재 선생님께서 알려주신 부분에서 이부분을 어떻게 적용 할지 궁금 해서 질문 드립니다. AWS EKS 하나로 같이 사용하되 네임스페이스를 논리적으로 분리해서 개발 환경하고 상용 환경을 분리하자AWS EKS 물리적으로 개발 환경하고 상용 환경을 분리 하기이렇게 이슈가 있을 것 같습니다. 일단 1번 내용으로 하게 된다면 name: deploy DEV backend on: push: branches: - dev jobs: build-and-deploy: runs-on: ubuntu-latest steps: ----- 생략 ----- - name: configure aws uses: aws-actions/configure-aws-credentials@v1 with: aws-access-key-id: ${{ secrets.AWS_KEY }} aws-secret-access-key: ${{ secrets.AWS_SECRET }} aws-region: ap-northeast-2 - name: update cluster infomation run: aws eks update-kubeconfig --name ${클러스터이름} --region ap-northeast-2 - name: Login to ECR ----- 생략 ----- - name: build and push docker image to ecr env: REGISTRY: ${AWS ECR REPOSITORY} REPOSITORY: ${개발 Repository 명} IMAGE_TAG: latest run: | docker build \ -t $REGISTRY/$REPOSITORY:$IMAGE_TAG \ -f ./project/Dockerfile ./project docker push $REGISTRY/$REPOSITORY:$IMAGE_TAG - name: eks kubectl apply run: | kubectl rollout restart deployment ordersystem-backend -n dev name: deploy PROD backend on: push: branches: - prod jobs: build-and-deploy: runs-on: ubuntu-latest steps: ----- 생략 ----- - name: configure aws uses: aws-actions/configure-aws-credentials@v1 with: aws-access-key-id: ${{ secrets.AWS_KEY }} aws-secret-access-key: ${{ secrets.AWS_SECRET }} aws-region: ap-northeast-2 - name: update cluster infomation run: aws eks update-kubeconfig --name ${클러스터이름} --region ap-northeast-2 - name: Login to ECR ----- 생략 ----- - name: build and push docker image to ecr env: REGISTRY: ${AWS ECR REPOSITORY} REPOSITORY: ${상용 Repository 명} IMAGE_TAG: latest run: | docker build \ -t $REGISTRY/$REPOSITORY:$IMAGE_TAG \ -f ./project/Dockerfile ./project docker push $REGISTRY/$REPOSITORY:$IMAGE_TAG - name: eks kubectl apply run: | kubectl rollout restart deployment ordersystem-backend -n prod 이렇게 네임스페이스 통해 논리적으로 분리해서 관리 하는 것도 있을 것 같은데요.하지만 제가 생각 했을때는 단점으로는 SPOF (Single Point Of Failure) 문제가 발생 될 것 같아 고민이 들지만 비용면에서는 1번이 좋을 것 같기도 합니다. 주로 실전에서는 어떻게 관리를 하는지 궁금 합니다! ^_^
-
미해결쿠버네티스 어나더 클래스-Sprint 1, 2 (#실무기초 #설치 #배포 #Jenkins #Helm #ArgoCD)
helm / values.yml
안녕하세요 helm사용 시에 배포환경에 따라 values.yaml을 구성해야 하는 것은 이해했습니다. 그렇다면 만약 prd환경의 values.yaml은 결국 깃허브에 올라가있는 yaml을 활용하는 것이고, 그것 또한 평문으로 저장이 되어있으면 안될거같은 생각이 드는데 , 실무적으로 사용하는 방법이 따로 있나요 ? ex) 젠킨스 credentials - > values.yaml 바인딩
-
해결됨eks를 활용한 spring 운영서버 배포(feat. devops의 모든것)
MSA - member service 배포시 문제
안녕하세요 우선 좋은 강의 만들어주셔서 감사드립니다.MSA 파트에서 질문 하나 있습니다. ApiGateway 서비스 depl_svc.yml Aplly 하기 - kubectl apply -f ./depl_svc.yml ingress 배포 - kubectl apply -f ./ingress.ymlhttps.yml Aplly 하기 - kubectl apply -f ./https.ymlMember 서비스 depl_svc.yml Aplly 하기 - kubectl apply -f ./depl_svc.ymldeploy_ordermsa_with_k8s.yml 통해서 github push 하기 AWS ECR Repository 에 정상적으로 이미지 등록되는지 체크 API Gateway 배포 완료member service 배포 실패 - Readiness probe failed: Get "http://172.31.47.22:8080/health": dial tcp 172.31.47.22:8080: connect: connection refused일단 서비스가 정상적으로 배포되었는지 자기 자신 서버로 호출 해서 체크 하는 것 같습니다. 이런데 "연결 거절" 이라는 에러가 발생되네요. 무엇이 잘못되는지 확인이 어려워서 이렇게 질문 드립니다. 다시 처음부터 했는데도 문제가 있어서 분명 제가 설정 잘못 한거 같은데... 혹시 예상되는 부분이 있을까요?
-
미해결쿠버네티스 어나더 클래스-Sprint 1, 2 (#실무기초 #설치 #배포 #Jenkins #Helm #ArgoCD)
k8-Master 설치 관련 문의드립니다.
mac 버전 카페에 나온대로 설치 후 쿠바네티스 모니터링화면 까지는 나옵니다.모니터링 화면 데이터가 나오지를 않습니다.세팅은 완료되었는데, 어느부분을 제가 놓친 것이 있는 지 궁금합니다.알림을 클릭해보면 다음과 같은 에러가 있습니다.customresourcedefinitions.apiextensions.k8s.io is forbidden: User "system:bootstrap:n272y3" cannot list resource "customresourcedefinitions" in API group "apiextensions.k8s.io" at the cluster scopere 그라파나와 loki 세팅하여 강의 대로 봤는데 데이터는 N/A입니다.
-
미해결쿠버네티스 어나더 클래스-Sprint 1, 2 (#실무기초 #설치 #배포 #Jenkins #Helm #ArgoCD)
강의 실습에 사용된 Kubernetes yml 파일 출처 문의 입니다
안녕하세요강의를 반복해서 들으며 열심히 공부하고 있습니다.공부를 하던 중 문득 궁금한 점이 생겨 이렇게 글을 남깁니다.예를 들어, 모니터링 설치 실습을 진행한다고 가정했을 때kubectl apply --server-side -f ground/k8s-1.27/prometheus-2.44.0/manifests/setup이런 명령어를 사용하게 되는데요,실제로 Git 레포지토리에 들어가서 해당 경로의 소스들을 살펴보니 꽤 많은 yml들이 포함되어 있더라고요.그래서 궁금해졌습니다.이런 YAML 보통 어디에서 확인할 수 있는 건가요?혹시 공식적으로 참고할 수 있는 오픈소스나 레퍼런스가 있다면 알려주시면 감사하겠습니다!
-
해결됨eks를 활용한 spring 운영서버 배포(feat. devops의 모든것)
MAS 환경에서 Feign Client 라이브러리를 이용해 HTTP 통신 발생시 에 대한 질문 있습니다.
공유해주신 API Gateway 아키텍처를 보면Order 서비스가 Product 서비스에게 해당 상품 수량 어느정도인지 요청시Order 서비스는 유레카에게 Product 서비스 위치를 질의 한다.유레카에 등록된 Product 서비스 위치 정보를 Order 서비스에게 응답한다.Order 서비스는 Product 서비스에게 실질적으로 상품 수량 GET 요청 한다. 제가 알고 있는 일반적으로 (MAS X) 모놀리식 구조에서 Feign Client 를 사용시 유레카를 사용 하지 않는 상황에서 특정 서버에게 요청시 곧바로 해당 서버에게 요청을 했었는데요. (3 Way Handshake 생략)그런데 @FeignClient(name = "product-service", url="http://product-service") public interface ProductFeign { }이렇게 FeignClient 어노테이션에서 name 을 특정 서버 어플리케이션 이름으로 지정하게 된다면 알아서 유레카에게 질의하고 응답 받아서 Product 서비스에게 요청해서 총 HTTP 요청이 2번 일어 난다고 보면 되는건가요? 일단 비지니스 로직단에서는 HTTP 요청이 2번 일어난다(유레카 서버에게 호출 하고 그 다음 실질적은 요청하고자 하는 서버에게 다시 요청) 라고 로직상에서는 안보여서요. 이부분은 내부 로직(Feign client 라이브러리 내부 로직?? 이라고 해야 할까요?..)에서 처리된거라서 눈에 안보이는 부분인지 알고 싶습니다.
-
미해결쿠버네티스 어나더 클래스-Sprint 1, 2 (#실무기초 #설치 #배포 #Jenkins #Helm #ArgoCD)
VM 환경을 직접 구성하였을 때 강의 내용을 따라가는 것에 지장이 없을까요?
[👍좋은 질문을 했을 때 좋은 답변이 돌아 옵니다]안녕하세요 강의를 들으면서 환경 세팅을 위해 준비 중인데 궁금한 점이 있어 질문드립니다.저는 해당 강의를 통해 k8s 에 대해 알아보고 이를 통해 실험 환경을 구축하고자 수강 중에 있는 대학원생입니다..! 추후 진행활 실험은 GPU 가속이 필요해서, 영상에서 소개해주시는 VM 솔루션 처럼 Type2 하이퍼바이저가 아닌 Type 1 하이퍼바이저 VM의 사용이 필요한 상황입니다. 그래서 Windows의 Hyper-V 가상화를 통해 VM을 구축하여 강의를 진행하고자 하는데요. 궁금한 점은 다음과 같습니다. 해당 환경에서도 강의 내용을 따라가는 데 지장이 없을까요?- 특히 Vagrant의 경우, Vagrant 에 작성된 내용을 참고하여 직접 환경을 구성할 수 있다면 사용하지 않아도 무방하다고 다른 질문글에 답을 남기신 것을 보았는데요. 해당 환경에서도 말씀하신 것이 동일하게 적용될 수 있는지 여쭙고자 합니다.Linux 의 경우 Ubuntu 를 사용하는 것이 너무 손에 익어서,, 혹시 Ubuntu 리눅스를 사용하였을 때에도 강의 내용을 해수편까지 따라가는 데 지장이 없을까요? (알려주시는 명령어는 직접 우분투 배포판에 맞춰서 바꿀 생각입니다..!)
-
해결됨eks를 활용한 spring 운영서버 배포(feat. devops의 모든것)
AWS EKS 클러스터 생성 후 에러 문구 질문
리소스 로드 중 오류 발생Amazon EKS is unable to communicate with your Kubernetes cluster API server. The cluster must be in an ACTIVE state for successful connection. Please try again in few minutes. 안녕하세요 선생님 고생 많으십니다 ^^ 질문 하나 하도록 하겠습니다!이렇게 에러가 나오는데요! 분명 활성 상태인데 왜 이런 에러가 발생되는걸까요? IAM 도 분명 잘 설정 했는데도요 ㅠㅠ
-
해결됨eks를 활용한 spring 운영서버 배포(feat. devops의 모든것)
프로젝트 연결
안녕하세요 강사님! Redis로 시작해 채팅 서비스를 거쳐 지금의 강의까지 도달한 학생입니다 :) 항상 유익한 강의를 제공해주셔서 정말 감사합니다. 이번 강의를 진행하기에 앞서 이전에 진행한 채팅 프로젝트를 적용해 배포해보려고 하는데요 혹시 강의를 진행하는데 있어 문제되는 부분이 생기지 않을까 싶어 미리 질문을 드렸습니다! 강의를 진행하는데 있어 프로젝트가 다르더라도 큰 문제가 없을까요?
-
해결됨eks를 활용한 spring 운영서버 배포(feat. devops의 모든것)
"https통신을 위한 인증서 작업" 영상에서 나오는 notion 정보 어디에 있는 걸까요?
https://picturesque-staircase-f6e.notion.site/eks-spring-1c323940dccf8067a6c2ee4bbbaaa91a 해당 링크에서 찾으려고 하니 제가 못 찾는 건지 찾을 수가 없는데요. 제가 못 찾는 걸까요??
-
해결됨eks를 활용한 spring 운영서버 배포(feat. devops의 모든것)
EKS 에서 노드 그룹 생성 실패 질문
안녕하세요 선생님! 우선 좋은 강의 만들어주셔서 감사드립니다 :) E0622 -------- ---- memcache.go:265] couldn't get current server API group list: the server has asked for the client to provide credentialserror: You must be logged in to the server (the server has asked for the client to provide credentials)kubectl get nodes이렇게 명령어를 실행하니 위에 같은 에러가 발생 됩니다.그래서 AWS 에서 정상적으로 노드그룹이 생성 되었는지 확인 해보니깐 이렇게 에러가 발생 되었습니다.구글링 통해 확인 해보니깐 VPN 관련 이슈가 있을 수 있다고 해서 VPN -> NAT 게이트웨이 페이지로 가보니 아무것도 생성이 되지 않는 것 같은데 혹시 NAT 게이트웨이 생성 해야지 해결 될 수 있는 부분일까요?
-
미해결바로쓰는 CI/CD on K8S
명령어 파일이 있으면 좋을 것 같아요.
강의를 구매해서 수강하며 테스트하고 있는데, 명령어들을 실행하는 파일들이 있으면 좋을 것 같아요. 화면에 있는 명령어들을 보고 치지만, 오타가 있을 경우도 있어서요.
-
미해결쿠버네티스 어나더 클래스-Sprint 1, 2 (#실무기초 #설치 #배포 #Jenkins #Helm #ArgoCD)
Argo CD Image Updater를 이용한 수업 이슈(2232) ImagePull
처음 강의부터 쭉 따라오신 분들에 한해서 제가 발견한 이슈사항 공유하고 싶어서 글을 남겼습니다. 저의 경우는 Repository를 전부 제 개인껄로 옮겨서 사용중인데요. 문제는 포크를 하지않고 제가 공부하는 Repo가 따로 있어 거기에 모아 놨다는게 문제입니다. github pull할때 path가 미친듯이 짜증나더라구요.pull하는 기준이 제가 git으로 관리하는 폴더들이 싸드리 싹싹 똑같이 생성되기 때문에 접근이 엄청 힘들었는데요. 그래서 이짓을 해야 했습니다. pipeline { agent any tools { gradle 'gradle-7.6.1' jdk 'jdk-17' } parameters { // 배포 환경 선택 choice(choices: ['dev', 'qa', 'prod'], name: 'PROFILE', description: '배포 환경 선택') } environment { // 본인의 username으로 하실 분은 수정해주세요. DOCKERHUB_USERNAME = '비밀' GITHUB_URL = '입니다' APP_VERSION = '1.1.1' BUILD_DATE = sh(script: "echo `date +%y%m%d.%d%H%M`", returnStdout: true).trim() // 위에 date 포맷 오류가 있어요. %y%m%d.%H%M%S가 맞습니다) TAG = "${APP_VERSION}-" + "${BUILD_DATE}" // 소스코드 위치 SOURCE_DIR = "kubernetes/일프로/project/kubernetes-anotherclass-api-tester-main" // 배포 및 도커관련 위치 KUBE_DIR = "kubernetes/일프로/kubernetes-anotherclass-sprint2-main" // 실습 넘버링 CLASS_NUM = '2232' } stages { stage('소스파일 체크아웃') { steps { checkout scmGit(branches: [[name: '*/main']], extensions: [[$class: 'SparseCheckoutPaths', sparseCheckoutPaths: [[path: "${SOURCE_DIR}"]]]], userRemoteConfigs: [[url: "${GITHUB_URL}"]]) sh "pwd" sh "ls -al" } } stage('소스 빌드') { steps { // 755권한 필요 (윈도우에서 Git으로 소스 업로드시 권한은 644) sh "pwd" sh "ls -al" sh "cd ./${SOURCE_DIR} && chmod +x ./gradlew" sh "cd ./${SOURCE_DIR} && gradle clean build" } } stage('릴리즈파일 체크아웃') { steps { checkout scmGit(branches: [[name: '*/main']], extensions: [[$class: 'SparseCheckoutPaths', sparseCheckoutPaths: [[path: "${KUBE_DIR}/${CLASS_NUM}"]]]], userRemoteConfigs: [[url: "${GITHUB_URL}"]]) } } stage('컨테이너 빌드 및 업로드') { steps { // jar 파일 복사 sh "cp ./${SOURCE_DIR}/build/libs/app-0.0.1-SNAPSHOT.jar ./${KUBE_DIR}/${CLASS_NUM}/build/docker/app-0.0.1-SNAPSHOT.jar" script{ // 도커 로그인 withCredentials([usernamePassword(credentialsId: 'docker_password', passwordVariable: 'PASSWORD', usernameVariable: 'USERNAME')]) { sh "echo " + '${PASSWORD}' + " | docker login -u " + '${USERNAME}' + " --password-stdin" } // 도커 빌드 및 업로드 if (DOCKERHUB_USERNAME == "1pro") { TAG = "1.0.1-231220.175735" // 1pro useranme 수강생을 위한 고정 태그명 sh "docker build ./${CLASS_NUM}/build/docker -t ${DOCKERHUB_USERNAME}/api-tester:${TAG}" } else { // 도커 빌드 sh "docker build -t ${DOCKERHUB_USERNAME}/api-tester:${TAG} ./${KUBE_DIR}/${CLASS_NUM}/build/docker" // [2] 잦은 배포 - versioning 무의미, 계획된 배포 - versioning 필수 sh "docker push ${DOCKERHUB_USERNAME}/api-tester:${TAG}" } // 도커 이미지 삭제 sh "docker rmi ${DOCKERHUB_USERNAME}/api-tester:${TAG}" } } post { always { // 도커 로그아웃 sh "docker logout" } } } } } 삽질을 몇번하니 이젠 뭐 대충 어디서 문제가 발생하는지 보이더군요... 뭐 서두는 여기까지... 급하신분은 여기부터 보시면 됩니다.싱크가 제대로 안될 경우 해결방법detail에서 annotations 작성시 image path를 잘 적었는지 확인(1pro/api-tester -> ${docker username}/api-testerrepo URL 본인 것인지 확인PATH 경로 잘 작성했는지 확인(저처럼 fork를 하지않고 특정 레포에 넣으신분들...) image pull이 안되는 경우 해결방법Jenkinsfile을 뒤져서 DOCKERHUB_USERNAME 및 GITHUB_URL변경했는지 확인2232/deploy/helm/api-tester 폴더에 들어가 values.yaml과 values-xx.yaml파일들의 images가 1pro-/api-tester가 아닌 ${docker username}/api-tester인지 확인Docker Hub에 접속해 v1.0.0으로 태그가 달려있으면 삭제 후 212 List View의 container-build했던 부분의 Jenkinsfile에서 image생성시 사용한 태그가 v1.0.0인지 확인해보고 GitHub에 들어가 v를 삭제한 1.0.0으로 커밋한 후에 컨테이너 빌드를 다시 시작(이 때 CI/CD서버에 docker에 로그인이 되어 있어야합니다.) 저는 이정도로 해결이 되었습니다. 아름다운 결과...
-
미해결세 시간만에 끝내는 쿠버네티스부터 마이크로서비스, CI/CD, 서비스 메시까지
강의 자료와 데모에서 사용한 스크립트와 yml 파일을 제공하지 않나요?
인프런 강의들은 강의에서 사용한 강의 자료(PPT, PDF)를 제공하는데요. 강의 자료를 다운 받는 곳이 없는데요. 강의 자료는 제공하지 않나요? 데모에서 사용한 스크립트와 yml 파일은 제공하지 않나요?
-
미해결세 시간만에 끝내는 쿠버네티스부터 마이크로서비스, CI/CD, 서비스 메시까지
kubernetes 구조 설계에 관한 질문
안녕하세요.쿠버네티스를 vm에 직접 구축해서 서비스를 올려보려고 하고 있습니다. 네트워크 관련해서 여쭤보려고 하는데요.쿠버네티스 클러스터(master node, worker node 들)는 private zone에 두고 metal lb에 공인 ip를 줘서 외부에서 통신이 들어올 때, 쿠버네티스 클러스터로 직접 들어오는 것이 아니라 metal lb를 통해서 들어오게 구성하고 싶은데, 이게 가능한 구조 일까요? 혹시 저 방법이 아니면 위와 같은 구조를 설계하려고 할 때 어떤 방식으로 인프라 설계를 해야되는지 여쭤보고자 합니다. 감사합니다.
-
미해결세 시간만에 끝내는 쿠버네티스부터 마이크로서비스, CI/CD, 서비스 메시까지
강의에 사용된 소스코드는 어디서 받나요?
movies.jsonmovies.py 등강의에 사용된 소스코드는 어디서 받나요?
-
미해결데브옵스(DevOps)를 위한 쿠버네티스 마스터
argocd 로 배포한 것 삭제 질문 있어요
argoCd 를 이용해 CD를 구성했습니다. sync 하여 예제 app 을 배포한 후 해당 app의 CD 를 제거 했습니다. 제가 생각했던 결과물은 "CD를 제거 하면 worker node에서 예제 app이 제거 되는 것" 이었습니다. 하지만 deploy, svc, pod 전부 그대로 떠 있더라구요. 원인이 무엇일까요? 제가 잘못 한 부분이 있는 것일까요 아니면 argoCd에선 CD를 삭제해도 CD만 제거될 뿐 worker node에 띄워진 app은 건드리지 않는 것인가요?