이번에는 도커 컨테이너가 아니라 쿠버네티스에 pod로 배포하는것 까지 합니다. 이번 편이 마지막이 되겠습니다 ~
jenkins 가상머신
의 github과 연동된 디렉토리로 오셔서..
아래 내용을 순서대로 다 편집해주시면 됩니다 ~
cd playbook
vi docker_build_and_push.yaml
### 내용 다 지우고 붙여넣어주시면 됩니다.
### repush는 본인 docker 계정 이름으로 교체하시면 됩니다.
### 혹시 docker 리포지토리 다르게 하셨으면 그것도 체크하셔야해요 !!
### repush/cicdprojent 는 저만 사용하는 계정과 리포지토리입니다 !!
- name: Docker Image Build and Push
hosts: ansible_host
gather_facts: false
tasks:
- command: docker image build -t repush/cicdproject:"{{ lookup('env', 'BUILD_NUMBER') }}" java-hello-world/
- command: docker login -u repush -p "{{ lookup('env', 'TOKEN') }}"
- command: docker push repush/cicdproject:"{{ lookup('env', 'BUILD_NUMBER') }}"
- command: docker logout
vi kube_deploy.yaml
### 아래내용도
### 위처럼
### 본인 docker 계정으로 바꾸는거 아시겠죠??
- hosts: ansible_host
gather_facts: no
tasks:
#- command: kubectl apply -f java-hello-world/kube_manifest/
- name: Create Deployment
k8s:
state: present
definition:
apiVersion: apps/v1
kind: Deployment
metadata:
name: java-hello
namespace: default
spec:
replicas: 5
selector:
matchLabels:
app: java-hello
template:
metadata:
labels:
app: java-hello
spec:
containers:
- name: java-hello
image: "repush/cicdproject:{{ lookup('env', 'BUILD_NUMBER') }}"
imagePullPolicy: Always
ports:
- containerPort: 8080
- name: Create Service
k8s:
state: present
definition:
apiVersion: v1
kind: Service
metadata:
name: java-hello-svc
namespace: default
spec:
type: NodePort
selector:
app: java-hello
ports:
- port: 80
targetPort: 8080
nodePort: 31313
git add .
git commit -m 'Add k8s'
cat ~/.ssh/token
git push
본인 git 리포지토리에 잘 추가되었는지 확인해주세요
jenkins 홈페이지
로 오셔서.. 새로운 Item
클릭
build-image-and-deploy-to-kubernetes-with-ansible
라는 이름으로Maven project
클릭하시고OK
클릭
이 빌드는 매개변수가 있습니다
왼쪽 체크박스활성화
매개변수 추가
클릭
Password Parameter
클릭
매개변수명은
TOKEN
Default Value는jenkins 터미널
가셔서cat ~/.ssh/token-for-docker
값 집어넣으시면 됩니다.
Git
오른쪽 체크박스활성화
본인 Git 계정 리포지토리 주소 받아오시면 됩니다.
master
를main
으로 바꿔주시면 됩니다.
clean package
붙여넣어주시고..
빌드 후 조치 추가
클릭
Send build artifacts over SSH
클릭해주세요
아래 사진 내용 확인
그 다음 내려가셔서 아래 사진과 표를 참고해서 작성해주세요
항목 설정값 Source files webapp/target/webapp.war Remove prefix webapp/target/ Remote directory java-hello-world
Add Transfer Set
클릭
아래 사진과 표를 참고해서 작성해주세요
항목 설정값 Source files docker/Dockerfile Remove prefix docker/ Remote directory java-hello-world
Add Transfer Set
클릭
아래 사진과 표를 참고해서 작성해주세요
항목 설정값 Source files playbook/*.yaml Remove prefix playbook/ Remote directory java-hello-world
Exec command
는
TOKEN=`echo $TOKEN` BUILD_NUMBER=`echo $BUILD_NUMBER` ansible-playbook java-hello-world/docker_build_and_push.yaml
BUILD_NUMBER=`echo $BUILD_NUMBER` ansible-playbook java-hello-world/kube_deploy.yaml
Apply
하고저장
클릭
ansible 가상머신 터미널
로 오셔서..
sudo apt update
sudo apt install -y ansible
sudo apt install -y python3-pip
sudo pip install openshift==0.11
docker 가상머신 터미널로 오셔서..
sudo apt-get install -y apt-transport-https ca-certificates curl
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install kubeadm=1.22.8-00 kubelet=1.22.8-00 kubectl=1.22.8-00 -y
sudo apt-mark hold kubelet kubeadm kubectl
sudo vi /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
sudo systemctl restart docker
docker info | grep 'Cgroup Driver'
sudo systemctl daemon-reload && sudo systemctl restart kubelet
sudo kubeadm init --control-plane-endpoint 192.168.59.12 --pod-network-cidr 172.16.0.0/16 --apiserver-advertise-address 192.168.59.12
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl get nodes
### 결과
NAME STATUS ROLES AGE VERSION
docker NotReady control-plane,master 14m v1.22.8
### CNI가 준비되지 않아서 NotReady라고 뜬다.
kubectl create -f https://projectcalico.docs.tigera.io/manifests/tigera-operator.yaml
curl https://projectcalico.docs.tigera.io/manifests/custom-resources.yaml -O
vi custom-resources.yaml
...
cidr: 172.16.0.0/16
...
kubectl create -f custom-resources.yaml
watch -n1 kubectl get pods -A
### 모두 Running상태가 되면 ctrl + c로 나와서
kubectl taint node docker node-role.kubernetes.io/master-
kubectl get nodes
아래 사진처럼 나오면 성공
해당 내용이 궁금하시다면 아래 링크에 좀 더 자세하게 되어있다..
https://prod.velog.io/@repush/Kubernetes%EB%A5%BC-adm%EC%9C%BC%EB%A1%9C-%EC%84%A4%EC%B9%98
ansible 가상머신 터미널
로 오셔서..
vi ~/hosts.ini
아래 내용처럼 편집해준다.
[ansible_host]
192.168.59.13
[docker_host]
192.168.59.12
[kubernetes_cluster]
192.168.59.12
ansible kubernetes_cluster -m ping
아래 사진처럼 나오면 성공
ansible 가상머신 터미널
로 오셔서..
mkdir .kube
scp 192.168.59.12:~/.kube/config .kube/config
curl -LO https://dl.k8s.io/release/v1.22.8/bin/linux/amd64/kubectl
sudo install kubectl /usr/local/bin/
kubectl get nodes
아래 사진처럼 나오면 성공
드디어 실행할 때가 왔습니다..
jenkins 웹 페이지
로 오셔서 최근에 만드신 프로젝트 클릭하셔서 아래 화면으로 와주세요
Build with Parameters
클릭
빌드하기
클릭
docker 가상머신 터미널
로 오셔서..
watch -n1 kubectl get deploy,rs,po,svc,ep
아래와 같은 내용이 뜨면 일단 성공 하신거구
curl localhost:31313/webapp/
했을 때 아래 사진처럼 나오면 성공 하신겁니다.
jenkins의 본인 프로젝트로 가셔서 구성
해주세요
빌드 유발에
Poll SCM
왼쪽에 체크박스 활성화 해주세요
아래 사진처럼 나올텐데
Schedule에
* * * * *
입력하시면 됩니다. (띄어쓰기 중간에 있어야합니다.)
Apply
누르시고저장
docker 가상머신 터미널
에서..
watch -n1 kubectl get deploy,rs,po,svc,ep
이렇게 해놓으신 상태에서 이곳 변화를 관찰하시면 됩니다.
지금 Pod가 5개있죠
jenkins 가상머신 터미널
로 오셔서..
git repository 관리하는 디렉토리
로 오셔서..
두 가지 바꿔보실 수 있는데요
1. pod 개수 줄여보기
cd playbook
vi kube_deploy.yaml
여기서 replicas: 5
를 replicas: 3
으로 바꿔보시고 저장하고 나와보세요
jenkins 가상머신 터미널
로 오셔서..git repository 관리하는 디렉토리
로 오셔서..cd webapp/src/main/webapp/
vi index.jsp
아래 문구 또는 원하는 문구로 변경해보세요
<h1> Hello World!!! </h1>
<h3> Hava a nice day guys </h3>
cd ../../../..
git add .
git commit -m 'Add Hava a nice day guys and Reduce replicas'
cat ~/.ssh/token
git push
아까 실행해놓은 docker 가상머신을 보고 계세요
기다리시면 이렇게 Pod가
3개
로 줄었고 이미지가 교체되었으니Pod AGE
가 다시 시작된걸 확인할실 수 있습니다.
ctrl
+ c
로 나오셔서
아래 명령어 치시면 저희가 추가했던 문구가 생겨난 것을 확인할 수 있습니다.
curl localhost:31313/webapp/
고생하셨습니다~~ 이제 부터 시작이니까 힘내서 다음 단계 해봅시다 !