Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 |
Tags
- dfs
- monorepo
- 파이썬
- Infra
- Algorithm
- heapq
- jenkins
- javascirpt
- 알고리즘
- BFS
- CI/CD
- 프로그래머스
- rag
- modbus
- Two Pointer
- frontend
- docker
- turbo
- React
- OpenAI
- LLM
- queue
- DP
- python
- VectoreStore
- AI
- typescript
- build
- ansible
- javascript
Archives
- Today
- Total
DM Log
[CI/CD #6] Jenkins + Ansible + Kubernetes 연동 본문
Ansible + Kubernetes 연동
Docker Container 내부에 운영되는 Ansible-server와 playbook을 이용하여 Kubernetes를 제어
Ansible에서 Kubernetes 제어
- Ansible 접속
docker exec -ti ansible-server bash
- Ansible 내부 hosts 파일 생성
[ansible-server]
localhost
[kubernetes]
192.168.x.x. (host pc Ip)
- ssh 키 복사 (비밀번호 없이 접속 가능하도록 설정) - Linux
ssh-keygen
ssh-copy-id user@192.168.x.x (hostPC 정보)
- ssh 키 복사 (비밀번호 없이 접속 가능하도록 설정) - window
- ansible-server에서 id_rsa.pub 파일 내용을 직접 복사(Paste) 하여 Windows의 C:\Users\<계정>\.ssh\authorized_keys 파일 생성
- cat /root/.ssh/id_rsa.pub
- hosts 파일 변경
[ansible-server]
localhost
[kubernetes]
192.168.x.x
[windows]
192.168.x.x
[windows:vars]
ansible_user=아이디
ansible_password=비번
ansible_connection=winrm
ansible_winrm_server_cert_validation=ignore
ansible_winrm_transport=ntlm
ansible_port=5985
- (참고) (window) port 22: Connection refused 해결 ssh 연결 서비스 켜기
# powershell 관리자 권한
# sshd 설치 확인
Get-Service sshd
# 미설치시
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
# 설치 완료 후
Start-Service sshd
Set-Service -Name sshd -StartupType 'Automatic'
- (참고) ntlm 관련 error message 발생
- WinRM이 “로컬 관리자 계정의 원격 NTLM 인증”을 기본적으로 제한
- user 계정이 관리자라도 원격으로 로그인하면 “표면상 관리자이지만 권한 제한"
- powershell에 아래 명령어로 문제 해
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" `
-Name "LocalAccountTokenFilterPolicy" -Value 1 -Type DWord
Restart-Service WinRM
- Ansible-server에 playbook 작성 (deployment 실행)
- name: Create pods using deployment
hosts: kubernetes
# become: true
# user: ubuntu
tasks:
- name: delete the previous deployment
command: kubectl delete deployment.apps/cicd-deployment
- name: create a deployment
command: kubectl apply -f cicd-devops-deployment.yml
- host PC 에 실행시킬 Script 파일 생성
apiVersion: apps/v1
kind: Deployment
metadata:
name: cicd-deployment
spec:
selector:
matchLabels:
app: cicd-devops-project
replicas: 2
template:
metadata:
labels:
app: cicd-devops-project
spec:
containers:
- name: cicd-devops-project
image: edowon0623/cicd-project-ansible
imagePullPolicy: Always
ports:
- containerPort: 8080
- Ansible-server에 playbook 작성 (service 실행)
- name: create service for deployment
hosts: kubernetes
# become: true
# user: ubuntu
tasks:
- name: create a service
command: kubectl apply -f cicd-devops-service.yml
- host PC 에 실행시킬 Script 파일 생성
apiVersion: v1
kind: Service
metadata:
name: cicd-service
labels:
app: cicd-devops-project
spec:
selector:
app: cicd-devops-project
type: NodePort
ports:
- port: 8080
targetPort: 8080
nodePort: 32000
- 명령어 입력
- (참고) window의 경우 playbook 작성 시, command 부분을 win_command로 변경 필요
- (참고) 파일 위치 Window의 정확한 경로 입력 필요
#ansible 서버
ansible-playbook -i ./k8s/hosts k8s-cicd-deployment-playbook.yml
ansible-playbook -i ./k8s/hosts k8s-cicd-service-playbook.yml
Jenkins + Ansible + Kubernetes 연동
Setup Ansible on Jenkins
- Manage Jenkinx → Configure System → Publish over SSH
- Add SSH Servers
- Name: k8s-master
- Hostname: [k8s-master IP] HOST PC IP
- Username: 사용자 이름
- Passphrase/Password: 비밀번호
- Port: 22
Jenkins로 Kubernetes 실행
- 프로젝트 생성 → My-K8s-Project
- Build Triggers
- SSH server: k8s-master
- Exec command
- "C:\Program Files\Docker\Docker\resources\bin\kubectl.exe" apply -f C:\cicd-devops-deployment.yml
- window 사용시 cmd로 실행되도록 해야함
Jenkins로 Ansible 연동하여 Kubernetes 실행
- 프로젝트 생성 → My-K8s-Project-using-Ansible
- Build Triggers
- SSH server: ansible-host
- Exec command
- ansible-playbook -i ./k8s/hosts k8s-cicd-deplyment-playbook.yml
Jenkins + Ansible + Kubernetes 자동화 프로세스 구성
CI Jobs
- git pull
- create a docker image
- push the image to the registry
- remove the image from the local
Jenkins Item 생성 후 CI 작업 진행 빌드 후 조치 설정
- ansible-playbook -i ./k8s/hosts create-cicd-devops-image.yml --limit ansible-server
- hosts: all
# become: true
tasks:
- name: create a docker image with deployed waf file
command: docker build -t [사용자 계정]/cicd-project-ansible .
args:
chdir: /root
- name: push the image on Docker Hub
command: docker push [사용자 계정]/cicd-project-ansible
ignore_errors: yes
- name: remove the docker image from the ansible server
command: docker rmi [사용자 계정]/cicd-project-ansible
ignore_errors: yes
CD Jobs
- create a deployment
- create a service
Jenkins에서 CI ITEM이후 CD ITEM 연결
- 빌드 후 조치에서 Build other Projects 추가 후 kubenetes deployment와 service 생성 ITEM 연결
'개발공부 > Infra' 카테고리의 다른 글
| [CI/CD #8] Jenkins + SonarQube 사용 (0) | 2025.11.04 |
|---|---|
| [CI/CD #7] Jenkins Pipeline (0) | 2025.11.02 |
| [CI/CD #5] Docker Desktop Kubernetes 사용 (0) | 2025.11.01 |
| [CI/CD #4] Jenkins + Ansible 연동 (0) | 2025.10.29 |
| [CI/CD #3] Infrastructure as Code 개요와 Ansible의 이해 (0) | 2025.10.28 |
