Vagrant.configure("2") do |config|
# OS 선택
config.vm.box = "rockylinux/8"
# Disk 확장
config.disksize.size = "30GB"
# 자동 업데이트 안함
config.vbguest.auto_update = false
# PC-VM간 마운팅 안함
config.vm.synced_folder "./", "/vagrant", disabled: true
config.vm.define "cicd-server" do |cicd|
cicd.vm.hostname = "cicd-server"
cicd.vm.network "private_network", ip: "192.168.56.20"
cicd.vm.provider :virtualbox do |vb|
vb.memory = 2048
vb.cpus = 2
vb.customize ["modifyvm", :id, "--firmware", "efi"]
end
cicd.vm.provision :shell, privileged: true, inline: $install_cicd
end
end
$install_cicd = <<-SHELL
echo '======== [1] Rocky Linux 기본 설정 ========'
echo '======== [1-1] 패키지 업데이트 ========'
# 강의와 동일한 실습 환경을 유지하기 위해 Linux Update 주석 처리
# yum -y update
# 초기 root 비밀번호 변경을 원하시면 아래 주석을 풀고 [새로운비밀번호]에 비번을 입력해주세요
# echo "root:새로운비밀번호" | chpasswd
echo '======== [1-2] 타임존 설정 및 동기화========'
timedatectl set-timezone Asia/Seoul
timedatectl set-ntp true
echo '======== [1-3] Disk 확장 설정 ========'
yum install -y cloud-utils-growpart
growpart /dev/sda 4
xfs_growfs /dev/sda4
echo '======== [1-4] 방화벽 해제 ========'
systemctl stop firewalld && systemctl disable firewalld
echo '======== [2] Kubectl 설치 ========'
echo '======== [2-1] repo 설정 ========'
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.27/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.27/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF
echo '======== [2-2] Kubectl 설치 ========'
yum install -y kubectl-1.27.2-150500.1.1.x86_64 --disableexcludes=kubernetes
echo '======== [3] 도커 설치 ========'
# https://download.docker.com/linux/centos/8/x86_64/stable/Packages/ 저장소 경로
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce-3:23.0.6-1.el8 docker-ce-cli-1:23.0.6-1.el8 containerd.io-1.6.21-3.1.el8
systemctl daemon-reload
systemctl enable --now docker
echo '======== [4] OpenJDK 설치 ========'
# yum list --showduplicates java-17-openjdk
yum install -y java-17-openjdk
echo '======== [5] Gradle 설치 ========'
yum -y install wget unzip
wget https://services.gradle.org/distributions/gradle-7.6.1-bin.zip -P ~/
unzip -d /opt/gradle ~/gradle-*.zip
cat <<EOF |tee /etc/profile.d/gradle.sh
export GRADLE_HOME=/opt/gradle/gradle-7.6.1
export PATH=/opt/gradle/gradle-7.6.1/bin:${PATH}
EOF
chmod +x /etc/profile.d/gradle.sh
source /etc/profile.d/gradle.sh
echo '======== [6] Git 설치 ========'
# 기존엔 git-2.43.0-1.el8 버전을 Fix하였으나 Repository에 최신 버전만 업로드 됨으로 수정
yum install -y git
echo '======== [7] 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 jenkins-2.440.3-1.1
systemctl enable jenkins
systemctl start jenkins
SHELL
[root@cicd-server ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
=> 초기 비밀번호 출력
3.2 Jenkins 대시보드 접속해서 확인한 비밀번호 입력
http://192.168.56.20:8080/login
3.3 플러그인 설치
권장설정 설치
3.4 Admin 사용자 생성
[root@cicd-server ~]# find / -name java | grep java-17-openjdk
/usr/lib/jvm/java-17-openjdk-17.0.15.0.6-2.el8.x86_64/bin/java # /bin/java 제외하고 복사
# Name : jdk-17
# JAVA_HOME : /usr/lib/jvm/java-17-openjdk-17.0.15.0.6-2.el8.x86_64
# Name : gradle-7.6.1
# GRADLE_HOME : /opt/gradle/gradle-7.6.1
4.4 [Save]
5.1 Docker 계정 생성
# jeknins가 Docker를 사용할 수 있도록 권한 부여
[root@cicd-server ~]# chmod 666 /var/run/docker.sock
[root@cicd-server ~]# usermod -aG docker jenkins
# Jeknins로 사용자 변경
[root@cicd-server ~]# su - jenkins -s /bin/bash
# 자신의 Dockerhub로 로그인 하기
[jenkins@cicd-server ~]$ docker login
Username:
Password:
# 폴더 생성
[jenkins@cicd-server ~]$ mkdir ~/.kube
* 해당 작업을 하기전에 Master Node가 정상적으로 실행중인지 확인해보세요.
* root가 아닌 Jenkins 유저 상태에서 작업 해주세요.
# Master Node에서 인증서 가져오기
[jenkins@cicd-server ~]$ scp root@192.168.56.30:/root/.kube/config ~/.kube/
▶ 인증서 가져오기 실행 후 [fingerprint] yes 와 [password] vagrant 입력
[jenkins@cicd-server ~]$ scp root@192.168.56.30:/root/.kube/config ~/.kube/
The authenticity of host '192.168.56.30 (192.168.56.30)' can't be established.
ECDSA key fingerprint is SHA256:zpLNQua5Q11vLdDTAhzhweG7I00sPTCJmSm2ebc1y34.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.56.30' (ECDSA) to the list of known hosts.
root@192.168.56.30's password:
config
▶ 동작 확인
[jenkins@cicd-server .kube]$ kubectl get pods -A
NAMESPACE NAME READY STATUS RESTARTS AGE
anotherclass-123 api-tester-1231-6f75564d95-dmbwl 1/1 Running 0 167m
anotherclass-123 api-tester-1231-6f75564d95-znthf 1/1 Running 0 170m
calico-apiserver calico-apiserver-587465b696-9rncs 1/1 Running 2 (56m ago) 4h4m
calico-apiserver calico-apiserver-587465b696-blrd4 1/1 Running 2 (56m ago) 4h4m
calico-system calico-kube-controllers-7dd9f6cf54-bb4s9 1/1 Running 2 (29h ago) 7d6h
calico-system calico-node-n2znw 1/1 Running 4 (56m ago) 7d6h
calico-system calico-typha-76dc5478dc-jg42m 1/1 Running 3 (29h ago) 9d
calico-system csi-node-driver-tw549 2/2 Running 5 (29h ago) 9d
default app-1-2-2-1-d65fb94cb-sgmkm 1/1 Running 2 7d6h
default app-1-2-2-1-d65fb94cb-xgh6q 1/1 Running 2 7d6h
kube-system coredns-5d78c9869d-gsqwl 1/1 Running 2 (29h ago) 9d
kube-system coredns-5d78c9869d-zpvlh 1/1 Running 2 (29h ago) 9d
kube-system etcd-k8s-master 1/1 Running 2 (29h ago) 9d
kube-system kube-apiserver-k8s-master 1/1 Running 2 (29h ago) 9d
kube-system kube-controller-manager-k8s-master 1/1 Running 12 (56m ago) 9d
kube-system kube-proxy-w5qsc 1/1 Running 2 (29h ago) 9d
kube-system kube-scheduler-k8s-master 1/1 Running 12 (56m ago) 9d
kube-system metrics-server-7db4fb59f9-k6dhh 1/1 Running 3 (56m ago) 9d
kubernetes-dashboard dashboard-metrics-scraper-5cb4f4bb9c-p7bvd 1/1 Running 2 (29h ago) 9d
kubernetes-dashboard kubernetes-dashboard-6bc7c98694-bxfjq 1/1 Running 4 9d
loki-stack loki-stack-0 1/1 Running 3 (29h ago) 9d
loki-stack loki-stack-promtail-2rds4 1/1 Running 2 (29h ago) 7d9h
monitoring grafana-646b5d5dd8-xth85 1/1 Running 2 9d
monitoring kube-state-metrics-86c66b4fcd-j4msz 3/3 Running 6 (29h ago) 9d
monitoring node-exporter-tn7db 2/2 Running 4 (29h ago) 9d
monitoring prometheus-adapter-648959cd84-hxxzf 1/1 Running 5 (22h ago) 9d
monitoring prometheus-k8s-0 2/2 Running 4 (29h ago) 9d
monitoring prometheus-operator-7ff88bdb95-vg9r7 2/2 Running 4 (29h ago) 9d
tigera-operator tigera-operator-84cf9b6dbb-zscwr 1/1 Running 16 (7m45s ago) 9d
https://github.com/k8s-1pro/kubernetes-anotherclass-sprint2
template:
spec:
containers:
- name: api-tester-2121
image: moongchi18/api-tester:v1.0.0
9.1.1 프로젝트 생성
item name : 2121-source-build
9.1.2 Dashboard > 2121-source-build > Configuration > General > GitHub project 선택
9.1.3 소스 코드 관리
Repository URL : https://github.com/k8s-1pro/kubernetes-anotherclass-api-tester.git
Branch Specifier : */main
9.1.4 Build Steps > Invoke Gradle script
Gradle Version : gradle-7.6.1
Tasks : clean build
9.1.5 [저장]
9.1.6 Dashboard > 2121-source-build > 지금 빌드 및 로그확인
9.1.7 생성된 Jar 파일 확인
[jenkins@cicd-server libs]$ ll /var/lib/jenkins/jobs/2121-source-build/workspace/build/libs
total 18596
-rw-r--r--. 1 jenkins jenkins 19025051 Jun 8 18:50 app-0.0.1-SNAPSHOT.jar
-rw-r--r--. 1 jenkins jenkins 16297 Jun 8 18:51 app-0.0.1-SNAPSHOT-plain.jar
9.2.1 프로젝트 생성
item name : 2121-container-build
9.2.2 Dashboard > 2121-container-build > Configuration > General > GitHub project 선택
Project url : https://github.com//kubernetes-anotherclass-sprint2/
9.2.3 소스 코드 관리
Repository URL : https://github.com//kubernetes-anotherclass-sprint2.git
Branch Specifier : */main
9.2.3 소스 코드 관리 > Additional Behavioures > Sparse Checkout paths
9.3.4 Build Steps > Execute shell
# jar 파일 복사
cp /var/lib/jenkins/jobs/2121-source-build/workspace/build/libs/app-0.0.1-SNAPSHOT.jar ./2121/build/docker/app-0.0.1-SNAPSHOT.jar
# 도커 빌드
docker build -t moongchi18/api-tester:v1.0.0 ./2121/build/docker
docker push moongchi18/api-tester:v1.0.0
9.3.2 소스 코드 관리 > Additional Behavioures > Sparse Checkout paths
Path : 2121/deploy/k8s
9.3.3 Build Steps > Execute shell
kubectl apply -f ./2121/deploy/k8s/namespace.yaml
kubectl apply -f ./2121/deploy/k8s/pv.yaml
kubectl apply -f ./2121/deploy/k8s/pvc.yaml
kubectl apply -f ./2121/deploy/k8s/configmap.yaml
kubectl apply -f ./2121/deploy/k8s/secret.yaml
kubectl apply -f ./2121/deploy/k8s/service.yaml
kubectl apply -f ./2121/deploy/k8s/hpa.yaml
kubectl apply -f ./2121/deploy/k8s/deployment.yaml
9.3.4 [저장]
9.3.5 Dashboard > 2121-deploy > 지금 빌드 및 로그 확인
9.4.1 마스터 노드에 pv 경로 /root/k8s-local-volume/2121이 생성되지 않아 에러 발생
[root@k8s-master k8s-local-volume]# mkdir 2121
9.4.2 startupProbe가 실패하여 재기동 발생하여 failureThreshold 변경
Startup probe failed: Get "http://20.96.235.255:8080/startup": dial tcp 20.96.235.255:8080: connect: connection refused
spec:
template:
spec:
containers:
startupProbe:
httpGet:
path: /startup
port: 8080
scheme: HTTP
timeoutSeconds: 1
periodSeconds: 5
successThreshold: 1
failureThreshold: 36 # 24 -> 36 변경