https://cafe.naver.com/kubeops/496 안녕하세요. mac m1 사용중입니다 master 노드 설치후에 worker1설치중입니다 아래 과정 설치중인데 yum install시 타임아웃이 발생하는거 같습니다. 외부통신이 안되는거 같은데.. 도움 주실 수 있나요~ echo '======== [4] Rocky Linux 기본 설정 ========' echo '======== [4-2] 타임존 설정 ========' timedatectl set-timezone Asia/Seoul echo '======== [4-3] [WARNING FileExisting-tc]: tc not found in system path 로그 관련 업데이트 ========' yum install -y yum-utils iproute-tc
컨테이너 빌드 중 오류가 생기는데요 #0 building with "default" instance using docker driver #1 [internal] load build definition from Dockerfile #1 transferring dockerfile: 404B 0.0s done #1 DONE 0.1s #2 [internal] load .dockerignore #2 transferring context: 2B done #2 DONE 0.2s #3 [internal] load metadata for docker.io/library/openjdk:17 #3 ERROR: docker.io/library/openjdk:17: not found ------ > [internal] load metadata for docker.io/library/openjdk:17: ------ Dockerfile:1 -------------------- 1 | >>> FROM openjdk:17 2 | COPY ./app-0.0.1-SNAPSHOT.jar /usr/src/myapp/app.jar 3 | ENTRYPOINT ["java", "-Dspring.profiles.active=${spring_profiles_active}", "-Dapplication.role=${application_role}", "-Dpostgresql.filepath=${postgresql_filepath}", "-jar", "/usr/src/myapp/app.jar"] -------------------- ERROR: failed to solve: openjdk:17: docker.io/library/openjdk:17: not found Build step 'Execute shell' marked build as failure Finished: FAILURE -------------------- openjdk:17 를 이제 공식 지원 안하는것 같은데 맞을까요 ? 만약 맞다면 혹시 fork 해온 스크립트에서 관련 부분 다 바꾸고 지원되는 jdk 17로 수정하는 작업을 하는게 맞을까요 ? ssh 에서도 와 같이 pull 을 못해오는것 같아서 질문 남겨봅니다.
안녕하세요 강사님. 저는 sprint 1,2를 수강했고 3을 수강 중에 쿠버네티스 관련 서적을 발견해 읽어보며 공부하고 있습니다. worker-node 는 중요하지 않나요 ? kubelet는 pod spec을 받아서 cri로 컨테이너 실행을 담당한다, 스케줄링 관리한다, 로 이해했는데 아직까진 워커 노드에 대한 개념이 없어서, 실무에서는 깊게 파고 들어야 사용하는 것이다 (굳이 안써도 되지만 쓰면 더 효율적이다?) 인 것일까요?? sprint 4나 대세는 쿠버네티스를 봐야 이해가 될까요? 블로그에 https://cafe.naver.com/kubeops/496 이부분이 있길래 문의드립니다 ! gke관련 저는 클라우드 경험 없는, 온프레미스 경력만 있는 웹 개발자입니다. 그러다 보니 이해를 못했는 이슈인 것 같은데, 구인 사이트를 보면 종종 devops를 클라우드 + 온프레미스를 같이 진행하는 공고를 많이 봤습니다. 그런 경우에는 데이터를 어떻게 관리를 할까요? 온프레미스같은 경우에는 pv로 진행을 하면 되지만, 클라우드는 자체 pvc가 있어서 같은 폴더에서 관리하면 수기로 작성한 pvc파일이 먹혀서 작동하지 않더라고요 . (같은 곳에서 관리를 하니, 온프레미스에서 셋팅한 pvc를 자꾸 무시합니다.) 그리고 volum을 공유하지 못한다고 알고 있는데 데이터는 어떻게 관리할까요 ?? (업무적인 것이 아니라 개인 공부중입니다 ..) [ 👍 좋은 질문을 했을 때 좋은 답변이 돌아 옵니다] 1. 실습 중 본인의 환경이 가이드와 다른 부분이 있었다면 말씀해주세요. 2. 해당 문제의 발생 빈도(재설치 여부)와 문제 해결을 위해 시도해본 케이스를 말씀해 주시면 원인 파악에 큰 도움이 됩니다. 3. 에러 메시지만 봐서는 저도 모르는 경우가 많아요. 그전에 했던 작업이 포함된 캡쳐 화면도 부탁 드려요. 4. 영상 내용에 대한 질문 시 해당 시간을 같이 올려 주시면 답변을 드리는 시간이 더 빨라집니다. 5. 긴 로그는 제 메일로 보내주세요. ( k8s.1pro@gmail.com ) 6. 카페 [ 강의 자료실 ]에도 많은 질문과 답변들이 있어요!
m4 mac mini로 k8s 구성을 따라했는데 namespace kubernetes-dashboard의 모든 파드와 kube-system namespace에 coredns 2개의 파드 그리고 metrics파드가 pending상태로 지속되고 node들은 전부 notready상태에서 멈춰있습니다 처음에는 제가 구성을 잘못했나 싶어서 utm에 vm을 지웠다가 다시 구성하기를 반복했는데 할때마다 똑같이 안되어서 질문드립니다
안녕하세요 현재 회사에서 IDC 온프레미스환경에 쿠버네티스 도입하기로 결정되었습니다. 다만 인프라관련 인원이 없는상황이라 어쩔수없이 주니어인 제가 당장 인프라 구조를 구축해야하는데 쿠버네티스가 어려운 기술이다보니 당장 도입하기보다 공부하고 점진적 도입을 하려는데 도커로 먼저 시스템을 서버에 배포해놓고 추후에 쿠버네티스를 점진적으로 도입이 유연하게 되는지 궁금합니다. 또한 DBMS올리는건 로컬과 컨테이너 중 보통 어느곳에 올리실까요?
안녕하세요 Authorization RoleBinding 실습 강의를 수강하던 중 질문이 있어 글 남깁니다. https://cafe.naver.com/kubeops/525 ※ 앞 시간에 생성해 놓은 Namespace(nm-01), Pod(pod-1), ServiceAccount(default), Secret(nm-01) 그대로 사용 해당 게시글에서 와 같이 nm-01, pod-1, serviceAccount, Secret 를 생성해둔 상태에서 Role , RoleBinding 을 생성하였습니다. 생성한 내용은 예제에 나와있는 내용을 그대로 복사했습니다. 쿠버네티스 대시보드 -> Secret 를 가보니 네임스페이스 (=nm-01) 에 대한 정보가 저장되어있고 실제로 해당 Secret 도 nm-01 에서 나온 정보가 맞습니다. 그래서 해당 Secret 에있는 Token 값을 이용하여 아래 API 를 호출했지만, 403 forbidden 에러가 발생하며 파드 정보가 조회되질 않습니다. https://192.168.56.30:6443/api/v1/nodes/namespaces/nm-01/pods 에러의 응답값은 아래와 같습니다. { "kind": "Status", "apiVersion": "v1", "metadata": {}, "status": "Failure", "message": "nodes \"namespaces\" is forbidden: User \"system:serviceaccount:nm-01:default\" cannot get resource \"nodes/nm-01\" in API group \"\" at the cluster scope", "reason": "Forbidden", "details": { "name": "namespaces", "kind": "nodes" }, "code": 403 } 에러 내용을 보면 API Group 내의 nodes/nm-01 정보를 조회할수 없다고 나오는 것 같은데 어떤 부분이 문제인지 파악이 어렵습니다.
재시도조차 실패한 메시지들은 dlt 로 이동하게 되고 이 메시지들에 대한 처리를 위해 @KafkaListner 를 사용해서 처리하는 방법을 보여주셨는데요. 리서치를 하다보니 @DltHandler 기능이 있는걸 알게됐습니다. dlt 를 처리한다는 부분에서 @DltHandler 가 좀 더 어울릴거 같은 느낌인데 @KafkaListener 로 처리하신 특별한 이유가 있으실까요?
kafka @RetryableTopic 에 대해 알아보다보니 궁금한점이 생겨 질문 드립니다. @RetryableTopic 가 없어도 retry 는 기본적으로 진행하는거 같은데요. 제가 알아본 바로는 아래와 같은 차이점이 있는것 같았습니다. @RetryableTopic 을 사용하지 않으면 'dlt' 로 메시지가 이동되지 않는다. @RetryableTopic 을 사용하면 'dlt' 토픽이 없는 경우 자동으로 만들어주고 dlt 토픽으로 메시지를 이동시켜준다. @RetryableTopic 을 사용하지 않으면 재시도는 하지만 재시도동안에는 partition 을 blocking 한다 (= 블로킹). @RetryableTopic 을 사용하면 재시도 하기전에 retry 토픽으로 이동시키고 consumer 의 스레드를 blocking 하지 않고 별도 스레드에서 retry 를 진행한다. (= 논블로킹) 강좌에서는 retry 중에는 partition 이 blocking 된다고 하셨는데, 그 부분과 좀 다른거 같아서 문의 드립니다..! 만약 @RetryableTopic 이 논블로킹으로 별도 스레드에서 진행이 된다면 순서보장이 안되는거라서 순서보장이 필요하다면 이걸 사용하면 안되는게 아닌가 싶습니다.
예제에서는 StringSerializer 와 StringDeserializer 를 사용하도록 설정하고 ObjectMapper 를 통해 직렬화/역직렬화를 해주셨는데요. 혹시 JsonSerializer 와 JsonDeserializer 를 사용하지 않는 이유가 있을까요? 그리고, JsonDeserializer 를 사용하든 StringDeserializer 를 사용하든 역직렬화를 할 때 실패하게 되면 offset commit 이 되지 않고 재시도를 하는동안 해당 message 의 partition 은 blocking 된다고 이해하고 있는데 맞을까요? 이 경우에도 retry 이후, 해결 안되면 dlt topic 으로 이동하는게 맞을까요?
강사님 안녕하세요. 잘 배우고 있습니다. 강의를 보다가 든 생각인데 실제로 Secret을 현업에서 관리하게 될 때는 아래와 같은 구조로 이뤄질 것 같은데 맞나요? 신규 피쳐에 새로운 시크릿이 필요하다. 개발자가 devops 팀에 추가를 요청한다. devops 에서 마스터 노드로 접근하여 kubectl 을 통해 secret 을 생성한다. 해당 사항을 개발자가 노티 받고, 배포를 진행한다. SealedSecret이라는 걸 알게 되었는데, 이걸 이용하면 개발자가 직접 추가할 수도 있고, git에도 비대칭 암호화된 값이 남아 안전하다고 합니다. 보통 SealedSecret 방식을 적용하여 프로젝트를 운영하나요, 아니면 책임 관리 소재에서 저 과정을 거치나요?
리서치를 하다보니 실무에서는 auto.create.topics.enable=false 설정을 사용하는게 좋다는 글을 많이 보게 되었습니다. 네이밍 컨벤션이나 예상치 못한 topic 의 생성 등을 방지하기 위함으로 이해했는데요. 그럼, xxx.dlt 와 같은 topic 들도 직접 생성을 해줘야 하는지 궁금합니다. 그리고, 실제로 실무에서 해당 설정을 많이 사용하는지 또한 궁금합니다 🙂
consumer 쪽에서 이메일 발송 로직 대신 Thread.sleep(3000) 을 써주셨는데요. 이 말은, consumer 쓰레드 자체에서 이메일 보내는 로직을 실행한다고 가정해서 그런거라고 이해했습니다. 개인적으로 consumer 는 message 를 consume 만 하고, 실제 비즈니스 로직 (email send) 는 별개의 쓰레드로 async 하게 동작하는게 더 효율적이라고 생각이 되는데요. email 발송 로직을 별개의 쓰레드로 할 때와 현재처럼 consumer 쓰레드에서 할 때 차이점 및 주의해야할 점 (ex. offset 수동 커밋 등) 이 있을까요?
concurrency 관련하여 궁금한점이 있습니다. 하나의 topic (ex. email.send) 에 5개의 파티션이 있다고 가정. 같은 groupId 로 지정된 consumer 2 (A, B)개가 있고 각각 concurrency=3 으로 설정이 되어 있다고 가정 이런 경우, 같은 groupId 내의 컨슈머는 같은 partition 을 consume 할 수 없으니 1개의 thread 는 동작하지 않게 된다고 보면 될까요? A-1 thread ===> partition 1 A-2 thread ===> partition 2 A-3 thread ===> partition 3 B-1 thread ===> partition 4 B-2 thread ===> partition 5 B-3 thread (동작안함) ====> x 추가로 실무에서는 일반적으로 concurrency 옵션을 사용하는지 궁금합니다.
[ 👍 좋은 질문을 했을 때 좋은 답변이 돌아 옵니다] 1. 실습 중 본인의 환경이 가이드와 다른 부분이 있었다면 말씀해주세요. 실습의 내용 그대로 따라가고있습니다 2. 해당 문제의 발생 빈도(재설치 여부)와 문제 해결을 위해 시도해본 케이스를 말씀해 주시면 원인 파악에 큰 도움이 됩니다. Virtualbox, Vagrant 다시 삭제 후 재설치 하여도 동일한 문제가 발생합니다 3. 에러 메시지만 봐서는 저도 모르는 경우가 많아요. 그전에 했던 작업이 포함된 캡쳐 화면도 부탁 드려요. 4. 영상 내용에 대한 질문 시 해당 시간을 같이 올려 주시면 답변을 드리는 시간이 더 빨라집니다. ssh로 접근은 가능하지만 현재 쿠버네티스가 깔려있지 않다고 나옵니다 k get pods -A 이 명령어를 사용할 수 없어요 5. 긴 로그는 제 메일로 보내주세요. ( k8s.1pro@gmail.com ) 6. 카페 [ 강의 자료실 ]에도 많은 질문과 답변들이 있어요!
안녕하세요. 강사님 강의내용에 덕분에 많은 도움을 얻고 있습니다. 질문1. 강의수강중 오타가 아닌가 확인이 필요하여 질문드립니다. 강의 service-headless,endpoint, externalName 편의 9:40 쯤에 EndPoint내에 주소가 172.217.161.68(80) 으로 표현됐습니다. Github의 주소는 185.199.110.153(80) 으로 그림이 표현됐는데 둘을 일치시키도록 교안을 수정해야되는지 궁금합니다. 질문2. Pod Network는 20.96.0.0/12 으로 소개를 해주셨습니다. 실제 vagrant 소스에는 12가 아닌 16으로 되있고요. 이 주소형식은 공인IP형식으로 보이는데 사설IP형식을 따르는 ServiceNetwork 10.96.0.0/12 와 달리 공인IP형식인 이유가 궁금합니다.