Skip to main content

ΑΒΡΑΞΑΣ Container 설치

ΑΒΡΑΞΑΣ Container version

1. PosgreSql Pod 설치 

1.1 PV 구성 

각 VM에 공유 볼륨을 생명하고 해당 볼륨을 PV(Persistent Volumes)로 설정  
각 VM에 NFS로 연계하는 부분은 여기를 참조 

kind: PersistentVolume
apiVersion: v1
metadata:
  name: postgresql-pv-volume
  namespace: tomcat-apps
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 20Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/data/tomcat/postgresql"

---

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: postgresql-pv-claim
  namespace: tomcat-apps
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi

1.2 PostgreSql  

postgresql pod를 만든다. 

apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat-postgresql
  namespace: tomcat-apps
spec:
  replicas: 1
  selector:
    matchLabels:
      app: products
      department: tomcat-postgresql
  template:
    metadata:
      labels:
        app: products
        department: tomcat-postgresql
    spec:
      containers:
        - name: postgresql
          image: postgres:11
          ports:
            - containerPort: 5432
          volumeMounts:
            - mountPath: "/var/lib/postgresql/data"
              name: postgresql-persistent-storage
              readOnly: false
          env:
            - name: POSTGRES_PASSWORD
              value: eXXXXXXXrl  <-- root 패스워드 기입 
      volumes:
        - name: postgresql-persistent-storage
          persistentVolumeClaim:
            claimName: postgresql-pv-claim

---

apiVersion: v1
kind: Service
metadata:
  name: tomcat-postgresql-service
  namespace: tomcat-apps
spec:
  type: LoadBalancer
  externalIPs:
   - 192.168.0.100
  selector:
    app: products
    department: tomcat-postgresql
  ports:
  - protocol: TCP
    port: 5432
    targetPort: 5432

---

http://web.joang.com:6875/books/abraksas-system/page/abraksas#bkmrk-%C2%A0 데이터베이스 생성 

http://web.joang.com:6875/books/abraksas-system/page/abraksas#bkmrk---table-%EC%83%9D%EC%84%B1%C2%A0 테이블 생성 

2. ΑΒΡΑΞΑΣ Dockerfile 

FROM tomcat:9

ENV TZ=Asia/Seoul
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
COPY ./favorit.ico /usr/local/tomcat/webapps/ROOT/favorit.ico
VOLUME ["/data/tomcat", "/data/tomcat"]
COPY ./com.joang.web.filemetamanager/target/meta.war /usr/local/tomcat/webapps/meta.war
COPY ./com.joang.web.filemetamanager/target/meta.war /usr/local/tomcat/webapps/ROOT/meta.war
RUN mkdir -p /usr/local/tomcat/filebeat-8.6.0-linux-x86_64
COPY ./filebeat-8.6.0-linux-x86_64 /usr/local/tomcat/filebeat-8.6.0-linux-x86_64
RUN chmod go-w /usr/local/tomcat/filebeat-8.6.0-linux-x86_64/filebeat.yml
COPY ./redisson-all-3.7.5.jar /usr/local/tomcat/lib
COPY ./redisson-tomcat8.jar /usr/local/tomcat/lib
RUN rm -Rf /usr/local/tomcat/conf/context.xml
COPY ./context.xml /usr/local/tomcat/conf
RUN rm -Rf /usr/local/tomcat/conf/server.xml
COPY ./server.xml /usr/local/tomcat/conf
COPY ./redisson.conf /usr/local/tomcat/conf
COPY ./redis-data-cache.properties /usr/local/tomcat/conf
COPY ./tomcat-cluster-redis-session-manager/lib /usr/local/tomcat/lib
ENTRYPOINT ["filebeat-8.6.0-linux-x86_64/startfilebeat.sh"]

전체 docker 빌드 환경 파일 : 

filebeat-8.6.0-linux-x86_64.tar

tomcat-cluster-redis-session-manager.tar

context.xml

redis-data-cache.properties

redisson.conf

redisson-all-3.7.5.jar

redisson-tomcat8.jar

server.xml

3. Docker Build 

#!/bin/bash

VERSION=$1

echo ">> Build Version : " $VERSION

docker build -t tomcat-meta:$VERSION /data/tomcat/scm/dockerimage/meta

docker tag tomcat-meta:$VERSION web.joang.com:9002/tomcat-meta:$VERSION
docker tag tomcat-meta:$VERSION web.joang.com:9002/tomcat-meta:latest

docker push web.joang.com:9002/tomcat-meta:$VERSION
docker push web.joang.com:9002/tomcat-meta:latest

exit 0

4. Namespace 만들기 

ΑΒΡΑΞΑΣ용 namespace를 정의합니다. 

apiVersion: v1
kind: Namespace
metadata:
  name: tomcat-apps
  labels:
    app.kubernetes.io/name: tomcat-apps
    app.kubernetes.io/part-of: tomcat-apps

 

 

5. ΑΒΡΑΞΑΣ Yaml 

apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat-meta
  namespace: tomcat-apps
spec:
  selector:
    matchLabels:
      app: products
      department: tomcat-meta
  replicas: 2
  minReadySeconds: 20
  template:
    metadata:
      labels:
        app: products
        department: tomcat-meta
    spec:
#      hostNetwork: true
      containers:
      - name: tomcat-meta
        image: web.joang.com:9002/tomcat-meta:latest
        imagePullPolicy: Always
        volumeMounts:
        - name: tomcat-volume
          mountPath: /data/tomcat
        env:
        - name: "PORT"
          value: "8080"
      volumes:
      - name: tomcat-volume
        hostPath:
          path: /data/tomcat
          type: Directory

---

apiVersion: v1
kind: Service
metadata:
  name: tomcat-meta-service
  namespace: tomcat-apps
spec:
  type: LoadBalancer
  externalIPs:
   - 192.168.0.100
  selector:
    app: products
    department: tomcat-meta
  ports:
  - protocol: TCP
    port: 8080
    targetPort: 8080
  sessionAffinity: ClientIP

---

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: meta-ingress
  namespace: tomcat-apps
  annotations:
    nginx.ingress.kubernetes.io/affinity: cookie
    nginx.ingress.kubernetes.io/proxy-body-size: 5000m
    nginx.ingress.kubernetes.io/session-cookie-hash: sha1
    nginx.ingress.kubernetes.io/session-cookie-name: route
    nginx.ingress.kubernetes.io/use-regex: 'true'
spec:
  rules:
  - host: web.joang.com
    http:
      paths:
      - path: /meta/*
        backend:
          serviceName: tomcat-meta-service
          servicePort: 8080
      - path: /*
        backend:
          serviceName: tomcat-meta-service
          servicePort: 8080


---

6. Kubernetes ΑΒΡΑΞΑΣ Pod 

 

7. 배치 (Python batch)

사용법 : ΑΒΡΑΞΑΣ 사용하기