sysnet4admin / _Book_k8sInfra

< 컨테이너 인프라 환경 구축을 위한 쿠버네티스/도커 >
431 stars 174 forks source link

< 쿠버네티스 | 젠킨스를 통한 CI/CD가 동작하지 않는 건 > #2

Closed sysnet4admin closed 3 years ago

sysnet4admin commented 3 years ago

문제 정의:

젠킨스를 통해서 앱 배포시에 pod가 계속 생성 및 error를 반복하는 현상

[root@m-k8s ~]# kubectl get pods
NAME                                             READY   STATUS              RESTARTS   AGE
default-0j4bp                                    0/1     Error               0          17m
default-0nfl0                                    0/1     Error               0          21m
default-12j74                                    0/1     Error               0          10m
[생략] 

영향받는 단원:

5.4, 5.5

문제 원인:

젠킨스 kubernetes-client-api 버전이 4.11.1에서 5.4.1로 올라가면서, 기존에 젠킨스 버전(2.249.3)에서 사용하는 쿠버네티스 플러그인(1.27.7)과 호환되지 않음

가능한 해결방안:

  1. 쿠버네티스 플러그인 버전을 1.30으로 올린다.

    젠킨스 버전도 올려야 하고 영향도가 너무 큼 변경되는 내용을 모두 추적하고 관리할 수 있는 경우 사용 가능 하지만 책에는 이와 같이 제공하기 어려움 (❌ )

  2. 쿠버네티스 플러그인 마이너 버전(1.27.8)이 나올때까지 기다린다.

    예상버전이면 현재 계획은 따로 없음. 현재 PR이 아래의 #1008에서 진행 중임 즉 언제 나올지 모름 (🔥 )

  3. 메타 데이터를 JSON 포맷과 같은 형태로 배포하여 호환성을 맞춤

    해결 예정일: 7월 3일(일) 이전 현재 가장 유력한 해결책(✅ )

현재 상태 복구 및 진행 가이드:

  1. 젠킨스에서 정상적으로 동작하지 않는 작업을 삭제한다.
  2. 젠킨스 에이전트 pod를 삭제한다.
    [root@m-k8s ~]# kubectl delete pod -l jenkins/jenkins-jenkins-slave=true
      pod "default-057r4" deleted
      pod "default-10cjb" deleted
      pod "default-31sp6" deleted
      pod "default-33jh2" deleted
      [생략]
    1. 5.4, 5.5장을 일단 진행하지 않고 6장을 우선 진행한다. 그리고 7월 3일 이후로 5.4과 5.5장을 진행

관련 PR들

관련 소스

