Container Orchestration - 6. kubenetes를 이용해 배포해보기

2020-02-26

Index


  1. Docker
    1. Docker 개념
    2. Docker Install
    3. Docker Command
    4. Docker Example
    5. Image 만들기
    6. Dockerfile
    7. Docker Compose
    8. Image 저장소

  1. Container Orchestration
    1. Container Orchestration 이란
    2. kubernetes(1)
    3. kubernetes(2)
    4. kubernetes install
    5. kubernetes ui
    6. kubernetes를 이용해 배포해보기
    7. kubectl CLI

  1. Provisioning
    1. Provisioning이란
    2. Ansible
    3. Ansible을 이용해 kubernetes cluster 생성하기

목표

이번엔 k8s를 이용해서 node에 container 배포를 진행해 보겠습니다.
설치할 application 은 storm 입니다.

1. Application Image 생성

1.1 storm Dockerfile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
FROM centos:centos7

MAINTAINER thinkub0219@gmail.com

ENV JAVA_HOME /usr/lib/jvm/java-openjdk

# Install Packages & open jdk 1.9
RUN yum update -y; \
yum install -y java-1.8.0-openjdk-devel.x86_64; \
yum clean all

RUN mkdir -p /home/sor

# source copy
COPY ./ /home/sor

# app start
EXPOSE 6010 6020 9999
WORKDIR /home/sor/startup_linux
ENTRYPOINT ["./startsor.sh"]
CMD ["console"]

1.2 생성된 Image 저장소에 push

2. Secrets 생성하기

private repository 를 사용하는경우 image를 pull받기 위해서는 인증 절차가 필요합니다. 그외 사용자 암호, oAuth 토큰 및 ssh키와 같은 민감한 정보를 저장하고 관리해주는 기능으로 k8s Secrets를 사용합니다. 이번 실습에서는 Docker Hub Secrets 를 생성해보도록 하겠습니다.

2.1 Docker Hub Private Registry 로그인

1
docker login

2.2 인증 token 정보 확인

2.3 인증 토큰을 사용하여 Secret 생성하기

1
kubectl create secret docker-registry <name> --docker-server=DOCKER_REGISTRY_SERVER --docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL --namespace=<namespace-name>

3. yaml 파일을 이용한 배포

3.1 storm배포를 위한 yaml 파일 작성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
kind: Deployment
apiVersion: apps/v1
metadata:
name: storm-dp
namespace: default
labels:
k8s-app: storm
spec:
replicas: 1
selector:
matchLabels:
k8s-app: storm
template:
metadata:
name: storm
creationTimestamp: null
labels:
k8s-app: storm
spec:
containers:
- name: storm
image: 'thinkub/storm:10.32.0.3'
imagePullPolicy: IfNotPresent
securityContext:
privileged: false
restartPolicy: Always
imagePullSecrets:
- name: docker-hub

---

kind: Pod
apiVersion: v1
metadata:
name: storm-pod
namespace: default
labels:
k8s-app: storm
spec:
containers:
- name: storm
image: 'thinkub/storm:10.32.0.3'
imagePullPolicy: IfNotPresent
securityContext:
privileged: false
restartPolicy: Always
nodeName: node-1
imagePullSecrets:
- name: docker-hub

---

kind: Service
apiVersion: v1
metadata:
name: storm-svc
namespace: defalut
labels:
k8s-app: storm
spec:
ports:
- name: tcp-9999-9999
protocol: TCP
port: 9999
targetPort: 9999
nodePort: 30000
- name: tcp-6010-6010
protocol: TCP
port: 6010
targetPort: 6010
nodePort: 30001
- name: tcp-6020-6020
protocol: TCP
port: 6020
targetPort: 6020
nodePort: 30002
selector:
k8s-app: storm
type: LoadBalancer
status:
loadBalancer: {}

3.2 생성된 yaml파일로 배포 해보기

3.3 App 접속 확인

4. UI 를 이용한 배포

4.1 우측위 + 버튼을 클릭합니다.

4.2 Create from form 를 클릭해서 UI 배포를 진행합니다.

4.3 App의 기본정보를 입력합니다.

4.4 Service 정보를 입력합니다.

4.5 advance option을 작성합니다.

4.6 Deploy 를 클릭해서 배포를 시작합니다.

4.7 배포완료가 되면 초록색 으로 정상적으로 배포되었다는것을 확인 할 수 있습니다.

4.8 Application 접속

참고

https://kubernetes.io/ko/docs/concepts/