2023년 7월 23일 일요일

docker registry proxy 테스트

registry kvm: 192.168.122.99
proxy kvm: 192.168.122.98
client kvm: 192.168.122.97

    1. registry 용 vm 생성
host $ sudo virt-install --name registry --os-variant ubuntu22.04 --vcpus 1 --ram 2048 \
--network network:default --cdrom /path/to/ubuntu-22.04.1-live-server-amd64.iso \
--disk size=10

    2. (공통) 도커 설치
host $ virsh start registry
host $ ssh registry
registry $ echo "$USER ALL=(ALL:ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers
registry $ sudo apt update 
registry $ sudo apt install vim iptables
registry $ wget https://download.docker.com/linux/ubuntu/dists/jammy/pool/stable/amd64/containerd.io_1.6.21-1_amd64.deb
registry $ wget https://download.docker.com/linux/ubuntu/dists/jammy/pool/stable/amd64/docker-buildx-plugin_0.11.1-1~ubuntu.22.04~jammy_amd64.deb
registry $ wget https://download.docker.com/linux/ubuntu/dists/jammy/pool/stable/amd64/docker-ce-cli_24.0.4-1~ubuntu.22.04~jammy_amd64.deb
registry $ wget https://download.docker.com/linux/ubuntu/dists/jammy/pool/stable/amd64/docker-ce_24.0.4-1~ubuntu.22.04~jammy_amd64.deb
registry $ wget https://download.docker.com/linux/ubuntu/dists/jammy/pool/stable/amd64/docker-compose-plugin_2.19.1-1~ubuntu.22.04~jammy_amd64.deb
registry $ sudo dpkg -i *.deb
registry $ rm -rf *
registry $ sudo usermod -aG docker $USER
registry $ sudo shutdown 0

    3. registry vm 을 proxy vm(과 client vm)으로 복사
host $ virt-clone --original registry --name proxy --file /var/lib/libvirt/images/proxy.qcow2
host $ virsh dumpxml proxy | grep '<mac'
      <mac address='52:54:00:ce:18:74'/>
host $ virsh net-edit default
  <ip address='192.168.122.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.122.100' end='192.168.122.254'/>
      <host mac='52:54:00:a9:5f:97' name='registry' ip='192.168.122.99'/>
      <host mac='52:54:00:ce:18:74' name='proxy' ip='192.168.122.98'/>
      <host mac='52:54:00:22:dd:40' name='client' ip='192.168.122.97'/>
</dhcp> </ip> </network$ virsh net-destroy default host $ virsh net-start default

    4. proxy vm(과 client vm)의 hostname 변경
host $ virsh start proxy
host $ ssh proxy
proxy $ sudo hostnamectl set-hostname proxy
proxy $ sudo sed -i 's/registry/proxy/' /etc/hosts
proxy $ sudo reboot

    5. registry 설정
    5.1. 사설 repository 사용 설정
host $ ssh registry
registry $ sudo vi /etc/docker/daemon.json
{
  "insecure-registries": ["192.168.122.99:5000"]
}
registry $ sudo systemctl restart docker

    5.2. registry 실행
registry $ mkdir -p workspace/registry
registry $ cd workspace
registry $ vi docker-compose.yml
version: "3"
services:
  registry:
    image: registry:2.8.2
    container_name: registry
    volumes:
      - ./registry:/var/lib/registry
    ports:
      - 5000:5000
    restart: always
registry $ docker compose up -d

    5.3. 테스트용 도커 이미지 생성
registry $ mkdir ~/test
registry $ cd ~/test
registry $ vi Dockerfile
FROM alpine
CMD echo 'hello registry 1.0'
registry $ docker build -t 192.168.122.99:5000/test/hello:1.0 .
registry $ docker push 192.168.122.99:5000/test/hello:1.0
registry $ curl http://192.168.122.99:5000/v2/_catalog
{"repositories":["test/hello"]}
registry $ curl http://192.168.122.99:5000/v2/test/hello/tags/list
{"name":"test/hello","tags":["1.0"]}

    6. proxy 설정
host $ ssh proxy
proxy $ mkdir -p workspace/registry
proxy $ cd workspace
proxy $ vi docker-compose.yml
version: "3"
services:
  proxy:
    image: registry:2.8.2
    container_name: proxy
    environment:
      - REGISTRY_PROXY_REMOTEURL="http://192.168.122.99:5000"
    volumes:
      - ./registry:/var/lib/registry
    ports:
      - 5000:5000
    restart: always
