분류 전체보기
-
분산 환경에서의 장애감지: Gossip Protocol시스템 설계 2022. 8. 28. 17:43
[가상 면접 사례로 배우는 대규모 시스템 설계]를 읽고 작성하는 포스트 입니다. 틀린 내용이 있을 수도 있습니다! 틀린 내용이 있다면 댓글로 달아주시면 감사하겠습니다! 분산 시스템에서는 보통 두 대이상의 서버가 똑같이 한대의 서버에 장애가 발생한 것을 감지해야 해당 서버에 장애가 발생했다고 간주한다. 모든 노드 사이에 멀티캐스팅 채널을 두어, 노드의 장애를 발생할 수 있지만 이는 노드 수가 늘어나면 비효율적이다. 이러한 분산 환경에서 장애를 감지할 때는 gossip protocol을 이용하는 것이 효율적이다. 동작원리 - 각 노드는 멤버쉽 목록을 유지 - 멤버쉽 목록은 멤버 ID와 heartbeat counter 쌍의 목록을 나타냄 - 각 노드는 주기적으로 자신의 heartbeat counter를 증가시..
-
분산 환경에서의 일관성 처리: 정족수 합의시스템 설계 2022. 8. 28. 15:07
[가상 면접 사례로 배우는 대규모 시스템 설계]를 읽고 작성하는 포스트 입니다. 틀린 내용이 있을 수도 있습니다! 틀린 내용이 있다면 댓글로 달아주시면 감사하겠습니다! 다중화된 노드에 데이터를 분산 저장할 때, 정족수 합의 알고리즘을 이용해서 일관성 수준을 조절한다. N = 사본의 갯수 W = 쓰기 연산에 대한 정족수로 쓰기 연산이 성공한 것으로 간주되려면, 적어도 W개의 서버로부터 쓰기 연산이 성공했다는 응답을 받아야 한다. R = 읽기 연산에 대한 정족수로 읽기 연산이 성공한 것으로 간주되려면, 적어도 W개의 서버로부터 읽기 연산이 성공했다는 응답을 받아야 한다. 예시 다음은 N=3일 때 key1을 통해서 val1을 서버에 저장할 때다. 참고로 중재자는 클라이언트와 노드 사이의 Proxy이며, 노드가..
-
local 볼륨 동적 프로비저닝을 위한 PV, PVC 예제K8S 2022. 8. 26. 17:27
틀린 내용이 있을 수도 있습니다! 틀린 내용이 있다면 댓글로 달아주시면 감사하겠습니다! 엄밀히 말하면 동적 프로비저닝은 아니다! 하지만 개인 클러스터에서 default storage class를 이용한 동적 프로비저닝이 필요해서 비슷하게나마 흉내내기 위해 사용하는 예제 파일이다. 노드 하나를 정해서 다음과 같이 볼륨 역할을 할 디렉터리를 3개 만들어준다. # pv1 mkdir -p /data/volumes/pv1 chmod 777 /data/volumes/pv1 # pv2 mkdir -p /data/volumes/pv2 chmod 777 /data/volumes/pv2 # pv3 mkdir -p /data/volumes/pv3 chmod 777 /data/volumes/pv3 디렉터리를 3개 만들었으므로..
-
defaultMode Permission 이슈Trouble Shooting 2022. 8. 22. 09:54
틀린 내용이 있을 수도 있습니다! 틀린 내용이 있다면 댓글로 달아주시면 감사하겠습니다! K8S에서는 시크릿 볼륨을 마운트할 때 다음과 같이 defaultMode를 통해서 권한을 지정해줄 수 있다. apiVersion: v1 kind: Pod metadata: name: mypod spec: containers: - name: mypod image: redis volumeMounts: - name: foo mountPath: "/etc/foo" volumes: - name: foo secret: secretName: mysecret defaultMode: 0400 apiVersion: v1 kind: Pod metadata: name: mypod spec: containers: - name: mypod i..
-
PV, PVC, SC 사용시 Tip!K8S 2022. 8. 17. 15:39
틀린 내용이 있을 수도 있습니다! 틀린 내용이 있다면 댓글로 달아주시면 감사하겠습니다! 1. StorageClass default로 설정하기 storage class에 다음과 같은 annotation을 추가하여 해당 storage class를 default로 설정할 수 있다. apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: annotations: storageclass.kubernetes.io/is-default-class: 'true' 만약 default storage class를 해제하고 싶다면, 이를 false로 변경한다. apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: annotati..
-
내가 자주 사용하는 git command메모 및 기타 2022. 8. 13. 16:26
틀린 내용이 있을 수도 있습니다! 틀린 내용이 있다면 댓글로 달아주시면 감사하겠습니다! 깃 사용자 및 이메일 설정하기 git config user.name "seung" git config user.email "sjoh0704@daum.net" 리모트 레포지토리에 있는 branch 확인하기 git branch -r 리모트 레포지토리에 있는 브랜치를 다운받은 후, 해당 브랜치로 이동하기 git checkout -t origin/{branch명} 작업 내용 임시저장하기 git stash 임시 저장하는 작업 내용 리스트 가져오기 git stash list 가장 최근에 임시로 저장한 작업으로 이동하기 git stash apply git 에디터 vim으로 변경하기 git config --global core.ed..
-
Pod Status에 Error log만 찍기K8S 2022. 8. 8. 00:23
틀린 내용이 있을 수도 있습니다! 틀린 내용이 있다면 댓글로 달아주시면 감사하겠습니다! operator를 만들던 중, pod에서 발생한 error log 값을 추출해야 했는데 이 내용을 포스팅으로 남겨놓는다. pod status 하위에는 container가 어떻게 종료되었는지에 대한 명세가 적혀 있다. containerStatuses.state.terminated 하위 값에 stdout, stderr에 따른 결과가 적혀 있는데, 특별한 설정을 하지 않는다면 다음과 같이 자세하게 나오지 않는다. status: conditions: ~~ state: terminated: containerID: docker://dd42590ac0d1d05c8675fafb3f1c32cb7256d74a6ab5bf96ec3928c..
-
go module을 pkg.go.dev에 등록 및 versioning하기메모 및 기타 2022. 8. 7. 11:34
틀린 내용이 있을 수도 있습니다! 틀린 내용이 있다면 댓글로 달아주시면 감사하겠습니다! 이번 포스팅에서는 내가 go로 작성한 모듈 패키지를 pkg.go.dev에 등록하고, versioning 하는 방법을 다루었다. pkg.go.dev 등록하기, major 버전이 아닌 버전 업그레이드하기, major 버전 업그레이드 하기로 구성했다. major version을 분리하여 구성한 이유는 go에서는 major 버전을 변경하면, pkg 경로에 v2라는 prefix가 추가되어야 하기 때문이다. 예를 들면, github.com/sjoh0704/go-module-test에서 github.com/sjoh0704/go-module-test/v2가 되어야 하기 때문에 이를 구분해야 한다. 우선 패키지를 pkg.go.dev에..