본문 바로가기
G.Code/kubernetes

[kubernetes] 10. Configmap 실습(도커, k8s 이용)

by 한선배 2021. 9. 19.
반응형

o 실습개요

 - rig와 box를 이용하여 매 5초마다 다른 형태의 fakeid와 box를 만드는 image를 생성하라

 - Dockerfile image는 Docker Hub에 올려 놓아라

 - 해당 image를 pull 받아서 yaml파일을 이용하여 pod를 생성하라

 - configMap을 이용하여 box의 형태(boy, stone, girl 등), 변동하는 시간을 조정하여라   

 

o rig와 box를 이용하여 매 5초마다 다른 형태의 fakeid와 box를 만드는 image를 생성하라.

- /build 디렉토리에 image를 생성하는 Dockerfile과 Dockerfile이 이용하는 genid.sh 쉘을 만들었다.

Dockerfile과 genid 위치

더보기

-- genid.sh 내용
-- rig와 box 유틸을 이용한 fakeid 표기를 진행한다.
-- $OPTION은 box의 형태를 말한다.
-- $INTERVAL은 명령어가 실행되는 시간을 말한다. 3초. 5초, 10초 가변적으로 진행
#!/bin/bash
mkdir -p /webdata
while true
do
  /usr/bin/rig | /usr/bin/boxes -d $OPTION > /webdata/index.html
  sleep $INTERVAL
done

 

-- Dockerfile 내용
FROM ubuntu:18.04
RUN apt-get update ; apt-get -y install rig boxes
ENV INTERVAL 5
ENV OPTION stone
ADD genid.sh /bin/genid.sh
RUN chmod +x /bin/genid.sh
ENTRYPOINT ["/bin/genid.sh"]

- dockerfile build를 진행하였다.

guru@master:~/build$ docker build -t kama8028/genid:env .
Sending build context to Docker daemon  3.072kB
Step 1/7 : FROM ubuntu:18.04
18.04: Pulling from library/ubuntu
e4ca327ec0e7: Pull complete 
Digest: sha256:9bc830af2bef73276515a29aa896eedfa7bdf4bdbc5c1063b4c457a4bbb8cd79
Status: Downloaded newer image for ubuntu:18.04
 ---> 54919e10a95d
Step 2/7 : RUN apt-get update ; apt-get -y install rig boxes
 ---> Running in 65197b266540
Get:1 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]
Get:2 http://archive.ubuntu.com/ubuntu bionic InRelease [242 kB]
Get:3 http://security.ubuntu.com/ubuntu bionic-security/multiverse amd64 Packages [26.7 kB]
Get:4 http://security.ubuntu.com/ubuntu bionic-security/universe amd64 Packages [1428 kB]
Get:5 http://archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB]
Get:6 http://archive.ubuntu.com/ubuntu bionic-backports InRelease [74.6 kB]
Get:7 http://archive.ubuntu.com/ubuntu bionic/main amd64 Packages [1344 kB]
Get:8 http://security.ubuntu.com/ubuntu bionic-security/restricted amd64 Packages [567 kB]
Get:9 http://security.ubuntu.com/ubuntu bionic-security/main amd64 Packages [2326 kB]
Get:10 http://archive.ubuntu.com/ubuntu bionic/universe amd64 Packages [11.3 MB]
Get:11 http://archive.ubuntu.com/ubuntu bionic/restricted amd64 Packages [13.5 kB]
Get:12 http://archive.ubuntu.com/ubuntu bionic/multiverse amd64 Packages [186 kB]
Get:13 http://archive.ubuntu.com/ubuntu bionic-updates/restricted amd64 Packages [600 kB]
Get:14 http://archive.ubuntu.com/ubuntu bionic-updates/multiverse amd64 Packages [34.4 kB]
Get:15 http://archive.ubuntu.com/ubuntu bionic-updates/universe amd64 Packages [2202 kB]
Get:16 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 Packages [2761 kB]
Get:17 http://archive.ubuntu.com/ubuntu bionic-backports/main amd64 Packages [11.3 kB]
Get:18 http://archive.ubuntu.com/ubuntu bionic-backports/universe amd64 Packages [11.4 kB]