관련 로그

  [root@m-k8s ~]# k logs default-241qg
  Warning: SECRET is defined twice in command-line arguments and the environment variable
  Warning: AGENT_NAME is defined twice in command-line arguments and the environment variable
  Jun 23, 2021 9:11:59 PM hudson.remoting.jnlp.Main createEngine
  INFO: Setting up agent: default-241qg
  Jun 23, 2021 9:12:00 PM hudson.remoting.jnlp.Main$CuiListener <init>
  INFO: Jenkins agent is running in headless mode.
  Jun 23, 2021 9:12:01 PM hudson.remoting.Engine startEngine
  INFO: Using Remoting version: 4.3
  Jun 23, 2021 9:12:01 PM org.jenkinsci.remoting.engine.WorkDirManager initializeWorkDir
  INFO: Using /home/jenkins/remoting as a remoting work directory
  Jun 23, 2021 9:12:01 PM org.jenkinsci.remoting.engine.WorkDirManager setupLogging
  INFO: Both error and output logs will be printed to /home/jenkins/remoting
  Jun 23, 2021 9:12:03 PM hudson.remoting.jnlp.Main$CuiListener status
  INFO: Locating server among [http://192.168.1.13]
  Jun 23, 2021 9:12:03 PM org.jenkinsci.remoting.engine.JnlpAgentEndpointResolver resolve
  INFO: Remoting server accepts the following protocols: [JNLP4-connect, Ping]
  Jun 23, 2021 9:12:03 PM org.jenkinsci.remoting.engine.JnlpAgentEndpointResolver resolve
  INFO: Remoting TCP connection tunneling is enabled. Skipping the TCP Agent Listener Port availability check
  Jun 23, 2021 9:12:03 PM hudson.remoting.jnlp.Main$CuiListener status
  INFO: Agent discovery successful
    Agent address: jenkins-agent
    Agent port:    50000
    Identity:      b3:d3:63:0e:24:8f:5f:33:c0:ba:18:ca:90:f6:99:66
  Jun 23, 2021 9:12:03 PM hudson.remoting.jnlp.Main$CuiListener status
  INFO: Handshaking
  Jun 23, 2021 9:12:03 PM hudson.remoting.jnlp.Main$CuiListener status
  INFO: Connecting to jenkins-agent:50000
  Jun 23, 2021 9:12:03 PM hudson.remoting.jnlp.Main$CuiListener status
  INFO: Trying protocol: JNLP4-connect
  Jun 23, 2021 9:12:05 PM hudson.remoting.jnlp.Main$CuiListener status
  INFO: Remote identity confirmed: b3:d3:63:0e:24:8f:5f:33:c0:ba:18:ca:90:f6:99:66
  Jun 23, 2021 9:12:05 PM org.jenkinsci.remoting.protocol.impl.ConnectionHeadersFilterLayer onRecv
  INFO: [JNLP4-connect connection to jenkins-agent/10.106.152.76:50000] Local headers refused by remote: Unknown client name: default-241qg
  Jun 23, 2021 9:12:05 PM hudson.remoting.jnlp.Main$CuiListener status
  INFO: Protocol JNLP4-connect encountered an unexpected exception
  java.util.concurrent.ExecutionException: org.jenkinsci.remoting.protocol.impl.ConnectionRefusalException: Unknown client name: default-241qg
          at org.jenkinsci.remoting.util.SettableFuture.get(SettableFuture.java:223)
          at hudson.remoting.Engine.innerRun(Engine.java:743)
          at hudson.remoting.Engine.run(Engine.java:518)
  Caused by: org.jenkinsci.remoting.protocol.impl.ConnectionRefusalException: Unknown client name: default-241qg
          at org.jenkinsci.remoting.protocol.impl.ConnectionHeadersFilterLayer.newAbortCause(ConnectionHeadersFilterLayer.java:378)
          at org.jenkinsci.remoting.protocol.impl.ConnectionHeadersFilterLayer.onRecvClosed(ConnectionHeadersFilterLayer.java:433)
          at org.jenkinsci.remoting.protocol.ProtocolStack$Ptr.onRecvClosed(ProtocolStack.java:816)
          at org.jenkinsci.remoting.protocol.FilterLayer.onRecvClosed(FilterLayer.java:287)
          at org.jenkinsci.remoting.protocol.impl.SSLEngineFilterLayer.onRecvClosed(SSLEngineFilterLayer.java:172)
          at org.jenkinsci.remoting.protocol.ProtocolStack$Ptr.onRecvClosed(ProtocolStack.java:816)
          at org.jenkinsci.remoting.protocol.NetworkLayer.onRecvClosed(NetworkLayer.java:154)
          at org.jenkinsci.remoting.protocol.impl.BIONetworkLayer.access$1500(BIONetworkLayer.java:48)
          at org.jenkinsci.remoting.protocol.impl.BIONetworkLayer$Reader.run(BIONetworkLayer.java:247)
          at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
          at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
          at hudson.remoting.Engine$1.lambda$newThread$0(Engine.java:117)
          at java.lang.Thread.run(Thread.java:748)
          Suppressed: java.nio.channels.ClosedChannelException
                  ... 7 more

  Jun 23, 2021 9:12:05 PM hudson.remoting.jnlp.Main$CuiListener error
  SEVERE: The server rejected the connection: None of the protocols were accepted
  java.lang.Exception: The server rejected the connection: None of the protocols were accepted
          at hudson.remoting.Engine.onConnectionRejected(Engine.java:828)
          at hudson.remoting.Engine.innerRun(Engine.java:768)
          at hudson.remoting.Engine.run(Engine.java:518)
sysnet4admin commented 3 years ago

해결책

설치되는 플러그인 목록과 버전을 고정함으로서 문제를 해결하였습니다. 설치되는 플러그인 목록은 다음과 같습니다. 자세한 내용은 여기로

그림 5-26 젠킨스 플러그인 관리 jenkins2

부작용

이에 따른 부작용(Side Effect)은 크게 2가지입니다.

  1. 일부 플러그인이 UNAVAILABLE로 표시됨

    • 설치 시에 다음과 같이 일부 플러그인이 UNAVAILABLE로됩니다.
    • 즉 현재 랩에서 필요한 플러그인만을 설치합니다.
    • 이를 통해 안정적인 랩 환경을 유지할 수 있습니다. 그림 5-26 젠킨스 플러그인 관리
  2. 젠킨스 플러그인 버전이 고정됨

    • 젠킨스 플러그인 버전이 고정되어 있기 때문에 젠킨스 저장소에서 해당 버전이 삭제되면 동작하지 않습니다.
    • 하지만 저희가 계속 실습이 돌아가도록 변경 내용을 추척 관찰해서 다시 고쳐 놓도록 하겠습니다. :)

해당 이슈는 1주일간 모니터링 된 후에 Close 됩니다. 감사합니다. 조 훈, 심근우, 문성주 드림