묻고 답해요
150만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
순위 정보를
불러오고 있어요
-
미해결쿠버네티스 어나더 클래스 (지상편) - Sprint 1, 2
secret type_docker-registry
"이름 때문에 기대가 너무 컸던 Secret" 강의 내용에 대한 질문 입니다. secret type 중 docker-registry 를 소개해주셨는데 공식 문서에서 해당 타입을 사용하는 예로 써 kubectl 명령어를 이용한 생성에 대한 언급만 있습니다. docker-registry 유형은 yaml 로 생성하여 사용 가능한것인지가 궁금합니다 ..! cafe:https://inf.run/X6Tbp
-
미해결쿠버네티스 어나더 클래스 (지상편) - Sprint 1, 2
docker hub에서 이미지못가져와요 ㅠㅠ
강의대로 그대로 하고 마지막까지 왔는데2121-deploy 하니까 파드 ImagePullBackOff 상태가 되네요...혹시 dockerhub사이트에서 accessToken 발생하고 secret생성하고 sa등록해주는 그런 절차같은게 필요하나요?
-
미해결비전공자도 이해할 수 있는 쿠버네티스 입문/실전
실무 개발 환경
안녕하세요. 재밌고 좋은 강의를 해주셔서 감사합니다. 아직 70%정도 보고 있지만 궁금하게 있습니다.현재 백엔드 개발자로 근무하고 있는데 저희 환경은 aws의 ec2에 직접 올려백엔드 서버(spring-boot)를 운영하고 있습니다. 점차 쿠버네티스 환경으로 변경하려고인프라담당자들과 백엔드 개발자들이 스터디 및 환경 구축하고 있는데요. 만약 실무에서쿠버네티스 환경으로 바뀐다면 개발자들의 로컬 개발 환경은 어떻게 하시는지 궁금합니다.대부분 자바, 스프링 환경이면 인텔리제이등으로 개발 후 테스트를 해볼텐데 컨테이너에서 다른 개발자들과 다 같은 환경에서 테스트를 해보고 빌드해보고 해야 하지 않는가 싶어서요. 실무에선어떤식으로 개발자들이 개발하는지 개발, 테스트 , 운영 배포 까지 플로우가 어떻게 되는지 궁금합니다.
-
미해결비전공자도 이해할 수 있는 쿠버네티스 입문/실전
교육자료 혹시 공유가 가능하실까요
안녕하세요. 교육 잘 받았습니다. 제가 받았던 교육자료 문서로 받아 볼 수 있을까요? 아니면 온라인으로 찾아볼 수 있는지 확인 부탁드립니다.
-
미해결비전공자도 이해할 수 있는 Docker 입문/실전
AWS 배포 시 docker-compose.yml 관리 방법 질문입니다.
현재 강의에서는 aws 인스턴스 에서 직접 compose.yml을 작성하는데 제가 현재 spring boot 프로젝트 루트 경로에 compose.yml을 구현해뒀어도 프로젝트 빌드시에는 yml이 포함되지 않아서 강의와 같이 인스턴스가 직접 생성해줘야하는 지 궁금합니다. 그리고 나중에 ci/cd를 하게 되면 github Actions같은 CI/CD 도구를 이용해야 yml파일이나 .env이런 파일을 직접 인스턴스에 구현하지 않아도 되는 것이 맞는 지 궁금합니다.
-
미해결비전공자도 이해할 수 있는 Docker 입문/실전
sudo가 안먹혀요
3강 진행 중에 sudo lsof -i:3306 명령어를 사용했는데 ""Sudo가 이 컴퓨터에서 사용하지 않도록 설정되어 있습니다. 사용하도록 설정하려면 으로 이동하세요. Developer Settings page 설정 앱의"" 이렇게 나와서 시작을 못하고 있습니다. 그리고 다른 질문인데 현재 프로젝트를 하고 있는데 db를 mysql을 사용하고 있는 상황이라 만약 실습을 위해서 포트를 끄면 프로젝트할때 영향이 가는지도 궁금합니다.
-
미해결쿠버네티스 어나더 클래스 (지상편) - Sprint 1, 2
maxUnavailable, maxSurge 25% 이해좀 부탁드려요
강의중 파드가 5개인데..처음에 2개가 생성되는건 maxSurge 25% 5개 파드의 25% 여서 2개인건가요?그런다음에 왜 maxUnavailable 25%에 대해서는 2개 삭제가 아닌 1개만 삭제되는지도 이해가 안되구요 같은 25%인데요...그럼 그상태에서는 4개만 서비스가 되는건가요? 아니면 추가로 생성된 2개도 서비스가 같이 되고있는건가요?그럼 총 6개가 서비스되고 있는상태에서 또 몇개가 생성되고 몇개가 죽나요?이게 일단 기동시간이 같다는 전제하에 블루그린방식과 같다는게 좀 이해가 안갑니다.새로 올라온 서버는 서비스가 안되는건가요?
-
미해결쿠버네티스 어나더 클래스 (지상편) - Sprint 1, 2
configmap, secret실시간 반영
secret은 수정하고 파일 열어보면 반영되어잇던데...5초간격으로 조회하는 로직이 있다고 하셨는데 이로직은 원래 파드에 있는 기능인가요? 별도로 만드신건가요? 아니면 파일로 시크릿을 만들었을때 5초간격으로 조회하는게 기본 메카니즘인가요?
-
미해결쿠버네티스 어나더 클래스 (지상편) - Sprint 1, 2
Probe에 대한 이해
중요하다고 생각해서 여러번 보는데도 api입장에서는 이해가 잘 안되네요..제가 생각한 결론은 liveniessProbe는 pod재기동을 위한 api 상태체크같고 readinessProbe는 service에 pod를 연결시킬거냐 말거냐를 결정하는거 같은데...이걸 호출하는 api 를 봤을땐 liveness와 readiness의 api를 실무에서 어떻게 각각 구별해서 만들수가 있을까 싶은거에요...또한 app초기화 user초기화로 구분했던것도 실은 서버가 올라옴과 동시에 거의 강사님이 말씀하신 app초기화와 user초기화는 거의 순식간에 끝나는거 아닌지요? 막말로 톰캣서버올라오는 순간 모든 api들은 정상호출되는거 아닌지요..그리고 그렇게 user초기화를 위한 과정이 서버 기동시 그렇게 오래 올라올까 싶기도 하고..만약 실제로 그렇다면 굳이 startupProbe가 왜 필요할까 싶기도 해요...어차피 startupProbe가 성공하던 말던 중요한건 readiness에서 서비스연결할지 여부를 결정할거고 liveness에서 재기동까지 결정할텐데..굳이 startupProbe까지 넣을필요있는지.....설명은 이해가 되지만 실제로 의미가 있을까 하는 생각뿐이에요..
-
미해결쿠버네티스 어나더 클래스 (지상편) - Sprint 1, 2
그라파나에서 볼려는데
주신 app 설치후부터 그라파다 대시보드에서 메트릭정보 보는게 너무 늦고 그러다보니 fetch에러납니다. cpu, memory 노드 상태를 보면최대 70~80%까지는 가도..ㅇ그이상은 안가는데 너무 버벅대고...그라파나 매트릭정보를 볼수가 없는데요....?app 설치 후부터 그라파나가 맛이가네요 ㅠㅠ컨테이너도 떨어지구요 ㅠㅠ 0/1 로 바뀌고 나서는 컨테이너는 안올라오네요상태를 볼수잇는게 있을가요? 노드 리소스사용량은 full은아닌데
-
미해결쿠버네티스 어나더 클래스 (지상편) - Sprint 1, 2
대시보드 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날린결과입니다.
-
해결됨개발자를 위한 쉬운 도커
강의 이미지 사용
안녕하세요. 강의 잘 듣고 있습니다. 다름이 아니라 저는 공부할때 공부한 내용을 정리하고 벨로그에 포스팅하는데요. pdf 이미지 (에를 들어 컨테이너의 라이프 사이클) 를 캡처 해서 같이 올려도 괜찮을 까요?
-
미해결쿠버네티스 어나더 클래스 (지상편) - Sprint 1, 2
그라파나 접속이 안되네요 ㅠㅠ
아무리 grafana접속해봐도 안뜨네요 ㅠㅠgrafana삭제하고 재성성해봐도 똑같아요.아래는 pod로그입니다. info 레벨만 제외하고 로그 추출해봤어요 로컬로 실행해도 아래처럼 나와요강의대로 하다보면 kubernetes-dashboard는 30000 노드포트가 열려있고,grafana는 30001 저는 30010으로 했는데 여튼, 로컬에서 telnet 으로 해보면 30000포트는 열리는데 30010 은 안열립니다. 겉에서 봤을때는 서비스가 떠있지만 제대로 외부에서 날려보면 응답이 없는상태입니다. 그런데 마스터서버 들어가서 curl날려보면 302가 나옵니다. 검색해보고 찾다찾다 안되서 다시 글남겨봅니다 ㅠㅠ
-
미해결쿠버네티스 어나더 클래스 (지상편) - Sprint3
preStop sleep 5초의 기준이 궁금합니다.
안녕하세요 일프로님. 수업을 듣다 궁금한 점이 생겨 질문드립니다.1.preStop sleep time을 5초로 잡은 기준이 무엇인지 궁금합니다. 구체적으로는 1)경험적으로 얻은 것인지 여부2)하드웨어나 클라우드 서비스의 경우 EKS 같은 매니지드 서비스 마다 적절한 sleep time이 크게 달라질 수도 있을지 궁금합니다.2. 기존 서비스의 sleep time을 40초에서 5초로 단축해도 괜찮을지제가 인수인계 받은 사이드 프로젝트가 있는데 AWS EKS에 Spring 서버가 구현되어 있습니다. 현재 sleep time이 40초로 되어있는데 단축해도 큰 문제는 없을까요? *장애가 나도 괜찮은 서비스라 학습 목적으로 편하게 테스트 할 예정입니다.
-
미해결비전공자도 이해할 수 있는 Docker 입문/실전
볼륨을 쓰는 이유
4분쯤에 "볼륨을 제대로 잘 쓰려면 호스트의 디렉토리 경로를 빈 디렉토리로 만들던, 아니면 존재하지 않는 디렉토리로 만들어 놔야 이 컨테이너에 저장돼 있던 파일들을 이리로 붙여넣기를 해버립니다.이렇게. 호스트에 파일이 이미 있으면 이렇게 컨테이너 기존에 있던 폴더 다 지워버리고 복사가 됩니다."라고 하셨습니다.근데 볼륨을 쓰는 이유가 호스트에 파일을 저장하여 mysql 컨테이너를 변경해도 저장된 값을 쓰게 하려는 것인데 호스트에 있는 파일을 매번 지워야한다면 볼륨을 쓰는 이유가 없는 거 아닌가요?
-
미해결쿠버네티스 어나더 클래스 (지상편) - Sprint 1, 2
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
그라파나 접속안됨요.
[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" 이렇게 뜹니다.
-
미해결쿠버네티스 어나더 클래스 (지상편) - Sprint 1, 2
리소스 표시문제
metrics server까지 설치해서 파드별로는 리소스 차트가 보이는데 상단에는 데이타 기다리는중으로만 나오네요???
-
미해결쿠버네티스 어나더 클래스 (지상편) - Sprint 1, 2
cri 활성화
vagrantfile다운받아서 보면 주석으로 cri활성화 부분에 /etc/containerd/confi.toml 파일에서 SystemdCgroup 으로 설정하는 부분이 있던데이부분이 cri활성화 부분과는 무관하지 않나요? kubernetes document에서 cri활성화부분에 대한 설정은 딱히 안보이고..단순히 cri 를 준수하는 컨테이너 런타임을 사용해야한다라고만 나오는데~~cri활성화를 어떻게 하나요?
-
미해결쿠버네티스 어나더 클래스 (지상편) - Sprint 1, 2
설치 위해 커맨드 위치가 궁금합니다.
강의는 master서버만 하나만 해두고 모두 다 설치하도록 했는데 실제는 마스터에 별로 노드들이 생성될텐데요...이럴경우에 이 강의메 모든 node부분에 해당되는 부분만 해주면 추가적으로 별도 노드에서는 할게 없나요? 별도로 노드들간 알아서 다 연결이 자동으로 되나요? 또한 지금은 마스터 노드에 편하게 들어갈수있어서접속해서 마스터노드 내에서 kubeadm 초기화 부터 calico설치 dashboard설치등 모두 설치 하는데. 가령 eks같은경우는 마스터 접속이 안될뿐더러...여러 노드들들 생성하는게 일반적인데 이런 환경에서는 실제로 어디위치에서 어떻게 kubeadm초기화명령을 실행하고 또 실행했을때는 마스터 노드를 알아서 찾아서 마스터 노드위치에 kube-scheduler,etdc, control, kube-proxy, kube-apiserver 모두 설치되나요? 그런데 kube-proxy같은경우는 노드마다 설치되는게 아닌지요? 또한 eks같은경우 calico도 어디에서 설치명령어를 실행하나요? 이런경우도 마스터노드를 찾아서 알아서 마스터노드에만 설치가 되나요? 대시보드도 마스터에만 설치가 되나요? 명령어는 어디에서 날리나요? 마스터 노드 접속이 안될텐데요....헷갈립니다. ㅠㅠ
주간 인기글
순위 정보를
불러오고 있어요