[Docker] 쿠버네티스에서 직접 만든 컨테이너 사용하기
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 [email protected]$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