k8s
-
Ingress traefik을 이용한 nginx http 배포K8S 2022. 10. 25. 21:00
틀린 내용이 있을 수도 있습니다! 틀린 내용이 있다면 댓글로 달아주시면 감사하겠습니다! 개요 ingress를 사용하기 위해 nginx-controller 대신 traefik을 사용한다. nginx를 traefik ingress를 통해서 배포한다. ingress는 http로 배포한다. 다음 포스팅에서 https로 배포할 것이다. 구성 1. loadbalancer를 사용할 수 없는 환경인 경우, traefik service를 nodeport로 배포해서 ingress를 사용한다. 2. lb를 사용할 수 있다면, traefik service를 loadbalancer로 사용한다. 이외에도 여기서는 다루지 않지만, traefik pod를 hostnetwork로 사용해서 배포할 수 있을 것이다. 1. NodePort..
-
Helm 자주 사용하는 커맨드 정리메모 및 기타 2022. 9. 20. 15:16
helm 3 설치하기 curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 > get_helm.sh chmod 700 get_helm.sh ./get_helm.sh helm repo 추가하기 helm repo add [repo 이름] [repo url] ex) helm repo add traefik https://helm.traefik.io/traefik repo update하기 helm repo update 압축 풀린 helm repo 다운 받기 helm pull [repo 이름]/[repo에서 다운 받을 패키지명]--untar ex) helm pull traefik/traefik --untar helm chart 설치하기..
-
분산 환경에서의 장애감지: 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..
-
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..
-
kubectl Image를 이용한 pod 내에서 secret 생성하기K8S 2022. 8. 5. 16:05
틀린 내용이 있을 수도 있습니다! 틀린 내용이 있다면 댓글로 달아주시면 감사하겠습니다! pod내에서 secret을 생성해야 할 일이 있어서 나중에 내가 다시 보려고 포스팅 한다. 명시할 리소스들은 다음과 같다. Service account Role Role binding Pod apiVersion: v1 kind: ServiceAccount metadata: name: kubectl apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: create-secret-role rules: - apiGroups: [""] resources: ["secrets"] verbs: ["create", "list"] apiVersion: rbac.auth..