마지막 팀 프로젝트1

sso·2025년 7월 24일

AWS

목록 보기
33/34

인스턴스 2개 필요

인스턴스 1: jenkins, 코드, 빌드파일 가지고 있음, docker build, docker push
인스턴스 2: 배포용, docker pull, kubernetes

인스턴스 1 작업

jenkins 설치, git 설치, docker 설치 필요

1. jenkins 설치

wget -O /etc/yum.repos.d/jenkins.repo \
https://pkg.jenkins.io/redhat-stable/jenkins.repo

rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key
yum install -y java-17-amazon-corretto-devel
dnf -y install jenkins
systemctl daemon-reload
systemctl --now enable jenkins

웹 젠킨스 접속

cat /var/lib/jenkins/secrets/initialAdminPassword

젠킨스 암호 1234로 변경

Jenkins > Nodes > Built-In Node > Configure > Node Properties
크기를 다 400M 으로 설정 후 Built In Node 온라인으로 변경

플러그인 설치 (플러그인은 기본적으로 git, maven 등이 설치된 후에 해야 정상적으로 설치가 완료됨

publish over ssh
GitHub
Maven Integration
Deploy to container

자바 위치 : /usr/lib/jvm/java-17-amazon-corretto.x86_64/bin/
빌드 위치 : /var/lib/jenkins/workspace/아이템명/target/아이템명.war

2. maven 설치

cd /opt
wget https://dlcdn.apache.org/maven/maven-3/3.9.11/binaries/apache-maven-3.9.11-bin.tar.gz
tar xfz apache-maven-3.9.11-bin.tar.gz
mv apache-maven-3.9.11 maven
cd /opt/maven/bin
./mvn -v

cd
vi .bash_profile

M2_HOME=/opt/maven
M2=/opt/maven/bin
JAVA_HOME=/usr/lib/jvm/java-17-amazon-corretto.x86_64
PATH=$PATH:$M2

source .bash_profile
echo $PATH
mvn -v

메이븐 기본 위치 : /opt/maven

3. git 설치, git repository 연결

dnf -y install git
git --version

cd
ssh-keygen -t ed25519
cat /root/.ssh/id_ed25519.pub

git repository 에서 setting > ssh 키 등록

mvn archetype:generate -DgroupId=com.test2 -DartifactId=test2 -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false
cd test2
git init
git remote add origin git@github.com:nohsohyun0128/test2.git
git add .
git commit -m "0724-1"
git pull origin master

git repository 연결 및 소스코드 다운로드 완료

번외

사실 톰캣을 사용하려고 하는건데 톰캣에 기본적인 설정이 필요함
기본적인 설정을 위해 임시로 톰캣을 설치하고 작업이 완료되면 지우겠음

cd /opt
wget https://dlcdn.apache.org/tomcat/tomcat-11/v11.0.9/bin/apache-tomcat-11.0.9.tar.gz
tar xfz apache-tomcat-11.0.9.tar.gz
mv apache-tomcat-11.0.9 tomcat

포트 변경이 필요할 때는 server.xml 파일 수정
vi /opt/tomcat/conf/server.xml

find / -name "context.xml"
vi /opt/tomcat/webapps/host-manager/META-INF/context.xml
해당 부분 주석 처리

<!--  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> -->

vi /opt/tomcat/webapps/manager/META-INF/context.xml
해당 부분 주석 처리

<!--  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> -->

vi /opt/tomcat/conf/tomcat-users.xml

<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<user username="admin" password="1234" roles="manager-gui,manager-script,manager-jmx,manager-status"/>
<user username="gui" password="1234" roles="manager-gui"/>
<user username="jenkins" password="1234" roles="manager-script"/>

4. Docker 설치

dnf -y install docker
systemctl --now enable docker
systemctl status docker
docker -v

5. Docker tomcat 기본 파일 수정

docker run -d --restart always -p 8081:8080 tomcat:latest
docker ps
docker exec -it 97d11 /bin/bash
find / -name "context.xml"
/usr/local/tomcat/webapps.dist/host-manager/META-INF/context.xml
/usr/local/tomcat/webapps.dist/manager/META-INF/context.xml
/usr/local/tomcat/conf/tomcat-users.xml
exit

톰캣을 현재 인스턴스에서 설치하고 설정했으므로 해당 파일을 도커 톰캣으로 복사하여 기본적인 톰캣 구조를 만들고 build하여 docker hub에 업로드

docker cp /opt/tomcat/webapps/host-manager/META-INF/context.xml 97d11:/usr/local/tomcat/webapps.dist/host-manager/META-INF/context.xml

docker cp /opt/tomcat/webapps/manager/META-INF/context.xml 97d11:/usr/local/tomcat/webapps.dist/manager/META-INF/context.xml

docker cp /opt/tomcat/conf/tomcat-users.xml 97d11:/usr/local/tomcat/conf/tomcat-users.xml

docker login
docker commit 97d11 sohyun2223/setting_tomcat:v1
docker iamges

내가 수정한 tomcat 컨테이너를 빌드하여 해당 이미지를 허브에 업로드

docker push sohyun2223/setting_tomcat:v1

docker stop 97d11
docker rm 97d11

쿠버네티스

쿠버네티스를 쓰기 위해서는 conainterd가 설치되어 있어야 하는데 내가 도커를 설치할때인지 원래 아마존리눅스에 설치되어 있는지는 모르겠지만 이미 설치되어 있어서 실행

systemctl --now enable containerd

https://kubernetes.io/ko/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

쿠버네티스를 설치하기 위한 최소 사양

  • 2 GB 이상의 램
  • 2 이상의 CPU

쿠버네티스를 관리하는 kubeadm 설치가 필요하고 특정 포트가 열려있어야하고
worker 노드들 역시 특정 포트가 열려있어야함

▼ control 인스턴스의 보안그룹 설정(인바운드 규칙)

▼ worker 인스턴스의 보안그룹 설정(인바운드 규칙)

▼ default 보안 그룹도 추가해야함

tomcat(worker) 접속 후 containerd 설치

dnf -y install containerd
systemctl --now enable containerd

control과 worker 모두 설정

vi /etc/hosts
10.0.10.216 jenkins
10.0.12.57 tomcat

서로 통신이 되는것을 확인

ping jenkins
ping tomcat

modprobe overlay
modprobe br_netfilter

cat << EOF | tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

cat << EOF | tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptalbes = 1
net.bridge.bridge-nf-call-ip6talbes = 1
net.ipv4.ip_forward = 1
EOF

cat /etc/modules-load.d/k8s.conf
cat /etc/sysctl.d/k8s.conf
sysctl --system

lsmod | grep overlay
lsmod | grep br_netfilter

sysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forward

containerd config default | tee /etc/containerd/config.toml

cat /etc/containerd/config.toml

vi /etc/containerd/config.toml
139행의 SystemdCgroup = false → true 없으면 추가하면 됨
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true

systemctl restart containerd

# This overwrites any existing configuration in /etc/yum.repos.d/kubernetes.repo
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.33/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.33/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF

cd /etc/yum.repos.d/

yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

systemctl enable --now kubelet
kubeadm version
systemctl status kubelet

jenkins-control만 작업

kubeadm init
kubeadm init --ignore-preflight-errors=NumCPU,Mem

정상적으로 실행됐다면 아래에 명령어가 나타는데 해당 명령어를 실행

mkdir -p HOME/.kube cp -i /etc/kubernetes/admin.conf $HOME/.kube/config chown $(id -u):(id -g) $HOME/.kube/config
kubectl apply -f https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s.yaml

또한 kubeadmin join 명령어는 worker 노드에서 실행

mkdir /opt/devops
cd /opt/devops
vi deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat
  labels:
    app: tomcat
spec:
  replicas: 1
  selector:
    matchLabels:
      app: tomcat
  template:
    metadata:
      labels:
        app: tomcat
    spec:
      containers:
      - name: tomcatserver
        image: sohyun2223/setting_tomcat:v1
        ports:
        - containerPort: 8082

vi service.yaml

apiVersion: v1
kind: Service
metadata:
  name: tomcat-service
spec:
  type: NodePort
  selector:
    app: tomcat
  ports:
    - protocol: TCP
      port: 8082
      targetPort: 8080
      nodePort: 30080

kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
kubectl get deployment

노드인스턴스의 퍼블릭ip:30080 ◀ 접속 성공!

내가 설정한거 맞나 확인

kubectl get pods
kubectl exec -it tomcat-6cd7876955-7wj5z -- /bin/bash

tail 15 /usr/local/tomcat/conf/tomcat-users.xml

변경사항이 적용되어있는것을 확인했다!

kubectl delete -f deployment.yaml
kubectl get pods
kubectl get deploy

처리되는 과정

git push

(docker hub tomcat 이미지 존재)

젠킨스가 실행되면 어떤 작업을 해야하냐?

  1. 소스코드 빌드 → .war 파일 생성
  2. pod 생성 : kubectl apply -f deployment.yaml, kubectl apply -f service.yaml
  1. .war 파일을 pod 내에 복사해

이게 말이 안돼는 과정이더라...
사실 이걸 하고싶다면 과정이 소스코드 빌드해서 .war 파일을 생성해
그리고 dockerfile 문서를 만들어서 내가 지금 세팅된 톰캣정보 입력 + 이때 .war 파일을 복사해서 집어넣어야됨
그리고 docker hub에 업로드하고
내 docker hub 기반으로 pod가 생성되어야함(deployment.yaml, service.yaml 실행)
그러면 성공이겠쥬?!

  1. 퍼블릭ip:포트(30080) 웹 접속 시 성공!

포트 확인

내가 쓰려고 하는 포트가 이미 다른 프로그램이 쓴다면 안돼니까
쓰고자 하는 포트가 사용중인지 확인하는 명령어

netstat -tnlp | grep :8081

vi Dockerfile

FROM tomcat:latest
RUN cp -R /usr/local/tomcat/webapps.dist/* /usr/local/tomcat/webapps
COPY ./*.war /usr/local/tomcat/webapps/
COPY /opt/tomcat/webapps/host-manager/META-INF/context.xml /usr/local/tomcat/webapps.dist/host-manager/META-INF/context.xml
COPY /opt/tomcat/webapps/manager/META-INF/context.xml /usr/local/tomcat/webapps.dist/manager/META-INF/context.xml
COPY /opt/tomcat/conf/tomcat-users.xml /usr/local/tomcat/conf/tomcat-users.xml
profile
오늘도 하나씩 해결해 나가자!

0개의 댓글