Notice
Recent Posts
Recent Comments
Link
딸기말차
[MSA] 14. Rollback 전략, Bind Tool, AWS Instance 본문

엔코아 플레이데이터(Encore Playdata) Backend 2기 백엔드 개발 부트캠프 (playdata.io)
백엔드 개발 부트캠프
백엔드 기초부터 배포까지! 매력있는 백엔드 개발자 포트폴리오를 완성하여 취업하세요.
playdata.io
1. Image pull 시 에러가 생겼을 때 rollback 전략
# rollout-nginx.yaml 생성
vim 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


2. 실제 IP를 확인할 수 있는 Bind tool
# DNS SW Bind 설치
sudo yum install bind-utils -y

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

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

3. 네트워크 연결하기
NodePort 서비스를 설정하면 모든 워커노트의 특정 포트를 열고 포워딩 한다.
# 노드포트를 위한 pod 생성
k create deployment np-pods --image=sysnet4admin/echo-hname

# yaml 파일 생성
vim nodeport.yaml

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

# 서비스 정보 확인
k get services
# 노드 정보 확인
k get nodes -o wide

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

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

# root 접속
sudo su
# hostname 변경
hostnamectl set-hostname m-k8s

5. Ubuntu Instance 내 Docker 설치
# docker 설치
curl -sSL get.docker.com | sh

# docker 실행
service docker start
# docker 상태 확인
service docker 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

# 파일 복사
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

# 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

# 추가 설정
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


# 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 |