20220603 필기노트

강재민·2022년 6월 3일
0

필기노트

목록 보기
22/23


도커 관련된 모듈이 있지만은 커맨드로 해야한다.


민선님 필기..

#jenkins + ansible 멱등성을 위해

vm은 jenkins 1대 ansible1대 docker1대 준비

Vagrantfile ansible 추가

config.vm.define "ansible" do |ubuntu|
		ubuntu.vm.box = "ubuntu/focal64"
		ubuntu.vm.hostname = "ansible"
		ubuntu.vm.network "private_network", ip: "192.168.59.13"
		ubuntu.vm.provider "virtualbox" do |vb|
			vb.name = "ansible"
			vb.cpus = 2
			vb.memory = 2000
		end
	end

ansible vm 에는 ansible과 docker가 같이 있어야함

vagrant ssh ansible

sudo apt update

sudo apt install ansible

docker 설치 링크: https://docs.docker.com/engine/install/ubuntu/

set up the repository 순서대로
install Docker Engine (1번만)

sudo usermod -aG docker vagrant
재접속

docker ps

ansible 에서 docker vm ssh 연결
ssh-keygen
ssh-copy-id vagrant@192.168.59.12
ssh-copy-id vagrant@192.168.59.13

vi .ansible.cfg
[defaults]
inventory = hosts.ini

vi hosts.ini
[ansible_host]
192.168.58.13

[docker_host]
192.168.59.12

ansible all -m ping


앤서블



일단 maven

