인프런 커뮤니티 질문&답변

피이백님의 프로필 이미지
피이백

작성한 질문수

쿠버네티스 어나더 클래스 (지상편) - Sprint 1, 2

📝 모니터링 설치 - Loki-Stack (💻 실습포함)

application 응용과제 1번

작성

·

205

1

startupProbe의 실패기간을 성공기간보다 짧게 가져가기위해서

이렇게 변경해주었을때 위와같은 오류가 발생했습니다.

오류결과

successThreshold와 failureThreshold를 변경할 수 없다는 거 같습니다.

답변 3

1

피이백님의 프로필 이미지
피이백
질문자

Internal server error

Pod "api-tester-1231-6f49f78859-qvmn8" is invalid: spec: Forbidden: pod updates may not change fields other than spec.containers[*].image,`spec.initContainers[*].image`,`spec.activeDeadlineSeconds`,`spec.tolerations` (only additions to existing tolerations),`spec.terminationGracePeriodSeconds` (allow it to be set to 1 if it was previously negative)   core.PodSpec{    Volumes: {{Name: "files", VolumeSource: {PersistentVolumeClaim: &{ClaimName: "api-tester-1231-files"}}}, {Name: "secret-datasource", VolumeSource: {Secret: &{SecretName: "api-tester-1231-postgresql", DefaultMode: &420}}}, {Name: "kube-api-access-zcbck", VolumeSource: {Projected: &{Sources: {{ServiceAccountToken: &{ExpirationSeconds: 3607, Path: "token"}}, {ConfigMap: &{LocalObjectReference: {Name: "kube-root-ca.crt"}, Items: {{Key: "ca.crt", Path: "ca.crt"}}}}, {DownwardAPI: &{Items: {{Path: "namespace", FieldRef: &{APIVersion: "v1", FieldPath: "metadata.namespace"}}}}}}, DefaultMode: &420}}}},    InitContainers: nil,    Containers: []core.Container{    {    ... // 12 identical fields    LivenessProbe: &{ProbeHandler: {HTTPGet: &{Path: "/liveness", Port: {IntVal: 8080}, Scheme: "HTTP"}}, TimeoutSeconds: 1, PeriodSeconds: 10, SuccessThreshold: 1, ...},    ReadinessProbe: &{ProbeHandler: {HTTPGet: &{Path: "/readiness", Port: {IntVal: 8080}, Scheme: "HTTP"}}, TimeoutSeconds: 1, PeriodSeconds: 10, SuccessThreshold: 1, ...},    StartupProbe: &core.Probe{    ... // 3 identical fields    PeriodSeconds: 5,    SuccessThreshold: 1, -  FailureThreshold: 5, +  FailureThreshold: 2,    TerminationGracePeriodSeconds: nil,    },    Lifecycle: nil,    TerminationMessagePath: "/dev/termination-log",    ... // 6 identical fields    },    },    EphemeralContainers: nil,    RestartPolicy: "Always",    ... // 28 identical fields   }

 

failureThreshold를 수정할때마다 이러한 오류가 발생합니다.


피이백님의 프로필 이미지
피이백
질문자

아 혹시 쿠버네티스대시보드 에서

파드가아닌 디플로이먼트에서 수정해야하는 걸까요?

일프로님의 프로필 이미지
일프로
지식공유자

아..[쿠버네티스 대시보드 -> 파드 -> 편집 -> startupProbe] 이 내용을 보니 원인을 알겠네요.

제가 다른 일을 하면서 답변을 드리다 보니, 질문을 급하게 보고 좀 즉흥적으로 답변을 드린 것 같습니다. 그런 부분은 사과드리고요. 일단 Pod를 수정하시면 안됩니다. ^^ Deployment를 수정하셔야 되요.

그리고 답변 드린 내용을 정정하자면 startupProbe의 successThreshold 수치도 2로 변경 할 수 있습니다. 두 번 성공해야 잘 기동된 걸로 간주한다는 셈인거죠.

 

 

1

피이백님의 프로필 이미지
피이백
질문자

startupProbe가 한번이라도 응답이 오면 성공으로 간주.

즉, startupProbe의 failureThreshold를 successThreshold보다 짧은 기간(successThreshold가 1이니까 더 짧게)을 설정하는게 맞을까요?

그런데 저는 쿠버네티스 대시보드 -> 파드 -> 편집 -> startupProbe를 수정하면 저런 에러가 뜨더라구요.

일프로님의 프로필 이미지
일프로
지식공유자

Threshold는 기간이 아닌 횟수입니다.

그리고 startupProbe는 successThreshold이 1로 고정이기 때문에 한번이라도 성공 응답이 오면 App이 정상적으로 기동 됐다고 판단하는 거고요. 이 수치는 변경할 수가 없어요.

반면에 Application이 무거워서 기동 시간이 오래 걸린다면, failureThreshold의 수치가 작을 때 App이 무한 재기동 될 수 있기 때문에, failureThreshold를 늘려야 됩니다.

그래서 결국 startupProbe의 successThreshold이 1은 변경하면 안되는 수치가 되요.

만약 강의를 들으셨는데 아직 개념이 헷갈리시면, 한번 더 강의를 들어보시길 권해드릴께요.

아, 그리고 응용과제 1번은 startupProbe에서 failureThreshold의 수치만 낮추면 됩니다 :)

0

일프로님의 프로필 이미지
일프로
지식공유자

startupProbe은 한번만 성공하면 끝나는 속성입니다. 그렇기 때문에 success는 1 말고는 다른 값이 올 수가 없어요. 반면에 failure는 1로 변경할 수 있고요.

해당 속성을 변경하는 목적에 대해서 좀 더 상세하게 설명 가능할까요? "startupProbe의 실패기간을 성공기간보다 짧게 가져가기위해서"라는 게 어떤 의미인지 잘 이해가 안되서요.

피이백님의 프로필 이미지
피이백

작성한 질문수

질문하기