[모르고리즘 8] container 대파티

LILO Ghim·2022년 5월 15일
0

야믈을 지어다가 며칠을 먹었다



"우리는 무슨 기준으로 배포를 해야 할까요?"라는 질문에서 시작해서,
.gitlab-ci.yml에 이르기까지


공부를 하는 과정 중에
분명한 것은(분명히 내가 몰랐던 것은),
CI/CD가 문제가 아니라(이것도 뭐 몰랐던 건 맞음)
Docker를, 정확히는 Docker imagecontainer가 무엇인지 하는 것에 있었던 것 같다.


또,
깃랩 도큐먼트를 수십 번을 들락날락하며 페이지를 옮겨다니며,
("로봇이 아닙니까" 물어볼 법도)
도큐먼트 지옥에 빠져있는 동안,

내가 확실하게 아는 것(기정사실)을 고정해 두고,
추론을 해 나가야 하는 과정에서,
그 것을 어렵게, 힘들게, 괴롭게했던 키워드는
image container docker service instance
요노마들이었는데,

어떤 상황에서 누가 어디서 무엇을 하는 누구인지를 알아내는 것은
여간 쉬운 일이 아니었다

@그림 한 오천장 그린 듯
@찐 막 찐찐찐 막.....


GitLab Runner

GitLab CI/CD에서 runner는 run jobs 하는데, executor로 하여금 gitlab-ci.yml의 script를 실행시킨다...는 알겠는데,

  • runner의 정체는 무엇이고, 어디에 있는건지
  • runner는 repo를 어떻게 알고 내가 push한 코드를 빌드 하는건지
  • config.toml은 또 뭔지
  • 왜 명령어가 docker run 인지
  • docker in docker는 뭔데 이 docker는 누구고 이 docker는 누군지
  • 그 docker는 image인지 container인지 runner인지 executor인지
  • executor는 왜 필요하고 어디에 있는건지
  • executor가 쓴다는 image는 또 누군지
  • repo의 code는 누가 클론해서 executor에게 주는지
  • runner는 배포할 인스턴스를 어떻게 알고 배포 하는지

도큐먼트 무한 뺑뺑이를 돌리고 나서,
runner를 register하고,
config.toml를 보면 유추 해 볼 수 있는데,
(응 너 말고 니 사수 ^^)

#runner register 

docker run --rm -v /srv/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register \
	--non-interactive \
	--executor "docker" \
	--docker-image docker:latest \
	--url "https://gitlab.com/" \
	--registration-token "니 토큰" \
	--description "docker-runner" \
	--tag-list "dev" \
	--docker-privileged 
  • runnergitlab/gitlab-runner docker image로 띄워지는 container
  • (만약 executor로 docker를 선택했다면)executor는, docker:latest docker image로 띄워지는 또 container
    • +) runner는 사실상 container로 script의 docker command를 왜 execute 할 수 없는지(docker가 설치되어 있는 machine의 shell처럼) 알 수 없지만,
      (공식문서에 runner는 못 한다고 적혀있는 것을 발견함... 제발 처음부터 알려줘 제발... 첫 줄부터 알려주면 좋았잖아)
      그래서 executor가 필요했다
  • service는 또또 docker:dind docker image로 띄워지는 또또또 container로 executor가 script를 실행시킬 때, 이용할 놈으로 build할 때만 있었다 없어지는 놈

죽일까 흫 ^^

container 대잔치였다

그리고, runner를 install & register 하는 일은 결국,

GitLab CI/CD
어떤 runner가 할 것이고,
그 runner는 내 repo를 아는 놈이고,
executor는 누구라는,

config.toml를 만드는 일
docker container 안에서,,,


부록

privileged flag

아니 privileged로 register해야 된다고 하면서(정확히는 runners.docker를)

  • interactive mode(-it)에서는 나한테 안 물어봤고,
  • non-interative mode로 하는 방법은 안 알려주고,
  • default는 false라고만 하고,

아무리 뒤져도 config.toml로 수정하라는 말 밖에는 어디에도 나오질 않는데,
config.toml을 보면 privileged flag는 원뎁쓰 더 들어가서 runners.docker에 설정이 되어야 되는 건 알겠는데,
난 지금 runner을 register 하고 있는데 도대체 어떻게 하라는 건지 알 수가 없고,
(나 근데 다른거 찾다가 --docker-privileged 전혀 상관 없는데서 이거 봐 버렸어 와씨- 어디였는지 기억도 안남 )

document에서는 config.toml를 수정하는 건 구리다고

  • Some runner configuration settings can’t be set with environment variables or command line options.
  • Environment variables do not support slices.
  • The only solution was to manually update the config.toml file after the runner was registered. This is less than ideal, error-prone, and not reliable.

그러면서 non-interactive로 하는 예제도 안 알려줌
-를 사용해서 하면 안되는 애들 있을거야 ^^
근데 모는 되고 모는 안되고는 안 알려 줄꼬얌

그런데 --docker-image docker:latest라고 하면
runners.docker로 설정이 되는 것을 보고
(응 너 말고 니 사수 ^^)
--docker-privileged로 성공.....


ssh-agent / ssh-keyscan


아니 다 끝난 줄 알았지,
그런데 .yml을 적다가

가만히...가만히...가마니...
나는 지금 어디에 있는가.....에 대하여 생각을 하다가
아니 잠깐 근데 내가 배포할 instance는 runner가 설치 된 instance랑
다른 곳인거 아니야?
어떻게 가서 붙어?라는 생각으로
또 시작

아니 ssh -i pem key 넣고, ec2-user@instance IP 넣고 하는거
이걸 스크립트 안에서 어떻게 하냐고오.....


@참고
https://docs.gitlab.com/ee/ci/ssh_keys/

#.gitlab-ci.yml

script:
	- 'command -v ssh-agent >/dev/null || ( apt-get update -y && apt-get install openssh-client -y)'
	- eval $(ssh-agent -s)
	- echo "$SSH_TEST_KEY" | tr -d '/r' | ssh-add -
	- mkdir -p ~/.ssh
	- chmod 700 ~/.ssh
	- ssh-keyscan $EC2_IP >> ~/.ssh/known_hosts
	- chmod 644 ~/.ssh/known_hosts

ssh를 사용해서 다른 어떤 machine으로 붙는 과정에서의 인가(authentication)는 public keyprivate key가 필요한데,
(암호, 복호 어쩌고 저쩌고 그런거)
이 때, ssh-agent는 내 private keyssh-add - 명령어로 담고,
ssh-keyscan으로 EC2의 IP에서 public key를 뽑아내는 것

@참고
https://linux.die.net/man/1/ssh-agent
https://linux.die.net/man/1/ssh-keyscan


clone하는 놈


이건 아직 document에서 찾질 못했는데,

스택오브플로우 형님은
repo를 clone하는 container가 또 있을 것이다, shared disk가 있을 것이라고 했다


결론


하.
내가 싫어지는 방법은 멀리 있지 않다




모든 출처는 GitLab 공식문서

CI/CD
러너

뒤지면 다나온다 with 개먼사님의 추론능력

배운 것 추가+)
블로그 믿지 말자.....
제 블로그도 믿지 마세요.....
내 껀 나만 믿으면 되지.....

profile
킴릴로

0개의 댓글