일반 테스트 시는 이미지를 만들고 쿠버네티스에 올리면 된다.
하지만, 실제 서비스일 때는 레지스트리 저장소인 Container Registry에 마지막 이미지를 올려놓고 가져다 사용한다.
저장소인 버킷을 만들고 Container Registry 생성하자
이미지를 만들자
Container Registry에 이미지를 올리자
Container Registry의 이미지를 가져다 쓰자. 이미지로 Pod를 생성해 사용하자.
<1> 버킷을 만들고 Container Registry 생성
<2> 도커 이미지 만들기
<3> 만든 도커 이미지를 레지스트리에 올리기
<4> Container Registry의 이미지 사용해 Pod 생성하기
<1> 버킷을 만들고 Container Registry 생성
1
버킷 만들기?
Storage > Object Storage > 이용신청
Bucket Management
버킷 생성
nginx-web-bucket
// 버킷 이름은 유일해야 한다. nginx-web-bucket1
2
Container Registry 생성 ?
Compute > Container Registry > 레지스트리 생성
nginx-web-reg
레지스트리 이름도 유일해야 한다. nginx-web-reg1
앞에서 생성한 버킷 지정 nginx-web-bucket1
생성
Private Endpoint 를 복사해 놓는다.
m6n7b87w.kr.private-ncr.ntruss.com
<2> 도커 이미지 만들기
1
리눅스 서버 로그인
2
kubectl get nodes
[root@s17e3bbc1fd7 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
nks-default-pool1-w-voj Ready <none> 9h v1.20.13
nks-default-pool1-w-vok Ready <none> 9h v1.20.13
nks-default-pool1-w-vol Ready <none> 9h v1.20.13
nks-default-pool1-w-vom Ready <none> 9h v1.20.13
kubectl get pods
[root@s17e3bbc1fd7 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
deployment-2048-79785cfdff-bk6wb 1/1 Running 0 114m
deployment-2048-79785cfdff-vsmsw 1/1 Running 0 114m
nginx-pod 1/1 Running 0 119m
websrv-684ff84f56-4774n 1/1 Running 0 119m
websrv-684ff84f56-6l626 1/1 Running 0 119m
websrv-684ff84f56-ft97m 1/1 Running 0 119m
websrv-684ff84f56-zs682 1/1 Running 0 119m
3
cat << EOF > Dockerfile
FROM nginx:latest
RUN echo '<h1> Container Registry test 1 </h1>' >> index.html
RUN cp /index.html /usr/share/nginx/html
EOF
설명 ?
FROM : Base Image
RUN : shell command를 docker image에 실행
WORKDIR : 작업 디렉터리
EXPOSE : 호스트와 연결할 포트 번호를 지정
CMD : application을 실행하기 위한 명령어
3
빌드
test-image 를 만들자
docker build -t test-image .
// 리눅스 서버에 도커가 설치 되어 있어야 한다.
혹, 오류가 발생하면 업데이트 필요
container_linux.go:235: starting container process caused "process_linux.go:258: applying cgroup configuration for process caused \"Cannot set property TasksAccounting, or unknown property.\""
yum -y update
(10분 소요)
docker images
docker run -p 8080:80 --name test-nginx test-image
4
다른 터미널로 로그인 해 확인
docker ps
[root@s17e3bbc1fd7 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bfa5615ebff7 test-image "/docker-entrypoint.…" 36 seconds ago Up 36 seconds 0.0.0.0:8080->80/tcp test-nginx
5
docker logs -f test-nginx
6
docker exec -it test-nginx /bin/bash
[root@test-web01 ~]# docker exec -it test-nginx /bin/bash
root@e494216f26dd:/#
root@e494216f26dd:/# ls
bin dev docker-entrypoint.sh home lib media opt root sbin sys usr
boot docker-entrypoint.d etc index.html lib64 mnt proc run srv tmp var
root@e494216f26dd:/# exit
<3> 만든 도커 이미지를 레지스트리에 올리기
// 새 버전에 대해 테스트 필요 !!!!!!!!!
1
레지스트리에 올리기 위해 access key 가 필요하다.
access key 확인?
ncloud 콘솔
마이페이지
계정관리
인증키 관리
2
계정으로 레지스트리 로그인 하기
Access key id와 Secret key id는
포털 > 마이페이지 > 인증키 관리에서 확인
<private endpoint>는 컨테이너 레지스트리에서 확인
docker login -u <access key id> < private endpoint>
docker login -u tUBxxxxxxxxxxx m6n7b87w.kr.private-ncr.ntruss.com
[root@s17e3bbc1fd7 ~]# docker login -u tUBEqkUrqOLafEUmlehw m6n7b87w.kr.private-ncr.ntruss.com
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
Login Succeeded
3
이미지에 태그 추가 ?
docker image tag image_apache <private endpoint>/ image_apache:1.0
docker image tag test-image m6n7b87w.kr.private-ncr.ntruss.com/test-image:1.0
4
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test-image latest f9b6f1e04c74 56 minutes ago 141MB
m6n7b87w.kr.private-ncr.ntruss.com/test-image 1.0 f9b6f1e04c74 56 minutes ago 141MB
nginx latest 605c77e624dd 10 days ago 141MB
// test-image 를 레파지토리 이미지 태그로 하나더 만든다.
m6n7b87w.kr.private-ncr.ntruss.com/test-image:1.0
4
도커를 컨테이너 레지스트리에 올리기, PUSH
docker push m6n7b87w.kr.private-ncr.ntruss.com/test-image:1.0
The push refers to a repository [n0jw34vw.kr.private-ncr.ntruss.com/test-image]
b35a9b6182f4: Pushed
539984d66b34: Pushed
e4b39f949587: Pushed
53db376e88c7: Pushed
// docker push m6n7b87w.kr.private-ncr.ntruss.com/nginx:1.0
5
네이버 클라우드 콘솔에서 확인하자
Container Registry 가서 확인
이미지 리스트 이동
이미지 이름
test-image
<4> Container Registry의 이미지 사용해 Pod 생성하기
1
Container Registry의 Access/ Secret 키를 저장하는 Secret 생성 ?
2
kubectl create secret docker-registry regcred --docker-server=<registry-end-point> --docker-username=<access-key-id> --docker-password=<secret-key> --docker-email=<your-email>
secret/regcred created
kubectl get secret
[root@s17e3bbc1fd7 ~]# kubectl get secret
NAME TYPE DATA AGE
default-token-ngbt8 kubernetes.io/service-account-token 3 10h
regcred kubernetes.io/dockerconfigjson 1 50s
3
pod 생성 ?
ex)
containers:
- name: apache-pod
image: <private-endpoint>/image_apache:1.0
vi create_only_pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: apache-pod
namespace: default
spec:
containers:
- name: apache-pod
image: m6n7b87w.kr.private-ncr.ntruss.com/nginx:1.0
imagePullSecrets:
- name: regcred
kubectl create -f create_only_pod.yaml --validate=false
4
디플로이먼트 생성 ?
vi create_deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: apache-deployment
spec:
replicas: 3
selector:
matchLabels:
app: apache
template:
metadata:
labels:
app: apache
spec:
containers:
- name: apache
image: <private-endpoint >/image_apache:1.0
ports:
- containerPort: 80
imagePullSecrets:
- name: regcred
5
서비스 생성 ?
vi create_service.yaml
kind: Service
apiVersion: v1
metadata:
name: example-service
spec:
ports:
- port: 80
targetPort: 80
selector:
app: apache
type: LoadBalancer
kubectl create -f create_service.yaml
kubectl get service
7
LB 접속 테스트
8
참고
감사합니다.