묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결쿠버네티스 어나더 클래스-Sprint 1, 2 (#실무기초 #설치 #배포 #Jenkins #Helm #ArgoCD)
대시보드 loki 연결
그라파나 접속은 성공했습니다.대시보드에서 데이타소스 생성시http://loki-stack.loki-stack:3100하면 에러가납니다.그런데 어떻게 저 dns로 찾을수있게 되는지 궁금합니다.그라파나 파드안의 resolv.conf도 dns정보가 없어요grafana-6d965864db-w6d76:/usr/share/grafana$ cat /etc/resolv.confsearch monitoring.svc.cluster.local svc.cluster.local cluster.localnameserver 10.96.0.10options ndots:5logger=tsdb.loki endpoint=checkHealth pluginId=loki dsName=loki dsUID=cegalnku8hgxsd uname=admin fromAlert=false t=2025-03-19T09:00:57.17355809Z level=error msg="Error received from Loki" error="Get \"http://loki-stack.loki-stack:3100/loki/api/v1/query?direction=backward&query=vector%281%29%2Bvector%281%29&time=4000000000\": dial tcp: lookup loki-stack.loki-stack on 10.96.0.10:53: no such host" status=error duration=305.216958ms stage=databaseRequest start=1970-01-01T00:00:01Z end=1970-01-01T00:00:04Z step=1s query=vector(1)+vector(1) queryType=instant direction=backward maxLines=0 supportingQueryType=none lokiHost=loki-stack.loki-stack:3100 lokiPath=/loki/api/v1/querylogger=tsdb.loki endpoint=checkHealth t=2025-03-19T09:00:57.17573486Z level=error msg="Loki health check failed" error="error from loki: Get \"http://loki-stack.loki-stack:3100/loki/api/v1/query?direction=backward&query=vector%281%29%2Bvector%281%29&time=4000000000\": dial tcp: lookup loki-stack.loki-stack on 10.96.0.10:53: no such host" 게다가 loki-stack service 의 ip를 이용해서http://10.~:3100으로 하면 다음 에러가 보이구요왜 syntax error가 나오는지...404 not found라서 그럴까요? 혹시 loki git yaml에서 특별히 수정하신부분이 있을까요? on=12.351705ms queriesLength=1 stage=prepareRequest runInParallel=falselogger=tsdb.loki endpoint=checkHealth pluginId=loki dsName=loki dsUID=cegalnku8hgxsd uname=admin fromAlert=false t=2025-03-19T09:10:30.171955345Z level=error msg="Error received from Loki" duration=169.402576ms stage=databaseRequest statusCode=400 contentLength=65 start=1970-01-01T00:00:01Z end=1970-01-01T00:00:04Z step=1s query=vector(1)+vector(1) queryType=instant direction=backward maxLines=0 supportingQueryType=none lokiHost=10.110.135.91:3100 lokiPath=/loki/api/v1/query status=error error="parse error at line 1, col 1: syntax error: unexpected IDENTIFIER" statusSource=downstreamlogger=tsdb.loki endpoint=checkHealth t=2025-03-19T09:10:30.172189572Z level=error msg="Loki health check failed" error="error from loki: parse error at line 1, col 1: syntax error: unexpected IDENTIFIER"마지막으로 그라파나 서버 들어가서 curl날린결과입니다.
-
미해결쿠버네티스 어나더 클래스-Sprint 1, 2 (#실무기초 #설치 #배포 #Jenkins #Helm #ArgoCD)
그라파나 접속이 안되네요 ㅠㅠ
아무리 grafana접속해봐도 안뜨네요 ㅠㅠgrafana삭제하고 재성성해봐도 똑같아요.아래는 pod로그입니다. info 레벨만 제외하고 로그 추출해봤어요 로컬로 실행해도 아래처럼 나와요강의대로 하다보면 kubernetes-dashboard는 30000 노드포트가 열려있고,grafana는 30001 저는 30010으로 했는데 여튼, 로컬에서 telnet 으로 해보면 30000포트는 열리는데 30010 은 안열립니다. 겉에서 봤을때는 서비스가 떠있지만 제대로 외부에서 날려보면 응답이 없는상태입니다. 그런데 마스터서버 들어가서 curl날려보면 302가 나옵니다. 검색해보고 찾다찾다 안되서 다시 글남겨봅니다 ㅠㅠ
-
미해결대규모 트래픽 처리를 위한 부하테스트 입문/실전
성능테스트하기 애매한 API의 경우 진행 방법이 궁금합니다.
안녕하세요, 좋은 강의제공 감사드립니다!강의 듣다가 실무적용할때 궁금한점이 있어서 질문남겨봅니다. 결제와 같이 성능테스트 대상으로 삼기 애매한 API에 대한 테스트 방법이 궁금합니다.api 호출 시 결제가 이루어진다거나 타 제휴사 api 를 친다거나 하는 경우 성능테스트를 진행해버리면 문제가 생기지 않을까 싶은데요, 이런경우에는 보통 어떻게 성능테스트를 진행하고 병목구간을 찾아야 할까요? 감사합니다:D
-
미해결쿠버네티스 어나더 클래스-Sprint3 (#실무핵심 #Docker #Nginx #Minio #Longhorn)
preStop sleep 5초의 기준이 궁금합니다.
안녕하세요 일프로님. 수업을 듣다 궁금한 점이 생겨 질문드립니다.1.preStop sleep time을 5초로 잡은 기준이 무엇인지 궁금합니다. 구체적으로는 1)경험적으로 얻은 것인지 여부2)하드웨어나 클라우드 서비스의 경우 EKS 같은 매니지드 서비스 마다 적절한 sleep time이 크게 달라질 수도 있을지 궁금합니다.2. 기존 서비스의 sleep time을 40초에서 5초로 단축해도 괜찮을지제가 인수인계 받은 사이드 프로젝트가 있는데 AWS EKS에 Spring 서버가 구현되어 있습니다. 현재 sleep time이 40초로 되어있는데 단축해도 큰 문제는 없을까요? *장애가 나도 괜찮은 서비스라 학습 목적으로 편하게 테스트 할 예정입니다.
-
미해결쿠버네티스 어나더 클래스-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에 로그인이 되어 있어야합니다.) 저는 이정도로 해결이 되었습니다. 아름다운 결과...
-
미해결쿠버네티스 어나더 클래스-Sprint 1, 2 (#실무기초 #설치 #배포 #Jenkins #Helm #ArgoCD)
그라파나 접속안됨요.
[Sprint1]실무에서 느껴 본 쿠버네티스가 정말 편한 이유 > 모니터링 설치 - Loki-Stackaver.com/kubeops보고 그대로 따라 했고pod, serivce도 노드포트로 잘 떠있는데대시보드는 잘 들어가 지는데 그라파나는 안들어가지네요? 그라파나 로그를 보니logger=provisioning.plugins t=2025-03-14T08:35:36.026484731Z level=error msg="Failed to read plugin provisioning files from directory" path=/etc/grafana/provisioning/plugins error="open /etc/grafana/provisioning/plugins: no such file or directory" 이렇게 뜹니다.
-
미해결비전공자도 이해할 수 있는 Nginx 입문/실전
https 적용 과정질문
안녕하세요https 예전에 적용해본적이 있었는데 CA기관과 통신하여 개인키 발급받고 하면서 좀 복잡하게한거랑AWS에서 인증서 발급하고 도메인주소 cname하면서 https 적용 이렇게 해본적이 있는데 1. Nginx는 실무에서 이렇게 간단하게 https 를 적용하나요?2. 제가 했던것과 방식과 certbot의 차이 혹시 알수 있나요?단순히 그냥 방법만 다르고 실상은 똑같은 건지 궁금합니다.3. 스프링부트만으로 aws에서 배포한 적이 있는데 certbot 적용이 가능한가요?
-
미해결비전공자도 이해할 수 있는 Nginx 입문/실전
프론트엔드 배포 역할 의미
안녕하세요웹프론트엔드 배포하기가 CDN 역할중 하나인 정적인 컨텐츠를 빠르게 제공하기랑 똑같은 걸로 보면 될까요?
-
미해결쿠버네티스 어나더 클래스-Sprint 1, 2 (#실무기초 #설치 #배포 #Jenkins #Helm #ArgoCD)
리소스 표시문제
metrics server까지 설치해서 파드별로는 리소스 차트가 보이는데 상단에는 데이타 기다리는중으로만 나오네요???
-
미해결쿠버네티스 어나더 클래스-Sprint 1, 2 (#실무기초 #설치 #배포 #Jenkins #Helm #ArgoCD)
cri 활성화
vagrantfile다운받아서 보면 주석으로 cri활성화 부분에 /etc/containerd/confi.toml 파일에서 SystemdCgroup 으로 설정하는 부분이 있던데이부분이 cri활성화 부분과는 무관하지 않나요? kubernetes document에서 cri활성화부분에 대한 설정은 딱히 안보이고..단순히 cri 를 준수하는 컨테이너 런타임을 사용해야한다라고만 나오는데~~cri활성화를 어떻게 하나요?
-
미해결비전공자도 이해할 수 있는 Nginx 입문/실전
도메인 네임 EC2에 연결하기
강사님 강의를 따라하면서 EC2에 도메인 네임을 연결했는데 Ipv4주소로 들어갈때는 페이지가 잘 나오는데 도메인 네임으로 들어가면 사이트에 연결할 수 없다고 뜹니다.Route 53에서 레코드 생성하면서 IP 주소를 입력해서 넣었고저의 EC2 IP주소와 일치하는 것도 확인했습니다.1. Nginx 서버가 정상적으로 동작하는지 sudo systemctl status nginx 입력하여서 active(running)되는 것을 확인하였고2. EC2에서 로컬로 접속 가능한지 curl -I http://localhostcurl -I http://api.jscode-test.com각각 입력하여서 200 OK 뜨는것을 확인했습니다.GPT에서는 3번쨰 방법으로 /etc/nginx/conf.d/api.jscode-test.com.conf 파일이 있는지 확인하고, 내용이 올바른지 점검하세요라고 조언을 주었는데 어떻게 해야하는지 알 수 있을까요?
-
미해결쿠버네티스 어나더 클래스-Sprint 1, 2 (#실무기초 #설치 #배포 #Jenkins #Helm #ArgoCD)
설치 위해 커맨드 위치가 궁금합니다.
강의는 master서버만 하나만 해두고 모두 다 설치하도록 했는데 실제는 마스터에 별로 노드들이 생성될텐데요...이럴경우에 이 강의메 모든 node부분에 해당되는 부분만 해주면 추가적으로 별도 노드에서는 할게 없나요? 별도로 노드들간 알아서 다 연결이 자동으로 되나요? 또한 지금은 마스터 노드에 편하게 들어갈수있어서접속해서 마스터노드 내에서 kubeadm 초기화 부터 calico설치 dashboard설치등 모두 설치 하는데. 가령 eks같은경우는 마스터 접속이 안될뿐더러...여러 노드들들 생성하는게 일반적인데 이런 환경에서는 실제로 어디위치에서 어떻게 kubeadm초기화명령을 실행하고 또 실행했을때는 마스터 노드를 알아서 찾아서 마스터 노드위치에 kube-scheduler,etdc, control, kube-proxy, kube-apiserver 모두 설치되나요? 그런데 kube-proxy같은경우는 노드마다 설치되는게 아닌지요? 또한 eks같은경우 calico도 어디에서 설치명령어를 실행하나요? 이런경우도 마스터노드를 찾아서 알아서 마스터노드에만 설치가 되나요? 대시보드도 마스터에만 설치가 되나요? 명령어는 어디에서 날리나요? 마스터 노드 접속이 안될텐데요....헷갈립니다. ㅠㅠ
-
미해결대규모 트래픽 처리를 위한 부하테스트 입문/실전
개인 프로젝트 시 top 입력 시 해석 도움 요청
강사님 안녕하세요. 강사님 덕분에 배운대로 잘 사용하고 있습니다. 그중 제가 해석이 강사님과 다른 지점이 있어서 질문을 남깁니다. 강사님은 CPU코어가 2개여서 Max 200%까지 된다고 했는데 저는 1:1 비율로 사진과 똑같더라고요. 다른 점은 강사님은 EC2 설계 시 T3.small을 저는 t2를 선택했는데 그것에 따라 다른 것일까요? 아님 저는 node인데 강사님은 java여서 그에 대한 차이일까요?
-
미해결쿠버네티스 어나더 클래스-Sprint 1, 2 (#실무기초 #설치 #배포 #Jenkins #Helm #ArgoCD)
온프레미스 Window server에 쿠버네티스 적용
안녕하세요 선생님,회사에서 사용하는 서버 1대에 Nginx를 프록시를 통해 총 7개의 WAS 서비스가 동작하고 있습니다.현재 상황에서 조금 더 안정적인 인프라 아키텍쳐를 위해 쿠버네티스를 적용해볼까 하여 수강을 시작했습니다.현재 20% 수강을 하면서 아직 감이 잡히지 않았지만위와 같은 서버 환경에 쿠버네티스 적용이 맞을까요?강의에서 환경과는 조금 차이가 있어서 여쭤봅니다
-
미해결비전공자도 이해할 수 있는 CI/CD 입문·실전
깃허브 캐싱
.gitignore에 추가된 application.yml을 CI/CD로 관리하기 강의에서 1:40초 부분에서 git add . / git status한 다음에 application.yml이 수정이 되고 있다. 캐싱떄문이라고 하셨는데 . application.properties를 yml로 바꾸고aws: access-key: ABCDEFG secret-key : HOIJOIASDJO 이 값들을 입력했는데 git status에 어느부분이 문제인건가요? yml파일도 modified?라는 상태가 안떠서 문제인건지 정확히 이해를 못해서 질문 남깁니다. 혹시 .gitignore에 넣었으니깐 새로운 파일을 추가하던 수정을 하던 git status에 안떠야 정상인건가요?
-
미해결대규모 트래픽 처리를 위한 부하테스트 입문/실전
sudo nohup java -jar jscode-0.0.1-SNAPSHOT.jar & 설치 오류?
사진과 같이 강사님과 똑같이 그리고 제공해준 실습 자료를 복사 붙여넣기하면서 따라하고 있는데 저기 sudo nohup java -jar jscode-0.0.1-SNAPSHOT.jar &설치에서 강사님은 엔터를치면 ip를 확인할 수 있는 코드를 치면 나오는데 저는 exit 1 등이 뜨면서 설치가 안됩니다. 제가 잘못한 것이 있나요?node 유저라서 자바는 잘 모릅니다.
-
미해결비전공자도 이해할 수 있는 CI/CD 입문·실전
깃허브 시크릿
- name: application.yml 만들기 run: echo "${{ secrets.APPLICATION_PROPERTIES }}" > ./src/main/resources/application.yml 강의에서 이런식으로 시크릿 변수에 yml을 미리 넣었는데 만약에 yml안에서도 시크릿 변수를 사용하면 제대로 동작을 하나요?? ex)kakaopay: secretKey: ${KAKAOPAY_KEY} 이런식으로 yml에 있다고 할 때
-
미해결쿠버네티스 어나더 클래스-Sprint 1, 2 (#실무기초 #설치 #배포 #Jenkins #Helm #ArgoCD)
이전 강의 이후 파드 제거??
무게감 있게 설치하는 방법 3/3 - 최종 정리 이후대시보드에 파드가 17개가 있습니다.Loki를 실습하기 위해서 파드를 다 지워도 되는건가요?
-
미해결쿠버네티스 어나더 클래스-Sprint 1, 2 (#실무기초 #설치 #배포 #Jenkins #Helm #ArgoCD)
영상과 일치하는 Vagrantfile 버전이 있을까요?
curl -O https://raw.githubusercontent.com/k8s-1pro/install/main/ground/k8s-1.27/vagrant-2.4.3/Vagrantfile로 다운시 파일의 버전이 강의와 맞지않아서 당시에 사용하신 파일을 받을 수 있는 링크가 있을까요?
-
미해결대규모 트래픽 처리를 위한 부하테스트 입문/실전
목표 throughput, latency는 어떤 기준으로 정하나요?
혹시 보편적으로 공유되고 있는 기준치가 별도로 존재할까요? 아니면 매번 회사, 서비스마다 달라지기 때문에 자체적으로 고민을 해야 하는 건가요 ? ㅠ ㅠ