/*main


우선은 저장하고





apply 저장

다시 가서





apply 저장

이렇게 하고 테스트

오류


경로가 잘못 되었다고 한다..

또 오류..

경로를 쓰는것이지 도커파일을 쓸 필요는 엇다




도커 이미지 싹 지우고 다시 시작

빌드나우


패스워드를 위해 매개변수로..
MSG
HelloWorld








컨테이너가 없는 상태에서 삭제를 하면 삭제가 안된다.

에러 오타




에러 해결
여기서 --name 옵션을 중간으로 옮기고 시작
변수명도 중요하다 남이 보고 이해할 수 있게

또 실행해도

멱등성 해결

https://github.com/c1t1d0s7/my-java-maven

"{{ lookup('env', 'PASS') }}"




볼트를 써도 됨
도커 패스워드에 특수문자가있으면 젠킨스에서 잘 못읽음








PASS=`echo $PASS` ansible-playbook java-hello-world/docker_build_and_push.yaml



tasks 넣어주어야함

- name: Docker Image Build and Push
  hosts: ansible_host
  gather_facts: false

  tasks:
    - command: docker image build -t c1t1d0s7/java-hello java-hello-world/
    - command: docker login -u c1t1d0s7 -p "{{ lookup('env', 'PASS') }}"
    - command: docker push c1t1d0s7/java-hello
    - command: docker logout

- name: Docker Run
  hosts: docker_host
  gather_facts: false
  
  tasks:
    - command: docker container rm -f java-hello-world
      ignore_errors: yes
    - command: docker container run -d -p 8080:8080 --name java-hello-world java-hello

git commit
git push 해주고..

실행해줌..

다시 실행


이 모듈들을 사용할 예정..

https://docs.ansible.com/ansible/2.9/modules/docker_container_module.html#docker-container-module

- hosts: docker_host
  gather_facts: no
  tasks:
    - name: Create a data container
      docker_container:
        name: myweb
        image: nginx

오류가 남

Docker SDK가 필요하다고 함


pip설치를 먼저 해주고



sudo apt install python3-pip
sudo pip3 install docker


모듈을 사용하기 위한 requirement를 꼭 확인하기를 바람..




이런 다양한 예시들이 있음
빌드하고
로그인하고

push하고
docker_container로 run하고


이렇게 하면 기존에 있던거를 지우고 다시 생성하게 됨

### 연습..

- name : Log into DockerHub
  docker_login:
    username: repush
    password: "{{ lookup('env','PASS') }}"
    
- name : Build image and with build args
  docker_image:
    name: myhello
    build:
      path: /path/to/build/dir
      args:
        log_volum: /var/log/myapp
        listen_port: 8080
    source: build
- name: Tag and Push to docker hub
  docker_image:
    name: myhello
    repository: repush/myhello
    push: yes
    source: local




오류..


오류..

이렇게 구성해서 테스트를 하면댐..
https://github.com/c1t1d0s7/my-java-maven


오후에는 쿠버네티스


이거 대신에 쿠버네티스에 올리는식으로..
kubeadm을 할 예정임

여기에 도커 kubeadm을 설치할 예정

https://kubernetes.io/ko/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

kubelet kubectl도 설치해야함

sudo apt-get install kubeadm=1.22.8-00 kubelet=1.22.8-00 kubectl=1.22.8-00 -y

https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/

calico랑 cni

kubeadm으로 설치하는 방법..
https://prod.velog.io/@repush/Kubernetes%EB%A5%BC-adm%EC%9C%BC%EB%A1%9C-%EC%84%A4%EC%B9%98

ip는 맞춰주셔야함
192.168.59.12번..

이거 대신에 간단하게 커맨드를 가지고
쿠버네티스를 실행할 수 있도록..

여기에 오브젝트 yaml파일을 만들어보면 됨..











오류

두 가지 방식이 있을 수 있음
kubectl과 kubeconfig를 설치해서
A에다가 kubectl apply를 할 수 있게 완성을 해보면 된다.

https://kubernetes.io/ko/docs/tasks/tools/install-kubectl-linux/








오류발생



성공



이렇게 하게 되면
태그가 ..
이미지가 안바뀐다..



해결
이건 임시방편이고
중요한건 이미지 태그를 어떻게 달리 할것인가

가장 쉬운 방법이 무엇인가?!



빌드 할 때마다 매개변수를 수동으로 바꾸는식..




빌드번호를 연결해서 태그잡으면 됨




진자템플릿으로 해서 변수처리를 해서
플레이북에서

이렇게하면 템플릿에 의해서 빌드넘버를 받아서 할 수 도 있고..

해결해야하는 과제 is like..



https://pypi.org/
https://github.com/openshift/openshift-restclient-python

이렇게 하면 안됨..

sudo pip install openshift==0.11




sudo pip install kubernetes==11.0
### 물론 이렇게 해도 됨



이렇게 할 수 도 있다.

이게 진자 템플릿임
yml파일에 변수가 있다면 변수를 읽어서 만들게 될 것이다..

이 구성에 빌드넘버를 변수로 받아서 실행하도록 만들어야함..



이런식으로 하면 모든 브랜치를 참조하게 된다

이런식으로 브랜치 이름으로 태그가 될 수있게 할 수도 있음

특별히 다른건없고 디렉토리만 깔끔하게 추가한것임







앤서블에 k8s모듈을 사용하면

더 쉽게 할 수 있다고 하심..


개발자는 Git에 push만해도 이렇게 배포가 되는것을 확인할 수 있다.

GitOps라는것도 있다.
요즘에 뜨는 데브옵스이다.
즉 Git에 코드를 올리면 완전하게 배포가 완료되는 것을 알 수 있다.
다음주에 ArgoCD를 사용해볼 예정

Jenkinsfile이라는게 있다.



Jenkins를 IaC로 구성할 수 있다.

미니프로젝트 기본주제는
배웠던거와 ArgoCD까지해서
AWS에서 구현하는것
EC2올리고 EKS 올려서 구성해보는걸로

아니면 EKS에 올리고 Jenkins같은것도 Pod형태로 띄울 수가 있다...
또는 똑같이 구성을 하는데 Jenkins파일로 구성하는거

또는 멀티 브랜치

또는 자바 말고 파이썬이나 고랭 파일로 해볼 수 있다...

0개의 댓글