proxy $ docker compose up -d

    7. client 설정
host $ ssh client
client $ sudo vi /etc/docker/daemon.json
{
  "insecure-registries": ["192.168.122.98:5000"]
}
client $ sudo systemctl restart docker
client $ curl http://192.168.122.98:5000/v2/_catalog
{"repositories":[]}
client $ docker run --rm -it 192.168.122.98:5000/test/hello:1.0
hello registry 1.0
client $ curl http://192.168.122.98:5000/v2/_catalog
{"repositories":["test/hello"]}

참고:
https://waspro.tistory.com/532
https://bobcares.com/blog/docker-registry-mirroring/
https://docs.docker.com/registry/spec/api/

2023년 7월 1일 토요일

우분투 업데이트 후 크롬 크래시

우분투 업데이트 후 크롬이 시작하질 않는다.
$ /usr/bin/google-chrome-stable
[5836:5836:0702/120130.931454:FATAL:credentials.cc(127)] Check failed: . : 허가 거부 (13)
추적/중단점 함정 (코어 덤프됨)

찾아보니 새로운 nvidia 커널을 사용하면 발생한다는 것으로 보인다.
https://stackoverflow.com/a/76299196
https://bugs.launchpad.net/ubuntu/+source/linux-meta-nvidia-5.19/+bug/2017980

현재 커널은 nvidia 용인 것으로 보인다.
$ uname -sr
Linux 5.19.0-1010-nvidia-lowlatency

우선 확인을 위해 다른 커널을 사용해 보기로 한다.
https://askubuntu.com/a/16049

현재 커널은 3가지가 설치되어 있다.
$ cat /boot/grub/grub.cfg  | egrep 'menuentry |submenu ' | awk -F"'" '{print $1 $2}'
menuentry Ubuntu
submenu Advanced options for Ubuntu
	menuentry Ubuntu, with Linux 5.19.0-1010-nvidia-lowlatency
	menuentry Ubuntu, with Linux 5.19.0-1010-nvidia-lowlatency (recovery mode)
	menuentry Ubuntu, with Linux 5.19.0-46-generic
	menuentry Ubuntu, with Linux 5.19.0-46-generic (recovery mode)
	menuentry Ubuntu, with Linux 5.15.0-60-generic
	menuentry Ubuntu, with Linux 5.15.0-60-generic (recovery mode)
menuentry UEFI Firmware Settings

아마도 부팅시 grub 메뉴가 안보이도록 되어 있을텐데,
재부팅 > (bios가 끝나고) grub 로딩중일(이라고 생각될) 때 ESC 를 한 번만 누른다.

위에서 확인한 커널을 사용한다.
Advanced > 'Ubuntu, with Linux 5.19.0-46-generic'

부팅후 크롬을 실행하니 문제없이 뜬다.

다음과 같은 해결법이 있겠다.
  1. 크롬 실행시 --no-sandbox 옵션 추가
    동작은 잘 하는데 보안상 문제가 있다고하니 안쓰는게 나을 듯

  2. 문제없는 nvidia 용 커널 사용
    수정 버전이 나올 때까지 기다린다.

  3. generic 커널을 사용하도록 grub 메뉴를 수정
  4. $ sudo sed -i '/^GRUB_DEFAULT=/s/=.*/="1>2"/' /etc/default/grub
    $ sudo update-grub
    $ sudo reboot

  5. nvidia 용 커널 삭제
  6. $ dpkg -l | grep 'ii  linux-image'
    $ sudo apt remove linux-image-5.19.0-1010-nvidia-lowlatency커
우선 nvidia 커널쪽 문제인듯 하니 4번으로 해결했다.
크롬이 수정할 수도 있을텐데 그러면 다시 설치하면 되겠지.
 

참고
  • https://stackoverflow.com/a/76299196
  • https://bugs.launchpad.net/ubuntu/+source/linux-meta-nvidia-5.19/+bug/2017980
  • https://askubuntu.com/a/16049
  • https://linux.how2shout.com/how-to-change-default-kernel-in-ubuntu-22-04-20-04-lts/