Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Archives
Today
Total
관리 메뉴

쟝이의 세상

kubenetes 서비스 노출과 버전 업데이트 본문

자료

kubenetes 서비스 노출과 버전 업데이트

zyangee 2024. 10. 4. 12:49
📎 실습 환경을 위한 파일 다운로드 및 압축 해제
$ wget http://jadecross.iptime.org:7778/k8s/lab/lab_k8s_2024.tar.gz
$ tar xfz lab_k8s_2024.tar.gz​

 

📌 외부 클라이언트로 서비스 노출하기

1) 디폴트 타입으로 서비스 생성하기
guestbook 서비스 생성
(위치: ~/lab/05)
 
✔️ replicaset 생성

$ kubectl create -f guestbook-replicaset.yaml

 
✔️ guestbook 서비스 생성

$ kubectl create -f guestbook-svc.yaml

 

👇🏻 guestbook 서비스의 상세 정보 확인

더보기
apiVersion: v1
kind: Service
metadata:
  name: guestbook
spec:
  ports:
  - port: 80
    targetPort: 8080
  selector:
    app: guestbook

label이 app=guestbook 으로 생성된 pod가 endpoints로 지정됨
 
✔️pod의 IP 번호로 접속과 curl 명령으로 접속

$ curl http://10.102.249.47:8080

-> pod의 IP번호로 접속 명령어

👇🏻실행 화면

더보기
1) curl 명령어로 접속

 

2) k8snode1 컴퓨터로 해당 서비스 pod의 IP번호로 접속

 
2) NodePort 타입으로 서비스 생성
guestbook-nodeport 서비스 생성
(위치: ~/lab/05)
 
✔️ service 생성

$  kubectl create -f guestbook-svc-nodeport.yaml

👇🏻yaml 파일 내용 확인

더보기

guestbook-svc-nodeport.yaml

apiVersion: v1
kind: Service
metadata:
  name: guestbook-nodeport
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 8080
    nodePort: 30123
  selector:
    app: guestbook

 

✔️ 서비스 상세정보로 NodePort와 Cluster-IP 확인하기

생성한 서비스의 EndPoints는 label이 app=guestbook으로 설정되어 있는 pod
(전에 생성한 서비스는 label이 app=guestbook으로 설정되어 있기 때문에 자동으로 endpoints에 지정)
-> NodePort 30123으로 설정되어 있음

 
✔️ 서비스의 cluster-IP번호로 접속과 로컬 컴퓨터에서 NodePort로 접속

더보기

1) curl 명령어로 서비스의 cluster-IP 접속

 

2) 로컬 컴퓨터에서 접속

 
3) Loadbalancer 타입으로 서비스 생성
metalLB 설치 및 서비스 생성
(위치: ~/lab/05/metalLB)
 
✔️ metalLB 설치

$ kubectl create -f metallb-native.yaml #yaml 파일을 사용하여 MetalLB 설치
$ kubectl create -f metallb-ippool.yaml
$ kubectl create -f metallb-l2advertisement.yaml

👇🏻 yaml파일 보기

더보기

1) metallb-ippool.yaml

apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: ip-pool
  namespace: metallb-system
spec:
  addresses:
  - 192.168.56.200-192.168.56.250

 -> 외부 공개용 IP Address Pool 생성

 

2) metallb-l2advertisement.yaml

apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: l2-advertisement
  namespace: metallb-system
spec:
  ipAddressPools:
  - ip-pool
  interfaces:
  - enp0s3

MetalLB가 설정된 IP Address Pool(ip-pool)을 특정 네트워크 인터페이스(enp0s3)를 통해 IP주소를 네트워크에 알림

-> MetalLB가 클러스터 외부의 라우터 또는 스위치와 통신하여 해당 IP주소를 사용해 서비스를 제공할 수 있도록 한다.

 
✔️ guestbook-loadbalancer 서비스 생성
(위치: ~/lab/05)

$ kubectl create -f guestbook-svc-loadbalancer.yaml

👇🏻 서비스 생성 결과 화면

더보기
$ kubectl get services

 
✔️ 서비스 cluster-IP 접속 / 로컬 컴퓨터에서 external-IP 접속 / NodePort로 접속

👇🏻 결과 화면

더보기

1) 서비스 cluster-IP 접속

 2) 로컬 컴퓨터에서 external-IP 접속

 3) NodePort로 접속

 

=> 모두 정상적으로 접속되는 것을 확인할 수 있다.

 

📌 RollingUpdate

✔️ 생성되어 있는 guestbook Deployment 생성

$ kubectl create -f guestbook-deployment-v1.yaml --record
위 명령어의 record 옵션?
: --record 옵션으로 변경된 Deployment는 변경사항을 기록한다.

👇🏻 yaml 파일 보기

더보기

guestbook-deployment-v1.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: guestbook
spec:
  replicas: 3
  selector:
    matchLabels:
      app: guestbook
  template:
    metadata:
      labels:
        app: guestbook
    spec:
      containers:
      - image: yu3papa/k8s_guestbook:v1
        name: springboot

 
✔️ 생성된 Deployment 확인

$ kubectl get deployment -o wide

👇🏻 결과 확인

더보기

IMAGES를 보면 v1으로 Deployment가 생성됨을 확인할 수 있다.

 
✔️ 변경되는 것을 확인하기 위해 롤링 업테이트 속도 낮추기

$ kubectl patch deployment guestbook -p '{"spec": {"minReadySeconds": 10}}'
👇🏻 세션창 하나를 더 열어서 업데이트 진행과정을 확인
$ while true; do curl -s http://192.168.56.201 | grep HealthCheck; sleep 1; done​


출력되는 화면

→ 1초에 하나씩 진행상황이 업데이트 되는 것을 확인할 수 있음

 
✔️ pod의 image를 v2로 변경

$ kubectl set image deployment guestbook springbookt=yu3papa/k8s_guestbook:v2

 
 
✔️ rollout status 명령어로 배포 과정 조회

$ kubectl rollouyt status deployment guestbook

👇🏻 실행 화면

더보기

1) 업데이트 확인 세션창

점차 v2로 바뀌는 것을 확인할 수 있음

 

2) 배포 과정 조회창

배포되고 있는 진행상황을 명령창에 기록해주는 것을 확인할 수 있음

✔️ ReplicaSet 확인

$ kubectl get rs -o wide

v2로 업데이트가 된 후에도 v1의 ReplicaSet이 남아 있는 것을 확인할 수 있다.