~~ 생략

-- 생성된 dockerImage를 확인해 보았다.

guru@master:~/build$ docker images kama8028/genid
REPOSITORY       TAG       IMAGE ID       CREATED          SIZE
kama8028/genid   env       ddc6284c0b1f   20 minutes ago   102MB

 

o Docker Image를 Docker Hub에 update 하기

- docker push 명령어를 이용하여 docker Hub에 넣는다.(계정/이미지:버전으로 입력)

guru@master:~/build$ docker push kama8028/genid:env
The push refers to repository [docker.io/kama8028/genid]
cc5d296af07d: Pushed 
b74410552ed3: Pushed 
ad069ef95fde: Pushed 
6babb56be259: Mounted from library/ubuntu 
env: digest: sha256:74578b7983cbc59f2aee781b0b45810a62f37c5aa44deca7e295f2551807cd5e size: 1155

- docker Hub에 생성된 image를 확인 할 수 있다.

o Configmap을 만들기

- ConfigMap 명령어를 통해서 2가지(INTERVAL, OPTION)의 ConfigMap을 만들었다.

  (상세한 내용은 ConfigMap 블로그를 참고 하면 된다. https://ghouse2020.tistory.com/61 )

guru@master:~$ kubectl create configmap kama8028-config --from-literal=INTERVAL=2 --from-literal=OPTION=girl
configmap/kama8028-config created
guru@master:~$ kubectl describe configmaps kama8028-config 
Name:         kama8028-config
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
INTERVAL:
----
2
OPTION:
----
girl

 

o yaml파일을 이용하여 pod 만들기

- configMap 적용된 genid.yaml(일부만 적용, INTERVAL), genid-whole.yaml(전체적용, INTERVAL, OPTION)을 만들고 실행을 해보았다.

더보기

-- genid.yaml 파일

apiVersion: v1
kind: Pod
metadata:
  name: genid-stone
spec:
  containers:
  - image: kama8028/genid:env
    env:                                  --> 특정 환경변수만 실행하도록 설정
    - name: INTERVAL
      valueFrom:
        configMapKeyRef:
          name: kama8028-config
          key: INTERVAL
    name: fakeid
    volumeMounts:
    - name: html
      mountPath: /webdata
  - image: nginx:1.14
    name: web-server
    volumeMounts:
    - name: html
      mountPath: /usr/share/nginx/html
      readOnly: true
    ports:
    - containerPort: 80
  volumes:
  - name: html

 

-- genid-whole.yaml

apiVersion: v1
kind: Pod
metadata:
  name: genid-boy
spec:
  containers:
  - image: kama8028/genid:env
    envFrom: --> 전체적용은 부분적용과 이름이 다르다
    - configMapRef:  --> 전체적용은 부분적용과 이름이 다르다
        name: kama8028-config  --> 4칸 뛰어쓰기 해야함
    name: fakeid
    volumeMounts:
    - name: html
      mountPath: /webdata
  - image: nginx:1.14
    name: web-server
    volumeMounts:
    - name: html
      mountPath: /usr/share/nginx/html
      readOnly: true
    ports:
    - containerPort: 80
  volumes:
  - name: html
    emptyDir: {}

- pod 생성 및 pod 상세정보 확인

- 각 pod별 curl 명령어를 통해서 rig, box 출력을 확인 한다.

  ※ pod명은 gen-boy지만 환경변수를 OPTION=girl로 해서 girl box로 나왔다.

반응형

'G.Code > kubernetes' 카테고리의 다른 글

[kubernetes] 6.4 DaemonSet  (0) 2021.09.08
[kubernetes] kubectl 명령어 모음  (0) 2021.08.31
kubeadm, kubelet, kubectl 차이  (0) 2021.08.25
[k8s] pod 생성  (1) 2021.08.23
kubenetes init 설치오류  (0) 2021.08.21