1 분 소요

4.4 쿠버네티스에서 직접 만든 컨테이너 사용하기

4.4.1 쿠버네티스에서 도커 이미지 구동하기

  • 쿠버네티스는 컨테이너를 효과적으로 다루기 위해 만들어 졌다.
  • kubectl 명령으로 직접 만든 컨테이너 이미지도 구동할 수 있다.

Dockerfile

FROM openjdk:8 AS int-build
LABEL description="Java Application builder"
RUN git clone https://github.com/iac-source/inbuilder.git
WORKDIR inbuilder
RUN chmod 700 mvnw
RUN ./mvnw clean package

FROM gcr.io/distroless/java:8
LABEL description="Echo IP Java Application"
EXPOSE 60434
COPY --from=int-build inbuilder/target/app-in-host.jar /opt/app-in-image.jar
WORKDIR /opt
ENTRYPOINT [ "java", "-jar", "app-in-image.jar" ]
# 내부에 존재하는 컨테이너 이미지를 사용하도록 설정하여 디플로이먼트 생성
kubectl create deployment test --dry-run=client -o yaml \ --image=multistage-img > test.yaml

4.4.2 레지스트리 구성하기

  • 호스트에서 생성한 이미지를 사용하려면 모든 노드에서 공통으로 접근하는 저장소가 필요하다.

  • 도커는 레지스트리에 접속하는 과정에서 주체 대체 이름 이라는 추가 정보를 검증하기 때문에 인증서를 생성하는 과정이 필요하다.

  • 도커에서 제공하는 도커 레지스트리 이미지를 사용하여 사설 도커 레지스트리를 만들어 보자.

tls.csr

[req]
distringuished_name = private_registry_cert_req
x509_extensions = v3_req
prompt = no

[private_registry_cert_req]
C = KR
ST = SEOUL
L = SEOUL
O = gilbut
OU = uluru
CN = 192.16.1.10

[v3_req]
keyUsage = keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.0 = uluru
IP.0 = 102.168.1.10

create-registry.sh

#!/usr/bin/env bash
# 레지스트리를 생성 하고 구동하는 과정이 담긴 스크립트이다.
certs=/etc/docker/certs.d/192.168.1.10:8443
mkdir /registry-image
mkdir /etc/docker/certs
mkdir -p $certs
openssl req -x509 -config $(dirname "$0")/tls.csr -nodes -newkey rsa:4096 \ -keyout tls.key -out tls.crt -days 365 -extensions v3_req

yum install sshpass -y
for i in {1..3}
    do
        sshpass -p vgrant ssh -o StrictHostKeyChecking=no root@192.168.1.10$i mkdir -p $certs
        sshpass -p vagrant scp tls.crt 192.168.1.10$i:$certs
    done

cp tls.crt $certs
mvtls.* /etc/docker/certs

docker run -d \
    --restart=always \
    --name registry \
    -v /etc/docker/certs:/docker-in-certs:ro \
    -v /registry-image:/var/lib/registry \
    -e REGISTRY_HTTP_ADDR=0.0.0.0:443 \
    -e REGISTRY_HTTP_TLS_CERTIFICATE=/docker-in-certs/tls.crt \
    -e REGISTRY_HTTP_TLS_KEY=/docker-in-certs/tls.key \
    -p 8443:443
    registry:2
# sh 실행
~/create-registry.sh
# 이미지를 도커 레지스트리에 등록
docker push 192.168.10.10:8443/

4.4.3 직접 만든 이미지로 컨테이너 구동하기

test.yaml

spec:
  containers:
  - image: 192.168.1.10:8443/multistage-img
    name: multistage
    resources: {}
status: {}
# test.yaml 디플로이 먼트 생성
kubectl apply -f test.yaml
# 구동 확인
kubectl get pods -o wide