딸기말차

[MSA] 14. Rollback 전략, Bind Tool, AWS Instance 본문

Bootcamp/MSA

[MSA] 14. Rollback 전략, Bind Tool, AWS Instance

딸기말차 2023. 10. 27. 10:08

엔코아 플레이데이터(Encore Playdata) Backend 2기 백엔드 개발 부트캠프 (playdata.io)

 

백엔드 개발 부트캠프

백엔드 기초부터 배포까지! 매력있는 백엔드 개발자 포트폴리오를 완성하여 취업하세요.

playdata.io


1. Image pull 시 에러가 생겼을 때 rollback 전략

# rollout-nginx.yaml 생성
vim rollout-nginx.yaml

rollout-nginx.yaml

# rollout-nginx.yaml 을 통한 pod 생성
# --record 옵션을 통해 배포한 정보의 히스토리 기록 
k apply -f ./rollout-nginx.yaml

# history 확인
k rollout history deployment rollout-nginx

# 해당 pod의 로그 확인
k describe pod rollout-nginx-64dd56c7b5-6mpjj

로그 확인

# 현재 상태 보기 
k rollout history deployment rollout-nginx

현재 상태정보

# 존재하지 않는 이미지를 update / pull 시도
k set image deployment rollout-nginx nginx=nginx:1.17.23

없는 이미지 업데이트 시도

# describe로 좀 더 상세하게 상태보기 
k describe deployment [pod 이름]
k describe pod rollout-nginx-856f4c79c9-5d2jp

상세정보

# 없는 이미지를 update하려다 에러가 났을 시 rollback
k rollout undo deployment rollout-nginx

에러가 난 상태
rollback


2. 실제 IP를 확인할 수 있는 Bind tool

# DNS SW Bind 설치
sudo yum install bind-utils -y

bind 설치

# 실제 dns에 해당하는 ip를 확인할 수있는 프로그램인 nslookup을 통해 ip 확인
nslookup
www.naver.com

실제 ip 확인

# 확인한 ip를 통해 curl 날려보기
curl -I 223.130.195.200

curl


3. 네트워크 연결하기

NodePort 서비스를 설정하면 모든 워커노트의 특정 포트를 열고 포워딩 한다.

# 노드포트를 위한 pod 생성
k create deployment np-pods --image=sysnet4admin/echo-hname

pod 생성

# yaml 파일 생성
vim nodeport.yaml

nodeport.yaml

# 작성한 yaml 파일 적용
k create -f ./nodeport.yaml

yaml 적용

# 서비스 정보 확인
k get services

# 노드 정보 확인
k get nodes -o wide

서비스 및 노드 정보확인


4. AWS Ubuntu Instance 

# AWS Instance 생성
이 때, 인스턴스 유형에서 cpu가 2개인 t2.medium을 선택한다.

ubuntu instance 생성

# 메모리 확보를 위해 swap off
sudo swapoff -a

swap off

# root 접속
sudo su

# hostname 변경
hostnamectl set-hostname m-k8s

hostname 변경


5. Ubuntu Instance 내 Docker 설치

# docker 설치
curl -sSL get.docker.com | sh

docker 설치

# docker 실행
service docker start

# docker 상태 확인
service docker status

start, status

# Instance 부팅 시 docker 자동 실행
systemctl enable docker

자동 실행

# 컨테이너 기본 설정을 /etc/containerd/config.toml에 작성
containerd config default > /etc/containerd/config.toml

설정 작성

# 보안 키 확인
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg

보안 키 확인

# 보안 키를 파이프라인 오른쪽으로 보낸다.
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -

보안키 전송

# permission denied 확인
vim /etc/apt/sources.list/kubernetes.list

permission denied

# 파일 복사
cat <<EOF > /etc/apt/sources.list.d/kubernetes.list deb http://apt.kubernetes.io/ kubernetes-xenial main EOF

# 컨테이너 재시작
service containerd restart

# 재시작이 잘 됐는지 상태 확인
service containerd status

파일 복사


6. Ubuntu Instance 내 Kubernetes 설치

# kubernetes 설치
apt-get install kubectl kubeadm kubectl kubernetes-cni

쿠버네티스 설치

# hosts 디렉토리에 private ip 추가
vim /etc/hosts

private ip m-k8s

ip 추가

# api server, pod, socket 설정
kubeadm init --apiserver-advertise-address [private ip] --pod-network-cidr=192.168.0.0/16 --cri-socket /run/containerd/containerd.sock

kubeadm join 172.31.8.248:6443 --token n8wl53.g81imetxxmd9g81d \
        --discovery-token-ca-cert-hash sha256:11fb8c9324c7e07fb3509eaac771dd2022ad27a4d743b3d5a868da35a0bb301f

api server, pod, socket 설정

# 추가 설정
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl apply -f https://docs.projectcalico.org/v3.22/manifests/calico.yaml

디렉토리 및 owner 설정
추가 설정

# crictl 엔드포인트 목록 확인
sudo crictl --runtime-endpoint unix:///run/containerd/containerd.sock ps

crictl은 CRI-호환 컨테이너 런타임에 사용할 수 있는 커맨드라인 인터페이스이다.

목록 확인


7. 61일차 후기

어느 서비스던 동작 중 에러가 생길 시 이전 상태로 돌리기 위해 rollback을 할 수 있는 방법이 어떤 형태로든 구현이 되어있어야한다.

'Bootcamp > MSA' 카테고리의 다른 글

[MSA] 16. Api Gateway 내 MicroService 등록  (0) 2023.10.31
[MSA] 15. Minikube, k9s 설치  (0) 2023.10.30
[MSA] 13. alias, cordon, drain, AWS 활용  (0) 2023.10.26
[MSA] 12. Kubernates 구조, AWS EC2  (0) 2023.10.25
[MSA] 11. Kubernates Pod  (0) 2023.10.24