인스턴스 2개 필요
인스턴스 1: jenkins, 코드, 빌드파일 가지고 있음, docker build, docker push
인스턴스 2: 배포용, docker pull, kubernetes
jenkins 설치, git 설치, docker 설치 필요
wget -O /etc/yum.repos.d/jenkins.repo \
https://pkg.jenkins.io/redhat-stable/jenkins.reporpm --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
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_profileM2_HOME=/opt/maven M2=/opt/maven/bin JAVA_HOME=/usr/lib/jvm/java-17-amazon-corretto.x86_64 PATH=$PATH:$M2source .bash_profile
echo $PATH
mvn -v
메이븐 기본 위치 : /opt/maven
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"/>
dnf -y install docker
systemctl --now enable docker
systemctl status docker
docker -v
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/
쿠버네티스를 설치하기 위한 최소 사양
쿠버네티스를 관리하는 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 tomcatmodprobe overlay
modprobe br_netfiltercat << EOF | tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOFcat << 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
EOFcat /etc/modules-load.d/k8s.conf
cat /etc/sysctl.d/k8s.conf
sysctl --systemlsmod | grep overlay
lsmod | grep br_netfiltersysctl 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 = truesystemctl 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 EOFcd /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.yamlapiVersion: 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: 8082vi service.yaml
apiVersion: v1 kind: Service metadata: name: tomcat-service spec: type: NodePort selector: app: tomcat ports: - protocol: TCP port: 8082 targetPort: 8080 nodePort: 30080kubectl 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 이미지 존재)
젠킨스가 실행되면 어떤 작업을 해야하냐?
이게 말이 안돼는 과정이더라...
사실 이걸 하고싶다면 과정이 소스코드 빌드해서 .war 파일을 생성해
그리고 dockerfile 문서를 만들어서 내가 지금 세팅된 톰캣정보 입력 + 이때 .war 파일을 복사해서 집어넣어야됨
그리고 docker hub에 업로드하고
내 docker hub 기반으로 pod가 생성되어야함(deployment.yaml, service.yaml 실행)
그러면 성공이겠쥬?!
내가 쓰려고 하는 포트가 이미 다른 프로그램이 쓴다면 안돼니까
쓰고자 하는 포트가 사용중인지 확인하는 명령어
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