[Jenkins] 쿠버네티스, 엔서블 연동

seopppio·2024년 12월 22일

Jenkins

목록 보기
18/25

연동 및 실습


도커 컨테이너로 운영중인 엔서블 서버로 쿠버네티스에 접속하여, 엔서블이 사용할 수 있는 플레이북 파일 테스트 해볼 것

hosts 파일에 쿠버네티스 그룹 만들고, 호스트PC(쿠버네티스사용하는 어드레스) 추가해서 사용할 것. 그리고 이 엔서블서버에서 플레이북 실행하면, 쿠버네티스와 통신이 될 것이다


젠킨스가 엔서블에 명령하면, 쿠버네티스 클러스터에 필요한 명령어를 실행할 수도 있다. 혹은 젠킨스로 직접 쿠버네티스에 무언가 명령을 할 수도 있다

실습

https://learn.microsoft.com/ko-kr/windows-server/administration/openssh/openssh_keymanagement
여기서 세팅 먼저 하자192.1

엔서블 서버 접속

엔서블 서버에서 쿠버네티스 서버 접속 확인

호스트 pc ip 주소는 명령프롬프트에서 ipconfig
호스트 pc 계정명은, 명령프롬프트에서 whoami
제어판 -> 계정 -> microsoft로 로그인 했으면
마이크로소프트 비밀번호 입력하면 된다 -> 이거 때문에 엄청 헤맸다 진심

위는 그냥 ssh로, ansible에서 host pc로 접속한 것이다.

Ansible -> Host(window)

ssh로는 접속이 안 되어 헤매다, winrm 적용하기로 마음먹음 ..

호스트 PC 세팅

https://github.com/AlbanAndrieu/ansible-windows/blob/master/files/ConfigureRemotingForAnsible.ps1

여기 있는 파일 다운로드

관리자 모드 파워셸에서

powershell.exe -ExecutionPolicy ByPass -File C:\Users\user\Downloads\ConfigureRemotingForAnsible.ps1

입력, 참고로 저 파일 다운로드 누르면 자동으로 저기에 된다.
두번째 user 는, 본인 경로에 맞는 user 써라 본인은 zzang 이더라

이거하면 알아서 winrm실행에 필요한 host pc 세팅이 끝남

본격 연동

  1. ansible server에 k8s 디렉토리 만들고 안에 hosts파일 다음과 같이 작성

    비밀번호는 '' 사이, 계정명은 그냥

  2. Ansible 서버에 winrm 설치

    pip install pywinrm (엔서블서버에 python3 없으면 걔도 설치, host도 설치)

  3. Ansible 홈 디렉토리에서 다음과 같은 명령어 입력

    ansible -i ./k8s/hosts windows -m win_ping

    야호 ! 성공 !

Ansible playbook file로 Kubernetes 제어

쿠버네티스에서 deployment, service 만드는 yml파일 소스코드

이 코드는 쿠버네티스가 저장되어 있는 Hostpc에 있어야한다

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: seopioo/cicd-project-ansible
        imagePullPolicy: Always
        ports:
        - containerPort: 8080

~                                      
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

~                                                                                                                       ~                               

이러한 deployment, service 만드는 yml파일을 제어하는 ansible playbook 소스코드

이 코드는 Ansible pc에 있어야 한다

  1. 플레이북 파일 보면 task에 기존 command가 아니라, win_command인 것 유의
  2. kubectl 실행할 yml파일 위치는 ansible에서 ssh로 window 접속했을 때 바로 나오는 주소, 필자는 C/User/zzang(사용자계정) 였고, 이 디렉토리에 yml파일 두었다.
- name: Create pods using deployment
  hosts: kubernetes
  # become: true
  # user: ubuntu

  tasks:
  - name: delete the previous deployment
    win_command: kubectl delete deployment.apps/cicd-deployment
    ignore_errors: yes

  - name: create a deployment
    win_command: kubectl apply -f C:\Users\zzang\cicd-devops-deployment.yml


~                                                                                                                       ~                                                                
- name: create service for deployment
  hosts: kubernetes
  # become: true
  # user: ubuntu

  tasks:
  - name: create a service
    win_command: kubectl apply -f cicd-devops-service.yml

~                                                                                                                       ~                                                                                                                       ~                                                              

Ansible에서 플레이북 실행

deployment playbook

이유는 모르겠지만, 호스트PC에서 디플로이먼트가 이미 있어야 진행이 된다
그래서, 호스트피시에서 kubectl apply -f cicd-devops-deployment.yml 실행해서, 디플로이먼트 하나 만들고 시작하자 -> 해결, playbook 보면 기존 존재하는 deployment 삭제하고, 만드는데, 호스트pc에 없으면 에러나는 것이다. error ignore 추가해서, 해결

service playbook

  • 결과

    둘 다 잘 만들어진 모습이다.


그 결과 컨테이너도 실행되고, 서비스도 연결 되어서 톰캣 서버 hello world war파일 잘 적용된 모습

0개의 댓글