Index
Docker
Docker 개념
Docker Install
Docker Command
Docker Example
Image 만들기
Dockerfile
Docker Compose
Image 저장소
Container Orchestration
Container Orchestration 이란
kubernetes(1)
kubernetes(2)
kubernetes install
kubernetes ui
kubernetes를 이용해 배포해보기
kubectl CLI
Provisioning
Provisioning이란
Ansible
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:centos7MAINTAINER thinkub0219@gmail.comENV JAVA_HOME /usr/lib/jvm/java-openjdkRUN yum update -y; \ yum install -y java-1.8.0-openjdk-devel.x86_64; \ yum clean all RUN mkdir -p /home/sor COPY ./ /home/sor 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 로그인
2.2 인증 token 정보 확인
login을 하게되면 ~/.docker/config.json
파일이 생성됩니다. 파일 내용을 확인해봅니다.1 cat ~/.docker/config.json
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파일로 배포 해보기
아래 명령어로 yaml 파일을 통한 배포를 진행합니다.1 kubectl create -f <yaml file>
3.3 App 접속 확인
service를 조회하면 app의 접근포트인 9999
포트가 30000
으로 포트포워딩 된것을 확인 할 수 있습니다.
해당 서버의 ip / port를 이용해 정상적으로 접속되는 것을 확인 할 수 있습니다.
4. UI 를 이용한 배포 4.1 우측위 +
버튼을 클릭합니다.
Create from input 은 yaml 파일 형식을 직접 작성해서 배포하는 방식입니다.
Create from file 은 yaml을 upload 해서 배포하는 방식입니다.
4.3 App의 기본정보를 입력합니다.
App Name 에 배포되는 application 명칭을 작성합니다.
Container Image 에 사용하려는 Image 명칭을 작성합니다.
Number of pods 에는 생성하려는 pod의 갯수를 작성합니다.
4.4 Service 정보를 입력합니다.
Service 는 NONE
Internal
External
이 있습니다. 이번 실습에서는 외부에 오픈되는 App이기 때문에 External을 선택합니다.
Port 에는 application에서 사용하는 Port중 외부에 오픈되어야 하는 Port를 연결해 줍니다.
4.5 advance option을 작성합니다.
Show advanced option을 클릭합니다.
Description 에는 배포되는 application 의 세부 정보를 작성합니다.
Image Pull Secret는 private repository를 사용하는경우 미리 설정한 secret을 선택해서 Image pull 받을때 인증을 하게됩니다. 미리 생성한 docker-hub
를 선택합니다.
4.6 Deploy
를 클릭해서 배포를 시작합니다.
4.7 배포완료가 되면 초록색
으로 정상적으로 배포되었다는것을 확인 할 수 있습니다.
4.8 Application 접속
참고
https://kubernetes.io/ko/docs/concepts/