이전 기사에서 저는 마이크로서비스의 매혹적인 세계인 마이크로서비스 아키텍처 패턴 1부: 분해 패턴을 탐구했습니다. 이것이 마이크로서비스와 그 패턴에 대한 포괄적인 기사 시리즈의 시작이었습니다.
논리적인 단계는 이 시리즈의 2부에서 계속하는 것이지만, 다음으로 살펴보고 말씀드리고 싶은 것은 이러한 마이크로서비스를 최종 사용자에게 원활하게 제공하는 중요한 프로세스라고 결정했습니다.
CI/CD는 앱 개발의 다양한 단계에 자동화를 추가하여 고객에게 앱을 제공하는 기술입니다. 저는 CI/CD(지속적 통합 및 지속적인 배포)를 파악하면 개발자가 프로젝트 저장소 경계를 넘어 백엔드 프로젝트 아티팩트가 어떻게 존재하는지 더 잘 이해할 수 있다고 믿습니다. 이러한 이해는 개발자의 관점에 근본적인 변화를 가져올 수도 있습니다. 단순히 자신의 작업을 코드 라인으로 보는 대신 프로젝트의 더 넓은 맥락을 가치 있는 제품으로 포용하기 시작할 수 있습니다.
이 글에서는 실제 적용을 통해 CI/CD 프로세스를 이해하는 것을 목표로 합니다. CI/CD 파이프라인을 수동으로 구축하는 단계별 튜토리얼을 모듈별로 분류하여 안내해 드리겠습니다. 이를 위해 AWS, Docker, Kubernetes, Ansible, Git, Apache Maven 및 Jenkins 와 같은 최신 DevOps 도구의 성능을 활용하겠습니다. 그럼 이번 여행을 시작해 볼까요!
이 모듈은 AWS EC2 가상 서버 인스턴스 생성을 전담합니다. 이 문서의 일부로 Jenkins, Ansible 및 Kubernetes용 EC2 인스턴스 3개를 설정하게 됩니다. 지금은 다음 모듈을 진행하고 "[모듈 2]: Jenkins", "[모듈 6]: Ansible" 및 "[모듈 7]: Kubernetes" 섹션에서 이 모듈을 다시 방문할 수 있습니다.
https://aws.amazon.com으로 이동합니다.
AWS 계정 생성 버튼을 클릭합니다.
계정 만들기 웹페이지의 지침을 따르세요.
https://console.aws.amazon.com/console/home으로 이동합니다. 로그인 버튼을 클릭하세요.
이 웹 페이지에 필요한 모든 자격 증명을 입력하십시오.
검색창에서 EC2를 찾아보세요.
EC2 서비스를 클릭하여 EC2 가상 서버를 선택합니다.
인스턴스 시작 버튼을 클릭합니다.
'이름 및 태그' 섹션으로 이동합니다.
"이름" 섹션에 새 AWS EC2 가상 서버 인스턴스의 이름을 제공합니다.
"추가 태그 추가"를 클릭하여 가상 서버에 대한 추가 태그를 추가할 수도 있습니다.
"애플리케이션 및 OS 이미지(Amazon 머신 이미지)" 섹션으로 이동합니다.
무료 로 가상 서버를 플레이하려면:
'인스턴스 유형' 섹션으로 이동합니다.
무료 로 가상 서버를 플레이하려면:
인스턴스 유형 섹션에서 무료 등급 적격 태그가 있는 유형을 선택합니다.
나에게는 t2.micro (Family: t2 1cCPU 1 GiB Memory Current Generation:true) 입니다.
'저장소 구성' 섹션으로 이동하세요.
무료 로 가상 서버를 플레이하려면:
기본 설정을 변경하지 마십시오. 무료 등급 적격 고객은 30GB의 EBS 범용(SSD) 또는 마그네틱 스토리지를 얻을 수 있습니다.
"네트워크 설정" 섹션으로 이동하세요.
가상 서버의 보안을 설정해야 합니다. 이것을하기 위해,
기본적으로 가상 서버는 유형 - SSH, 프로토콜 - TCP, 포트 - 22를 통해 액세스할 수 있습니다. 추가 연결 유형이 필요한 경우 추가 인바운드 보안 그룹 규칙을 추가하여 추가하세요.
"키 쌍(로그인)" 섹션으로 이동합니다.
아직 생성하지 않은 경우 새 키 쌍을 생성합니다.
아직 "키 쌍"을 생성하지 않은 경우:
"인스턴스 시작" 버튼을 클릭하여 EC2 가상 서버 인스턴스를 시작합니다.
EC2 가상 서버 인스턴스 생성 프로세스가 완료되면 다음이 표시됩니다.
그런 다음 " 모든 인스턴스 보기" 버튼을 클릭하여 " 인스턴스" 섹션으로 이동해야 합니다.
이제 AWS EC2 Virtual Server 인스턴스가 실행 중임을 확인할 수 있습니다.
이제 EC2 가상 서버 인스턴스에서 JenkinsServer를 구성해 보겠습니다.
Jenkins를 실행하려면 가상 서버가 필요합니다.
이 자습서의 [모듈 1]: AWS EC2 가상 서버 섹션의 지침에 따라 이 단계를 완료하고 JenkinsServer라는 이름의 EC2 가상 서버 인스턴스를 생성합니다.
보안 그룹 설정을 추가하는 것을 잊지 마세요. 이를 통해 Jenkins 와 SSH가 각각 포트 8080 과 22 에서 작동할 수 있습니다.
EC2 가상 서버 인스턴스를 구별하려면 "JenkinsServer" 라는 이름을 사용하십시오.
새로운 "JenkinsServer" AWS EC2 인스턴스에 대해 "CI_CD_Pipeline" 보안 그룹 및 "CI_CD_Pipeline_Key_Pair"를 생성합니다. 기사에서 추가로 재사용할 수 있습니다.
AWS 콘솔 홈 페이지 → EC2 관리 콘솔 대시보드 → 인스턴스로 이동합니다.
그런 다음 JenkinsServer를 선택한 다음 “Connect” 버튼을 클릭해야 합니다.
그러면 이런 웹페이지가 보일 것입니다. "연결" 버튼을 다시 클릭해야 합니다.
이제 EC2 가상 서버 인스턴스 온라인 터미널을 볼 수 있습니다.
이제 EC2 가상 서버 인스턴스에 Jenkins를 다운로드해야 합니다.
다음 지침을 따르십시오.
Jenkins 다운로드 웹페이지 로 이동합니다.
Stable(LTS) 및 일반 릴리스(주간) 옵션을 볼 수 있습니다. Red Hat/Fedora/Alma/Rocky/CentOS LTS 옵션을 선택합니다.
이 웹 페이지가 표시됩니다.
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
이제 Jenkins가 다운로드되었습니다.
Jenkins 설치를 완료하려면 Jenkins 키를 가져와야 합니다.
Jenkins 키를 가져오려면 “sudo rpm..” 명령을 복사하고 실행해야 합니다.
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key
이런 방식으로 "rpm" 패키지 관리자는 설치한 Jenkins 패키지가 Jenkins 프로젝트에서 게시한 패키지와 정확히 일치하는지, 변조되거나 손상되지 않았는지 확인할 수 있습니다.
Jenkins를 실행하려면 EC2 가상 서버 인스턴스에 Java를 설치해야 합니다.
Java를 설치하려면 이 명령을 사용하십시오.
sudo amazon-linux-extras install java-openjdk11 -y
다음 명령을 사용하여 Java가 올바르게 설치되었는지 확인하십시오.
java -version
당신은 그런 것을 보게 될 것입니다.
Jenkins를 실행하려면 EC2 가상 서버 인스턴스에 글꼴 구성을 설치해야 합니다.
이 명령을 사용하십시오.
sudo yum install fontconfig java-11-openjdk -y
Fontconfig는 시스템 전체의 글꼴 구성, 사용자 정의 및 응용 프로그램 액세스를 제공하도록 설계된 라이브러리입니다. Jenkins에는 글꼴을 렌더링하는 기능이 있으므로 Jenkins에 필요합니다.
이전 단계에서는 특정 Jenkins 리포지토리를 사용하도록 EC2 가상 서버 인스턴스를 구성한 다음 이 리포지토리와 연결된 GPG 키를 가져왔습니다. 이제 Jenkins 패키지를 찾으려면 추가한 Jenkins 저장소를 포함하여 알고 있는 모든 저장소를 검색하는 명령을 실행해야 합니다. Jenkins 저장소에서 Jenkins 패키지를 찾으면 이를 다운로드하여 설치합니다.
이 명령을 실행해 보겠습니다.
sudo yum install jenkins -y
이 명령을 사용하여 Jenkins를 시작할 수 있습니다.
sudo systemctl start jenkins
Jenkins가 실행 중인지 확인하려면 다음 명령을 사용하세요.
sudo systemctl status jenkins
아래 스크린샷과 같이 출력이 표시됩니다.
이제 Jenkins가 실행 중일 것입니다.
Jenkins 애플리케이션에 액세스하려면 웹 브라우저를 열고 EC2 인스턴스의 퍼블릭 IP 주소 또는 도메인 이름과 포트 8080을 차례로 입력합니다.
http://<your-ec2-ip>:8080
Jenkins에 처음 액세스하면 자동 생성된 비밀번호로 잠깁니다.
다음 명령을 사용하여 이 비밀번호를 표시해야 합니다.
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
이 비밀번호를 복사하고 브라우저로 돌아가서 관리자 비밀번호 필드에 붙여넣고 "계속"을 클릭하세요.
그러면 이 웹페이지를 보실 수 있습니다.
이제 Jenkins 서버를 사용할 수 있습니다.
이제 Jenkins가 제대로 작동하므로 Jenkins 파이프라인 생성을 시작할 수 있습니다. Jenkins 파이프라인을 생성하려면 새로운 "Freestyle 프로젝트"를 생성해야 합니다. 새로운 "Freestyle 프로젝트"를 생성하려면 Jenkins 대시보드로 이동하여 "새 항목" 버튼을 클릭해야 합니다.
Github "Freestyle project"("파이프라인" 이름은 앞으로 계속 사용됩니다)의 이름을 입력하고 "OK" 버튼을 클릭합니다.
그런 다음 파이프라인에 대한 설명을 제공합니다.
그런 다음 "적용" 및 "저장" 버튼을 클릭합니다. 그 후에는 이 튜토리얼에서 구축할 파이프라인의 기초를 만들었다는 의미입니다.
이제 Jenkins가 AWS EC2 Virtual Server 인스턴스에서 실행되므로 파이프라인으로 Git을 구성할 수 있습니다.
Git은 소프트웨어 팀이 특별한 종류의 데이터베이스에서 코드에 대한 모든 수정 사항을 추적할 수 있도록 설계된 무료 오픈 소스 분산 버전 제어 시스템(VCS)입니다. 실수가 발생한 경우 개발자는 시간을 되돌려 이전 버전의 코드를 비교하여 실수를 수정하는 동시에 모든 팀 구성원의 업무 중단을 최소화할 수 있습니다. VCS는 특히 다음과 같은 경우에 유용합니다.
가장 널리 사용되는 버전 제어 시스템인 Git을 사용하면 프로젝트 Github 리포지토리에서 Jenkins가 설치된 EC2 가상 서버 인스턴스로 최신 코드를 가져올 수 있습니다.
Git을 설치하려면 이 명령을 사용하세요.
sudo yum install git -y
이제 이 명령을 사용하여 Git이 작동하는지 확인하세요.
git --version
이제 Git은 EC2 Virtual Server 인스턴스에서 제대로 작동합니다.
Git이 EC2 Virtual Server 인스턴스에서 제대로 작동하므로 이제 Jenkins를 Git과 통합할 수 있습니다.
이 통합을 시작하려면 Jenkins Github 플러그인을 설치해 보겠습니다.
Jenkins 대시보드 섹션으로 이동합니다.
"Jenkins 관리" 버튼을 클릭한 다음 "플러그인 관리" 버튼을 클릭합니다.
"사용 가능한 플러그인" 버튼을 클릭하세요.
Github 플러그인 검색 상자를 찾으세요.
Github 플러그인을 선택하세요.
Github 플러그인을 선택하세요. 그런 다음 '다시 시작하지 않고 설치' 버튼을 클릭합니다.
Github 플러그인 다운로드가 끝날 때까지 기다리십시오.
예! Jenkins Github 플러그인이 설치되었습니다.
이제 GitHub Jenkins 플러그인이 설치되었으므로 최종적으로 Jenkins를 Git과 통합하도록 이 플러그인을 구성할 수 있습니다. 그렇게 하려면 “상위 페이지로 돌아가기” 버튼을 클릭하여 메인 페이지로 돌아가야 합니다.
그런 다음 메인 페이지에서 "Jenkins 관리" 버튼을 클릭한 다음 "글로벌 도구 구성" 버튼을 클릭해야 합니다.
그런 다음 전역 도구 구성 웹 페이지에서 Git 섹션으로 이동해야 합니다.
Git 섹션에서는 컴퓨터의 Git에 대한 이름과 경로를 제공하여 Git을 구성해야 합니다.
그런 다음 "적용" 및 "저장" 버튼을 클릭하세요**.**
여기에서 Jenkins Github 플러그인 구성이 완료되었습니다.
이제 Jenkins Github 플러그인이 설치 및 구성되었으므로 파이프라인 내에서 이 플러그인을 활용할 수 있습니다. 이렇게 하면 모듈 2에서 생성한 파이프라인이 지정된 GitHub 저장소에서 프로젝트 코드를 가져올 수 있습니다.
이 플러그인을 파이프라인에 통합하려면 소스 코드 관리 섹션으로 이동하여 파이프라인에서 Git을 선택해야 합니다. 그런 다음 프로젝트 저장소 URL을 제공해야 합니다. 프로젝트 저장소가 Github에 공개된 경우 자격 증명을 제공할 필요가 없습니다. 프로젝트 저장소가 Github에서 비공개인 경우 자격 증명을 제공해야 합니다.
다음 Repository URL인 https://github.com/Sunagatov/Hello.git 에서 내 프로젝트를 사용할 수 있습니다.
복사하여 " Repository URL" 입력에 붙여넣기만 하면 됩니다. 그런 다음 "적용" 및 "저장" 버튼을 클릭하여 파이프라인과 Git 통합을 완료합니다.
이제 업데이트된 파이프라인을 사용하여 Github에서 프로젝트를 가져올 수 있습니다. 그렇게 하려면 **“지금 빌드”**버튼을 클릭해야 합니다. 결과적으로 빌드 기록에 성공적인 빌드가 표시됩니다.
빌드 기록에서 첫 번째 빌드를 엽니다.
이제 첫 번째 빌드의 성공적인 작업 결과를 볼 수 있습니다. AWS EC2 터미널을 열면. 파이프라인이 잘 작동하는 것을 확인할 수 있습니다.
이 명령을 사용하면 됩니다.
cd /var/lib/jenkins/workspace/{your pipeline name}
이렇게 하면 Github의 프로젝트가 AWS EC2 가상 서버 인스턴스로 당겨졌음을 확인할 수 있습니다.
Apache Maven은 소프트웨어 개발에서 널리 사용되는 빌드 자동화 및 프로젝트 관리 도구입니다. 프로젝트 종속성을 관리하고 일관된 빌드 수명 주기를 제공하여 코드 컴파일, 테스트 및 패키징 프로세스를 간소화합니다. Maven은 XML 기반 구성 파일(POM 파일)을 사용하여 프로젝트 구조, 종속성 및 작업을 정의하므로 개발자는 복잡한 소프트웨어 프로젝트를 효율적으로 관리하고 배포할 수 있습니다.
이제 Git을 파이프라인에 통합했으므로 프로젝트를 빌드, 테스트 및 패키징할 수 있는 Apache Maven을 통합하여 파이프라인을 더욱 향상할 수 있습니다. 이를 위해서는 Jenkins와 Git이 설치된 AWS EC2 Virtual Server 인스턴스에 Apache Maven을 설치해야 합니다.
Apache Maven을 다운로드하려면 "/opt" 디렉터리로 이동하세요.
cd /opt
그런 다음 이 명령을 사용하십시오.
sudo wget https://dlcdn.apache.org/maven/maven-3/3.9.4/binaries/apache-maven-3.9.4-bin.tar.gz
이 명령은 최신 공식 Apache Maven을 다운로드합니다(공식 Apache Maven 웹사이트에서 최신 버전을 확인하세요). 최신 공식 Apache Maven 릴리스를 찾으려면 https://maven.apache.org/download.cgi 링크를 사용하십시오.
다운로드한 아카이브에서 Apache Maven을 추출하려면 다음 명령을 사용하십시오.
sudo tar -xvzf apache-maven-*.tar.gz
이 명령을 사용하여 루트 폴더로 이동합니다.
cd ~
이 명령을 사용하여 .bash_profile 파일을 편집하십시오.
vi .bash_profile
JAVA_HOME 및 M2_HOME 변수를 추가합니다.
JAVA_HOME 의 경우 JDK11 경로를 할당하고 M2_HOME 변수의 경우 maven 디렉터리 경로를 할당합니다.
JDK 경로를 찾으려면 이 명령을 사용하십시오.
sudo find / -name java
VIM 사용 방법
변경 사항을 저장합니다.
그런 다음 이 명령을 실행하여 시스템 변수를 새로 고칩니다.
source .bash_profile
$PATH 를 확인하려면 이 명령을 사용하세요.
echo $PATH
Apache Maven을 확인하려면 이 명령을 사용하십시오.
mvn -v
모든 작업을 올바르게 수행했다면 Apache Maven 버전을 볼 수 있습니다.
Apache Maven은 EC2 인스턴스에서 사용할 수 있으므로 Apache Maven 플러그인을 설치하여 파이프라인과 통합할 수 있습니다.
이를 달성하려면 다음 단계를 따르십시오.
다운로드 프로세스가 끝날 때까지 기다리십시오.
그런 다음 "톱 페이지로 돌아가기" 버튼을 클릭합니다.
Apache Maven Jenkins 플러그인이 성공적으로 설치되면 이제 모듈 2와 3에서 생성하고 업데이트한 파이프라인 내에서 이 플러그인을 활용할 수 있습니다.
이렇게 하려면 다음 단계를 따르세요.
그런 다음 "Maven" 섹션으로 이동하십시오. “Maven 추가” 버튼을 클릭하세요. "자동으로 설치"를 선택 취소하십시오.
그런 다음 이름 과 MAVEN_HOME 경로를 추가합니다.
“적용” 및 “저장” 버튼을 클릭하세요.
여기에서 Apache Maven Jenkins 플러그인 구성이 완료되었습니다.
이제 Apache Maven GitHub 플러그인이 설치 및 구성되었으므로 파이프라인 내에서 Apache Maven을 활용할 수 있습니다. 이렇게 하면 "[모듈 2]: Jenkins 서버"에서 생성한 파이프라인이 프로젝트 코드를 빌드하여 jar 아티팩트를 생성할 수 있습니다.
Apache Maven을 파이프라인에 통합하려면 다음 단계를 수행해야 합니다.
마지막으로 "적용" 및 "저장" 버튼을 클릭하여 Apache Maven과 파이프라인의 통합을 완료해야 합니다.
이제 업데이트된 파이프라인을 사용하여 Github 프로젝트를 빌드할 수 있습니다. 그렇게 하려면 **“지금 빌드”**버튼을 클릭해야 합니다. 결과적으로 빌드 기록에 성공적인 작업 결과가 표시됩니다.
AWS EC2 터미널을 열면. 파이프라인이 잘 작동하는 것을 확인할 수 있습니다.
이 명령을 사용하면 됩니다.
cd /var/lib/jenkins/workspace/{your pipeline name}/target
이렇게 하면 GitHub에서 프로젝트가 성공적으로 빌드되었음을 나타내는 JAR 아티팩트를 볼 수 있습니다.
이제 Docker와 Ansible을 설치할 "Ansible Server"라는 이름의 새 EC2 인스턴스를 생성해 보겠습니다.
이 자습서의 " AWS EC2 가상 서버 인스턴스 시작" 섹션의 지침을 사용하여 이 단계를 완료하세요. 보안 그룹 설정을 추가하는 것을 잊지 마세요. 이를 통해 Docker와 SSH가 각각 포트 8080과 22에서 작동할 수 있습니다.
“연결” 버튼을 클릭하세요.
이제 EC2 Virtual Server 인스턴스 온라인 터미널을 볼 수 있습니다.
sudo chown ansible-admin:ansible-admin /opt/docker
이제 Ansible EC2 인스턴스에 docker를 설치해야 합니다. 그러기 위해서는 새로운 docker 폴더를 생성해야 합니다.
sudo mkdir /opt/docker
그런 다음 다음 명령을 실행하여 docker를 설치합니다.
sudo yum install docker -y
Docker 관리자 권한을 부여하려면 현재 사용자 "ansible-admin" 을 "AnsibleServer" EC2 가상 서버의 Docker 그룹에 추가해야 합니다.
sudo usermod -a -G docker ansible-admin
이러한 변경 사항을 적용하려면 로그아웃했다가 다시 로그인해야 합니다.
그런 다음 다음 명령을 실행할 수 있습니다
id ansible-admin
새로운 docker 사용자가 존재하는지 확인합니다.
이제 Docker가 Ansible EC2 인스턴스에 설치되었으므로 다음 명령을 실행하여 시작할 수 있습니다.
sudo systemctl start docker
Docker가 시작되면 다음 명령을 실행할 수 있습니다.
sudo systemctl status docker
현재 docker가 활성화되어 실행 중인지 확인하세요.
파이프라인의 최종 버전에서는 GitHub 프로젝트에서 새 Docker 이미지를 생성하고 이를 Docker Hub에 푸시하는 과정이 포함됩니다. 이를 달성하려면 GitHub 프로젝트에 Dockerfile이 포함되어 있어야 합니다.
“ [모듈 3]: Git 및 Github” 모듈에서 제공되는 “Hello” 프로젝트를 사용한 경우 이 프로젝트 저장소에 Dockerfile이 이미 포함되어 있으므로 새 Dockerfile을 생성할 필요가 없습니다.
FROM eclipse-temurin:17-jre-jammy ENV HOME=/opt/app WORKDIR $HOME ADD hello-0.0.1-SNAPSHOT.jar $HOME ENTRYPOINT ["java", "-jar", "/opt/app/hello-0.0.1-SNAPSHOT.jar" ]
자체 프로젝트 저장소를 사용했지만 여기에 Dockerfile이 포함되어 있지 않은 경우 새 Dockerfile을 생성해야 합니다.
새 Dockerfile을 생성하려면 다음 명령을 실행하여 새 파일을 생성합니다.
sudo touch Dockerfile
그런 다음 컨테이너화된 애플리케이션 환경을 구축하는 방법을 설명하는 일련의 명령으로 이 파일을 채울 수 있습니다. 이러한 명령에는 이미지에 파일 복사, 소프트웨어 설치, 환경 변수 설정, 컨테이너 구성과 같은 작업이 포함됩니다.
이러한 명령으로 Dockerfile을 채우려면 다음 명령을 실행합니다.
vim Dockerfile
Dockerfile을 사용할 준비가 되었습니다.
이제 Dockerfile을 사용할 준비가 되었으므로 **"JenkinsServer"**EC2 인스턴스에서 프로젝트의 JAR 아티팩트를 복사하여 "AnsibleServer" EC2 인스턴스에 붙여넣으세요. 이 전송은 파이프라인을 통해 추가로 자동화된다는 점에 유의하는 것이 중요합니다.
이 단계를 완료하면 설정한 Docker 환경과 함께 Dockerfile을 테스트할 준비가 됩니다.
테스트를 시작하기 전에 Dockerhub에서 자신을 인증하세요. 다음 명령을 실행하십시오.
docker login
이 명령은 사용자 이름과 비밀번호를 포함하여 Dockerhub 로그인 자격 증명을 제공하라는 메시지를 표시합니다.
이로써 Docker 에 로그인하는 과정이 완료되었으며 이제 테스트를 진행할 준비가 되었습니다.
Dockerhub에 성공적으로 로그인하면 이제 준비한 Dockerfile 테스트를 시작할 준비가 되었습니다.
도커 이미지를 생성하려면 이 명령을 실행하세요.
docker build -t hello:latest .
그런 다음 후속 명령을 실행하여 Dockerhub에 이미지를 쉽게 업로드할 수 있는 태그를 설정합니다.
docker tag hello:latest zufarexplainedit/hello:latest
마지막으로 이 명령을 실행하여 Docker 이미지를 Dockerhub에 푸시합니다.
docker push zufarexplainedit/hello:latest
다음 단계에 따라 Dockerhub 계정으로 이동하여 새 이미지를 볼 수 있는지 여부를 확인하세요.
이제 이미지가 효과적으로 추가되었는지 확인해야 합니다. 이 결과는 Docker 환경이 성공적으로 설치되었으며 Dockerfile이 올바른지 확인합니다.
이제 EC2 가상 서버 인스턴스에 Ansible 서버를 구성해 보겠습니다.
Ansible을 실행하려면 가상 서버가 필요합니다.
이 튜토리얼의 [모듈 1]: AWS EC2 가상 서버 섹션의 지침에 따라 이 단계를 완료하고 Ansible용 EC2 가상 서버 인스턴스를 생성하세요.
보안 그룹 설정을 추가하는 것을 잊지 마세요. 이를 통해 Ansible 과 SSH가 각각 포트 8080 과 22 에서 작동할 수 있습니다.
EC2 가상 서버 인스턴스를 구별하려면 "AnsibleServer" 라는 이름을 사용하십시오.
새로운 “AnsibleServer” EC2 인스턴스에 대해 “CI_CD_Pipeline” 보안 그룹과 “CI_CD_Pipeline_Key_Pair” 를 재사용할 수 있습니다.
AWS 콘솔 홈 페이지 → EC2 관리 콘솔 대시보드 → 인스턴스 → AnsibleServer로 이동합니다.
그런 다음 "연결" 버튼을 클릭하십시오.
그러면 이런 웹페이지가 보일 것입니다. "연결" 버튼을 다시 클릭해야 합니다.
이제 EC2 가상 서버 인스턴스 온라인 터미널을 볼 수 있습니다.
이제 EC2 가상 서버 인스턴스에 Ansible Server를 구성해 보겠습니다.
EC2 가상 서버 인스턴스에 AnsibleServer를 구성할 때 가장 먼저 해야 할 일은 호스트 이름을 변경하는 것입니다.
해보자. 호스트 이름 파일을 열려면 다음 명령을 실행하십시오.
sudo vi /etc/hostname
다음과 같은 내용이 표시됩니다.
이 호스트 이름을 "ansible-server"로 바꾸십시오. 그런 다음 재부팅하십시오.
sudo init 6
이제 AWS EC2 가상 서버 인스턴스에 새로운 ansible-admin 사용자를 추가해 보겠습니다.
그렇게 하려면 다음 명령을 사용하십시오.
sudo useradd ansible-admin
그런 다음 ansible-admin 사용자의 비밀번호를 설정하십시오.
sudo passwd ansible-admin
또한 sudoers 파일을 편집하여 사용자 권한을 구성해야 합니다.
sudo visudo
이 sudoers 파일에 "ansible-admin ALL=(ALL) ALL"을 추가합니다.
또한 PasswordAuthentication을 활성화하려면 /etc/ssh/sshd_config 파일을 편집해야 합니다.
sudo vi /etc/ssh/sshd_config
그런 다음 서비스를 다시 로드하여 이러한 변경 사항을 확인해야 합니다.
sudo service sshd reload
이 명령을 실행하면 다음이 표시됩니다.
이제 이 명령을 사용하면 모든 추가 명령에 sudo를 추가하지 않아도 됩니다.
sudo su - ansible-admin
이 문서에서는 K8s EC2 가상 서버 인스턴스와 같은 원격 서버를 관리할 계획입니다. 그렇기 때문에 SSH 키를 설정해야 합니다.
ssh-keygen
이 명령을 실행하면 다음이 표시됩니다.
이제 SSH 키가 생성되어 사용할 준비가 되었습니다.
이제 “AnsibleServer” EC2 가상 서버 인스턴스에 Ansible을 설치할 수 있습니다.
해보자.
Ansible을 설치하려면 이 명령을 실행하세요.
sudo amazon-linux-extras install ansible2
Ansible을 확인하려면 다음 명령을 사용하십시오.
ansible --version
이 명령을 실행하면 다음이 표시됩니다.
Ansible이 "AnsibleServer" EC2 가상 서버 인스턴스에 설치되어 있으므로 Jenkins를 구성하여 Ansible과 통합할 수 있습니다. Jenkins를 Ansible이 설치된 EC2 Virtual Server 인스턴스 및 Kubernetes가 설치된 다른 EC2 Virtual Server 인스턴스와 통합하려면 "Publish over SSH" 플러그인을 설치해야 합니다.
“대시보드” → “ Jenkins 관리” → “시스템 구성” → “사용 가능한 플러그인” 으로 이동합니다.
그런 다음 검색 상자에 "Publish over SSH"를 입력합니다.
'다시 시작하지 않고 설치' 버튼을 클릭하세요. 다운로드 프로세스가 끝날 때까지 기다리십시오.
이제 "Publish over SSH" 플러그인이 Jenkins EC2 Virtual Server 인스턴스에 설치되었습니다.
Apache Maven Jenkins 플러그인이 성공적으로 설치되면 이제 모듈 2와 3에서 생성하고 업데이트한 파이프라인 내에서 이 플러그인을 활용할 수 있습니다.
이렇게 하려면 다음 단계를 따르세요.
"대시보드" → "Jenkins 관리" → "시스템 구성" → "SSH를 통해 게시" 로 이동합니다.
호스트 이름, 사용자 이름, 개인 키(또는 해당하는 경우 비밀번호)를 포함하여 스크린샷에 있는 모든 필수 데이터를 입력하세요.
그런 다음 "적용" 및 "저장" 버튼을 클릭합니다.
여기에서 "Publish over SSH" Jenkins 플러그인 구성이 완료되었습니다.
그런 다음 "테스트 구성"을 클릭하여 플러그인이 올바르게 작동하는지 확인하십시오.
왼쪽에서 테스트 플러그인 구성 상태가 “Success”인 것을 볼 수 있습니다. 이는 플러그인 구성이 정확하다는 것을 의미합니다.
프로젝트 JAR이 저장될 AnsibleServer EC2 인스턴스에 새 폴더를 만들어야 합니다. 이 jar는 나중에 Docker 이미지를 만드는 데 사용됩니다.
시작하자.
AnsibleServer EC2 인스턴스의 "/opt" 폴더로 이동합니다.
cd /opt
거기에 새 폴더 "docker" 를 만듭니다.
sudo mkdir docker
이 "docker" 폴더에 권한을 부여하십시오.
sudo chown ansible-admin:ansible-admin docker
이제 이 명령을 실행하여 “docker” 폴더 권한을 확인합니다.
ll
“ansible-admin” 사용자로 “docker” 폴더에 접근할 수 있는 것을 확인할 수 있습니다.
이제 “Publish over SSH” Github 플러그인이 설치 및 구성되었으므로 이제 이를 “[모듈 2]: Jenkins 서버”에서 생성한 파이프라인에 통합하여 “ JenkinsServer” 에서 프로젝트 jar 아티팩트를 다음으로 전송할 수 있습니다. “앤서블서버” .
"Publish over SSH" Github 플러그인을 파이프라인에 통합하려면 다음 단계를 따라야 합니다.
마지막으로 "적용" 및 "저장" 버튼을 클릭하여 파이프라인과 "SSH를 통해 게시" 플러그인 통합을 완료해야 합니다.
이제 업데이트된 파이프라인을 사용하여 프로젝트 jar 아티팩트를 " JenkinsServer" 에서 "AnsibleServer" 로 전송할 수 있습니다. 그렇게 하려면 "지금 빌드" 버튼을 클릭해야 합니다. 결과적으로 빌드 기록에 성공적인 작업 결과가 표시됩니다.
“AnsibleServer” AWS EC2 터미널을 열면. 파이프라인이 잘 작동하는 것을 확인할 수 있습니다.
이 명령을 사용하면 됩니다.
cd /opt/docker
이렇게 하면 GitHub에서 프로젝트가 성공적으로 빌드되었음을 나타내는 JAR 아티팩트를 볼 수 있습니다.
Ansible 플레이북을 실행할 때 실행해야 하는 호스트를 지정합니다. 이 작업은 두 가지 방법으로 수행할 수 있습니다.
hosts
매개변수를 IP 주소 또는 호스트 이름 목록으로 설정할 수 있습니다./etc/ansible/hosts
입니다.
/etc/ansible/hosts
편집하면 플레이북을 실행할 때마다 IP 주소를 기록하지 않고도 호스트 그룹을 쉽게 관리할 수 있습니다.
다음 명령을 실행하여 AnsibleServer EC2 인스턴스 호스트를 찾아보겠습니다.
sudo ifconfig
AnsibleServer EC2 인스턴스 호스트를 찾은 후 다음 명령을 실행하여 Ansible 호스트 파일에 추가할 수 있습니다.
sudo vi /etc/ansible/hosts
"[ansible]"을 참조로 추가할 수도 있습니다.
서버 클러스터를 관리하고 모든 서버에 플레이북을 적용하려는 경우 플레이북에 각 서버의 IP 주소를 지정하는 대신 인벤토리 파일의 그룹에 모든 서버를 추가한 다음 플레이북의 그룹입니다.
Ansible은 원격 서버에서 작업을 자동화하도록 설계되었습니다. 비밀번호 없는 SSH 인증을 사용하면 수동으로 비밀번호를 입력할 필요 없이 Ansible이 해당 서버에 연결할 수 있습니다.
ansible-admin 사용자의 SSH 키를 사용하여 컴퓨터에서 다른 컴퓨터(예: IP 주소 172.31.34.41의 컴퓨터)로 보안 연결을 생성하려면 이 명령을 실행하십시오.
sudo ssh-copy-id -i /home/{your user name}/.ssh/id_rsa.pub {your user name}@{your host address}
내 경우에는 이렇게 보입니다.
sudo ssh-copy-id -i /home/ansible-admin/.ssh/id_rsa.pub [email protected]
이제 "추가된 키 수: 1"을 볼 수 있습니다. 이는 비밀번호 없는 SSH 인증 설치가 성공적으로 완료되었음을 의미합니다.
이제 Ansible이 모두 설정되어 준비가 완료되었으므로 파이프라인을 위한 새로운 Ansible 플레이북을 만들 수 있습니다. 이 플레이북을 사용하면 Ansible이 새 Docker 이미지를 생성하여 Dockerhub에 보낼 수 있습니다.
방법은 다음과 같습니다.
touch hello-app.yml
hello-app.yml
파일을 편집합니다. 이 명령을 사용하여 편집할 수 있도록 엽니다. vi hello-app.yml
--- - hosts: ansible user: root tasks: - name: create docker image command: docker build -t hello:latest . args: chdir: /opt/docker - name: create tag to push image onto dockerhub command: docker tag hello:latest zufarexplainedit/hello:latest - name: push docker image onto dockerhub command: docker push zufarexplainedit/hello:latest
Docker 작업을 위한 Ansible 플레이북을 사용할 준비가 되었습니다.
Ansible, Ansible 플레이북, AnsibleServer 및 JenkinsServer가 모두 올바르게 구성되었으면 이제 Ansible 플레이북을 테스트할 차례입니다.
Ansible 플레이북 위치로 이동합니다.
cd /opt/docker
그런 다음 다음 명령을 실행하십시오.
sudo -u ansible-admin ansible-playbook /opt/docker/hello-app.yml
완료되면 Ansible 플레이북의 성공적인 실행 결과가 표시됩니다.
또한 잠시 시간을 내어 Dockerhub 계정을 방문하여 이제 새 이미지가 표시되는지 확인하세요.
새로 추가된 이미지가 표시됩니다. 이 결과는 Ansible 플레이북이 올바른지 확인합니다.
이제 “Publish over SSH” Github 플러그인, Ansible 및 Docker가 설치 및 구성되었으므로 이제 “[모듈 2]: Jenkins 서버”에서 생성한 파이프라인에 이들을 모두 통합하여 프로젝트 jar 아티팩트를 전송할 수 있습니다. " JenkinsServer" 에서 "AnsibleServer" 로 프로젝트에서 새 Docker 이미지를 빌드한 다음 이 Docker 이미지를 Dockerhub에 푸시합니다.
이를 달성하려면 다음 단계를 따라야 합니다.
마지막으로 "적용" 및 "저장" 버튼을 클릭하여 파이프라인과 Ansible Docker 작업 통합을 완료합니다.
이제 업그레이드된 파이프라인을 테스트하여 프로젝트 jar 아티팩트를 " JenkinsServer" 에서 "AnsibleServer" 로 원활하게 전송한 다음 프로젝트에서 새 Docker 이미지를 빌드하고 이 Docker 이미지를 Dockerhub에 푸시할 수 있습니다. 그렇게 하려면 "지금 빌드" 버튼을 클릭해야 합니다. 결과적으로 빌드 기록에 성공적인 작업 결과가 표시됩니다.
또한 잠시 시간을 내어 Dockerhub 계정을 방문하여 이제 새 이미지가 표시되는지 확인하세요.
새로 추가된 이미지가 표시됩니다. 이 결과는 Docker 작업이 포함된 Ansible 플레이북이 파이프라인에 성공적으로 통합되었음을 확인합니다.
이제 EC2 인스턴스에서 K8을 구성해 보겠습니다. Kubernetes 클러스터와 추가로 상호 작용하기 위해 새 EC2 인스턴스를 생성하고 kubectl 명령줄 도구를 설치하려고 합니다.
이 자습서의 " AWS EC2 가상 서버 인스턴스 시작" 섹션의 지침을 사용하여 이 단계를 완료하세요.
보안 그룹 설정을 추가하는 것을 잊지 마세요. 이를 통해 모든 도구 와 SSH가 각각 포트 8080 과 22 에서 작동할 수 있습니다.
EC2 가상 서버 인스턴스를 구별하려면 "K8sServer" 라는 이름을 사용하십시오.
새로운 “K8sServer” EC2 인스턴스에 대해 “CI_CD_Pipeline” 보안 그룹과 “CI_CD_Pipeline_Key_Pair” 를 재사용할 수 있습니다.
“연결” 버튼을 클릭하세요.
이제 EC2 Virtual Server 인스턴스 온라인 터미널을 볼 수 있습니다.
EC2 가상 서버 인스턴스에서 KuberenetesServer를 구성할 때 가장 먼저 해야 할 일은 호스트 이름을 변경하는 것입니다.
해보자. 호스트 이름 파일을 열려면 다음 명령을 실행하십시오.
sudo vi /etc/hostname
이런 것을 봐야합니다.
이 호스트 이름을 "kubernetes-server" 로 바꾼 다음 재부팅하세요.
sudo init 6
호스트 이름이 변경되었습니다.
AWS 버전을 확인하려면 이 명령을 사용하십시오.
aws --version
이렇게 하면 현재 aws-cli 버전을 확인할 수 있습니다.
aws-cli/1.18 버전이 보이면 최신 버전을 다운로드해야 합니다.
이제 EC2 인스턴스에 이전 aws-cli 버전이 있다는 것을 알았으므로 이를 업데이트해야 합니다. 이를 위해서는 AWS → 설명서 → AWS 명령줄 인터페이스 → 버전 2 사용 설명서로 이동하세요.
컬 명령을 복사하여 붙여넣습니다.
먼저 이 명령을 실행하여 awscli 버전 2를 다운로드합니다.
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
다운로드 프로세스가 시작될 때까지 기다리십시오.
이런 것을 봐야합니다.
둘째, awscli 버전 2 아카이브의 압축을 풀려면 이 명령을 실행해야 합니다.
unzip awscliv2.zip
셋째, awscli 버전 2를 설치하려면 이 명령을 실행해야 합니다.
sudo ./aws/install
그런 다음 Kubernetes EC2 Virtual Server 인스턴스 온라인 터미널을 다시 로드합니다.
다음으로 이 명령을 사용하여 AWS 버전을 확인하세요.
aws --version
aws cli에 aws-cli/2가 있는 것을 볼 수 있습니다.
Kubectl은 기본 인프라에 관계없이 모든 Kubernetes 클러스터와 상호작용하기 위한 기본 명령줄 도구입니다. 이를 통해 리소스를 관리하고, 애플리케이션을 배포하고, 네트워킹을 구성하고, 로그에 액세스하고, Kubernetes 클러스터 내에서 다양한 기타 작업을 수행할 수 있습니다.
이제 Kubernetes 클러스터와 추가로 상호작용하기 위해 kubectl 명령줄 도구를 설치해야 합니다. 이를 위해서는 AWS → 설명서 → Amazon EKS → 사용 설명서 → kubectl 설치 또는 업데이트 → Linux 로 이동해야 합니다.
아니면 https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html 링크를 클릭하세요.
먼저 이 명령을 실행하여 kubectl을 다운로드합니다.
curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/1.27.1/2023-04-19/bin/linux/amd64/kubectl
다운로드 프로세스를 기다립니다.
당신은 이런 것을 보게 될 것입니다.
kubectl에 권한을 부여합니다.
chmod +x kubectl
kubectl을 /usr/local/bin 폴더로 이동합니다.
sudo mv kubectl /usr/local/bin
kubectl 버전을 확인하세요.
kubectl version --output=yaml
Eksctl 은 Amazon EKS 서비스에 특별히 맞춰진 또 다른 명령줄 도구입니다. Eksctl을 사용하면 AWS EKS 클러스터를 생성하고, 노드 그룹을 관리하고, AWS 인프라 설정 및 관리의 대부분을 추상화하여 IAM 역할 및 기타 AWS 서비스와 통합하는 등 EKS 관련 작업을 수행할 수 있습니다.
명령을 실행하여 kubectl을 다운로드합니다.
curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
eksctl을 /usr/local/bin 폴더로 이동합니다.
sudo mv /tmp/eksctl /usr/local/bin
eksctl 버전을 확인하세요.
eksctl version
버전을 보셔야 합니다
IAM 역할을 생성하여 “KubernetesServer” EC2 인스턴스에 연결해야 합니다.
그렇게 하려면 검색 상자에서 EC2를 찾아야 합니다.
https://us-east-1.console.aws.amazon.com/ec2 / 링크를 클릭하여 EC2 가상 서버를 선택합니다.
IAM 대시보드 → 역할 로 이동합니다.
IAM 역할 웹 페이지에서 "역할 생성" 버튼을 클릭합니다.
그런 다음 “AWS 서비스”, “EC2”를 선택합니다. 그리고 “다음” 버튼을 클릭하세요.
그런 다음 검색 상자에서 "AmazonEC2FullAccess" , "AmazonEC2FullAccess" , "IAMFullAccess" , "AWSCloudFormationFullAccess" 를 찾은 다음 "권한 추가" 버튼을 클릭합니다.
그런 다음 "다음" 버튼을 클릭하십시오.
그런 다음 "역할 이름" 입력에 "Eksctl_Role"을 입력합니다.
그리고 '역할 만들기' 버튼을 클릭하세요.
최종적으로 역할이 생성됩니다.
AWS EC2 인스턴스 웹페이지로 이동합니다. “KuberbetesServer”를 선택하세요. 그런 다음 “작업” → “보안” → “IAM 역할 수정”을 클릭합니다.
"Eksctl_Role"을 선택한 다음 "IAM 역할 업데이트" 버튼을 클릭합니다.
이제 IAM 역할이 “EKS_Server” 및 eksctl 도구와 연결되었습니다.
Amazon EKS(Elastic Kubernetes Service) 클러스터는 AWS의 관리형 Kubernetes 환경으로, 설정, 확장, 유지 관리와 같은 복잡한 인프라 작업을 자동화합니다. 컨테이너화된 애플리케이션을 배포, 관리 및 확장하고 운영을 간소화하며 개발자가 기본 인프라 관리보다 코딩에 집중할 수 있도록 효율적이고 안전하며 AWS에 최적화된 플랫폼을 제공하므로 이는 필수적입니다.
이제 EKS 클러스터를 설정할 차례입니다.
이를 달성하려면 다음 단계를 따르십시오.
eksctl create cluster --name cluster-name \ --region region-name \ --node-type instance-type \ --nodes-min 2 \ --nodes-max 2 \ --zones <AZ-1>,<AZ-2>
예를 들어 내 경우에는 이런 식이다.
eksctl create cluster --name zufarexplainedit \ --region eu-north-1 \ --node-type t3.micro
수정된 명령을 실행하고 클러스터 생성 프로세스가 완료될 때까지 참을성 있게 기다립니다. AWS CloudFormation 웹 페이지에 EKS 클러스터 상태가 "생성 중" 으로 표시되어 있는 것을 확인할 수 있습니다.
클러스터 생성 절차는 일반적으로 약 20분 정도 소요됩니다. 완료되면 터미널에 프로세스 결과가 표시됩니다.
또한 AWS CloudFormation 웹 페이지에서 성공적인 EKS 클러스터 생성 상태를 확인할 수 있습니다.
Kubernetes 배포 YAML 파일은 Kubernetes 클러스터 내에서 특정 애플리케이션 또는 서비스를 관리하고 유지하는 방법을 정의하는 YAML 형식으로 작성된 구성 스크립트입니다. 이는 애플리케이션을 실행하는 컨테이너의 배포, 확장, 업데이트 및 모니터링을 조정하기 위한 지침을 캡슐화합니다. 이 파일에는 컨테이너 이미지, 원하는 복제본 수, 리소스 제한, 환경 변수, 네트워킹 설정 등과 같은 세부 정보가 포함되어 있습니다. Kubernetes 클러스터에 적용하면 배포 YAML 파일이 애플리케이션의 원하는 상태를 보장하고 컨테이너 생성, 확장 및 복구를 자동으로 관리하여 원하는 수준의 가용성과 안정성을 유지합니다.
이제 Kubernetes 클러스터, eksctl, kubectl이 설치 및 구성되면 Kubernetes 배포 yaml 파일을 생성할 수 있습니다.
다음 명령을 실행하면 됩니다.
touch hello-app-deployment.yaml
그런 다음, 다음 명령을 실행하여 이 파일을 편집하십시오.
vi hello-app-deployment.yaml
hello-app-deployment.yaml에 이 콘텐츠를 추가합니다.
apiVersion: apps/v1 kind: Deployment metadata: name: zufarexplainedit-hello-app labels: app: hello-app spec: replicas: 2 selector: matchLabels: app: hello-app template: metadata: labels: app: hello-app spec: containers: - name: hello-app image: zufarexplainedit/hello imagePullPolicy: Always ports: - containerPort: 8080 strategy: type: RollingUpdate rollingUpdate: maxSurge: 1 maxUnavailable: 1
이제 hello-app-deployment.yaml이 생성되어 사용할 준비가 되었습니다.
Kubernetes Service YAML 파일은 Pod 세트에 대한 네트워크 추상화를 정의하는 YAML 형식으로 작성된 구성 스크립트로, Kubernetes 클러스터 내에서 일관되게 액세스할 수 있습니다. 이 파일에는 다른 서비스나 외부 클라이언트가 서비스를 검색, 액세스 및 로드 밸런싱하는 방법이 간략하게 설명되어 있습니다. 여기에는 서비스 유형(ClusterIP, NodePort, LoadBalancer), 포트 번호, 포드 식별을 위한 선택기 등과 같은 사양이 포함됩니다. Kubernetes 클러스터에 적용하면 서비스 YAML 파일은 트래픽을 적절한 포드로 라우팅하는 가상 IP 및 포트를 생성하여 기본 포드 변경 사항을 추상화하고 통신을 위한 안정적인 엔드포인트를 제공하여 원활한 연결 및 동적 확장을 지원합니다.
Kubernetes 클러스터, eksctl, kubectl이 설치 및 구성되면 Kubernetes Service yaml 파일을 생성할 수 있습니다.
그렇게 하려면 다음 명령을 실행하여 Kubernetes Service yaml 파일을 생성해야 합니다.
touch hello-app-service.yaml
그런 다음, 다음 명령을 실행하여 이 파일을 편집하십시오.
vi hello-app-service.yaml
hello-app-deployment.yaml에 이 콘텐츠를 추가합니다.
apiVersion: v1 kind: Service metadata: name: zufarexplainedit-hello-app-service labels: app: hello-app spec: selector: app: hello-app ports: - port: 8080 targetPort: 8080 type: LoadBalancer
이제 hello-app-service.yaml이 생성되어 사용할 준비가 되었습니다.
Kubernetes EKS 클러스터가 성공적으로 설치 및 구성되고 Kubernetes 서비스 및 배포 파일이 준비되었으면 이제 kubectl 명령을 사용하여 테스트할 차례입니다.
배포를 적용합니다.
배포 구성을 적용하려면 다음 명령을 사용합니다.
kubectl apply -f hello-app-deployment.yaml
이렇게 하면 지정된 수의 복제본과 롤링 업데이트 전략을 사용하여 배포가 생성되어 애플리케이션의 가용성과 관리 효율성이 보장됩니다.
2. 서비스를 신청합니다.
다음으로 서비스 구성을 적용합니다.
kubectl apply -f hello-app-service.yaml
그러면 LoadBalancer 유형 서비스가 설정되어 애플리케이션이 인터넷에 노출됩니다.
LoadBalancer가 프로비저닝되고 외부 IP 주소를 획득하는 데 시간이 조금 걸릴 수 있습니다.
LoadBalancer 상태를 확인하세요.
사용 중인 서비스 상태를 모니터링하세요.
kubectl get service zufarexplainedit-hello-app-service
외부 IP가 할당되면 애플리케이션에 액세스할 준비가 거의 완료된 것입니다.
귀하의 애플리케이션에 액세스하십시오.
웹 브라우저를 사용하여 할당된 외부 IP 주소 뒤에 :8080을 입력하세요. 잠시 후 페이지가 로드되고 "HelloWorld" 메시지가 표시됩니다. 초기 로딩에는 몇 초 정도 걸릴 수 있다는 점에 유의하세요.
Kubernetes 환경 내에서 리소스를 정리해야 하는 경우 다음 kubectl 명령을 사용하여 배포, Pod 및 서비스를 효과적으로 제거할 수 있습니다.
1. 모든 배포 삭제 .
모든 배포를 삭제하려면 다음 명령을 사용하면 됩니다.
kubectl delete deployments --all
이 작업을 수행하면 클러스터에 활성 배포 인스턴스가 남아 있지 않게 됩니다.
2. 모든 포드 삭제 .
배포로 관리되는지 여부에 관계없이 모든 Pod를 삭제해야 하는 경우 다음 명령을 사용할 수 있습니다.
kubectl delete pods --all
포드를 지우면 클러스터 상태를 재설정하거나 새 배포를 준비하는 데 도움이 될 수 있습니다.
3. 모든 서비스 삭제 .
애플리케이션을 네트워크에 노출하는 서비스를 정리하려면 다음 명령을 사용할 수 있습니다.
kubectl delete services --all
서비스를 제거하면 가동 중지 시간이 발생할 수 있으므로 계속하기 전에 그 의미를 고려하십시오.
작업자 노드, 네트워킹 구성 요소 및 기타 리소스를 포함하여 eksctl
사용하여 생성된 지정된 Amazon EKS 클러스터와 연결된 모든 리소스를 제거하려면 다음 명령을 사용할 수 있습니다.
eksctl delete cluster --name {your cluster name} --region {your region name}
나에게는 그렇습니다.
eksctl delete cluster --name zufarexplainedit --region eu-north-1
클러스터 중지를 확실히 해야 합니다. 이 작업은 되돌릴 수 없으며 데이터가 손실될 수 있기 때문입니다.
이제 “KubernetesServer” AWS EC2 가상 서버 인스턴스에 새로운 ansible-admin 사용자를 추가해 보겠습니다.
그렇게 하려면 이 명령을 사용하십시오.
sudo useradd ansible-admin
그런 다음 ansible-admin 사용자의 비밀번호를 설정하십시오.
sudo passwd ansible-admin
또한 sudoers 파일을 편집하여 사용자 권한을 구성해야 합니다.
sudo visudo
이 sudoers 파일에 "ansible-admin ALL=(ALL) ALL"을 추가합니다.
또한 PasswordAuthentication을 활성화하려면 /etc/ssh/sshd_config 파일을 편집해야 합니다.
sudo vi /etc/ssh/sshd_config
그런 다음 이러한 변경을 수행하려면 서비스를 다시 로드해야 합니다.
sudo service sshd reload
이 명령을 실행하면 다음이 표시됩니다.
이제 이 명령을 사용하면 모든 추가 명령에 sudo를 추가하지 않아도 됩니다.
sudo su - ansible-admin
이 문서에서는 K8s EC2 가상 서버 인스턴스와 같은 원격 서버를 관리할 계획입니다. 그렇기 때문에 SSH 키를 설정해야 합니다.
ssh-keygen
이 명령을 실행하면 다음이 표시됩니다.
이제 SSH 키가 생성되어 사용할 준비가 되었습니다.
Ansible은 원격 서버에서 작업을 자동화하도록 설계되었습니다. 비밀번호 없는 SSH 인증을 사용하면 수동으로 비밀번호를 입력할 필요 없이 Ansible이 해당 서버에 연결할 수 있습니다.
ansible-admin 사용자의 SSH 키를 사용하여 컴퓨터에서 다른 컴퓨터(예: IP 주소 172.31.34.41의 컴퓨터)로 보안 연결을 생성하려면 이 명령을 실행하십시오.
sudo ssh-copy-id -i /home/{your user name}/.ssh/id_rsa.pub {your user name}@{your host address}
내 경우에는 이렇게 보입니다.
sudo ssh-copy-id -i /home/ansible-admin/.ssh/id_rsa.pub [email protected]
이제 "추가된 키 수: 1"을 볼 수 있습니다. 이는 비밀번호 없는 SSH 인증 설치가 성공적으로 완료되었음을 의미합니다.
Ansible 플레이북을 실행할 때 실행해야 하는 호스트를 지정합니다. 이 단계에서는 KubernetesServer EC2 인스턴스 호스트를 지정해야 합니다. 그렇게 하려면 " [모듈 6]: Ansible"에서 전달한 것과 동일한 단계를 반복해야 합니다.
다음 명령을 실행하여 KubernetesServer EC2 인스턴스 호스트를 찾아보겠습니다.
sudo ifconfig
KubernetesServer EC2 인스턴스 호스트를 찾은 후 다음 명령을 실행하여 이를 Ansible 호스트 파일에 추가할 수 있습니다.
sudo vi /etc/ansible/hosts
"[kubernetes]"를 참조로 추가할 수도 있습니다.
이제 Kubernetes가 모두 설정되어 준비가 완료되었으므로 파이프라인에 대한 Kubernetes 작업이 포함된 새로운 Ansible 플레이북을 만들 수 있습니다. 이 플레이북을 사용하면 Ansible이 kubectl 명령을 사용하여 Kubernetes 클러스터에서 앱을 실행할 수 있습니다.
방법은 다음과 같습니다.
touch kubernetes-hello-app.yml
hello-app.yml
파일을 편집합니다. 이 명령을 사용하여 편집할 수 있도록 엽니다. vi kubernetes-hello-app.yml
--- - hosts: kubernetes tasks: - name: deploy regapp on kubernetes command: kubectl apply -f hello-app-deployment.yaml - name: create service for regapp command: kubectl apply -f hello-app-service.yaml - name: update deployment with new pods if image updated in docker hub command: kubectl rollout restart deployment.apps/zufarexplainedit-hello-app
Kubernetes 작업을 위한 Ansible 플레이북을 사용할 준비가 되었습니다.
이제 Kubernetes 작업을 위한 Kubernetes, Ansible 및 Ansible 플레이북이 모두 설정되어 준비되었으므로 이를 Jenkins와 통합할 수 있습니다.
JenkinsServer → Jenkins 대시보드 → 새 항목으로 이동합니다.
"CD-Job"이라는 이름으로 새 Jenkins Freestyle 프로젝트를 만듭니다.
“확인” 버튼을 클릭하세요.
"빌드 후 작업" 섹션으로 이동합니다.
"빌드 후 작업 추가" 버튼을 클릭합니다.
"SSH를 통해 빌드 아티팩트 보내기" 옵션을 선택합니다.
SSH 서버로 "AnsibleServer"를 선택합니다.
"exec command" 입력에 이 명령을 추가합니다.
sudo -u ansible-admin ansible-playbook /opt/docker/kubernetes-hello-app.yml
“적용” 및 “저장” 버튼을 클릭하세요.
Jenkins 대시보드 → “CI_CD_Pipeline” → 구성 → “빌드 후 작업” 섹션으로 이동합니다.
"빌드 후 작업 추가" 버튼을 클릭합니다.
"다른 프로젝트 빌드" 옵션을 선택하세요.
"다른 프로젝트 빌드" 섹션으로 이동하세요.
"빌드가 안정적인 경우에만 트리거" 옵션을 선택합니다.
"빌드할 프로젝트" 입력에 "CD-Job"을 추가합니다.
“적용” 및 “저장” 버튼을 클릭하세요.
이제 파이프라인이 완전히 완료되어 사용할 준비가 되었다고 생각할 수 있습니다.
이제 최종 파이프라인 버전을 테스트할 시간입니다.
Jenkins → Jenkins 대시보드 → "CI_CD_Pipeline"으로 이동합니다.
"지금 빌드" 버튼을 클릭하세요.
결과를 보려면 빌드 콘솔 로그를 검토하세요.
빌드 콘솔 로그에서 "CD-Job"이 트리거되고 최종 상태가 SUCCESS로 표시되는 것을 확인할 수 있습니다.
4
또한 Dockerhub로 이동하여 새 Docker 이미지 추가를 확인할 수 있습니다.
마지막으로 웹 브라우저를 사용하여 애플리케이션에 액세스할 수 있습니다. 할당된 외부 IP 주소 뒤에 ":8080"을 입력하세요. 잠시 후 페이지가 로드되고 "HelloWorld" 메시지가 표시됩니다.
이 최신 CI/CD 파이프라인 설정을 잘 마쳤습니다!
당신은 훌륭한 일을 해냈고, 당신은 진정한 영웅입니다!
모든 노력에 감사드립니다!
Zufar Sunagatov 는 현대 소프트웨어 시스템 설계에 열정을 갖고 있는 숙련된 수석 소프트웨어 엔지니어입니다.