โ๏ธ 0. ECS - ์์
์ ์ (task)
โ๏ธ 1. ์์ ์ ํ ํธํ์ฑ - EC2 ์ ํ
โ๏ธ 2. ํ
์คํฌ ์ ์ ์ด๋ฆ : MY-TD
โ๏ธ 3. ์์
ํฌ๊ธฐ ๊ณต๋.
โ๏ธ 4. ์ปจํ
์ด๋ ์ ์ - ์ปจํ
์ด๋ ์ถ๊ฐ
ํ์ค ; docker run -d -p 80:80 --name containername img
โ๏ธ 4-1. ์ปจํ
์ด๋ ์ด๋ฆ : webserver
โ๏ธ 4-2. ์ด๋ฏธ์ง : nginx
โ๏ธ 4-3. ๋ฉ๋ชจ๋ฆฌ์ ํ : 128
โ๏ธ 4-4. ํฌํธ๋งคํ : 80 : 80
โ๏ธ 4-5. ์ถ๊ฐ
โ๏ธ 4-6. ๋งจ ํ๋จ ์์ฑ๋ฒํผ ํด๋ฆญ
โ๏ธ 1. ํด๋ฌ์คํฐ - ํด๋ฌ์คํฐ ์์ฑ
ํ
ํ๋ฆฟ : EC2 Linux + ๋คํธ์ํน
ํด๋ฌ์คํฐ ๊ตฌ์ฑ ;
ํด๋ฌ์คํฐ ์ด๋ฆ : MY-CLUSTER
์ธ์คํด์ค ๊ตฌ์ฑ ;
ํ๋ก๋น์ ๋ ๋ชจ๋ธ - ์จ๋๋งจ๋ ์ธ์คํด์ค
์คํ์ธ์คํด์ค ;๋ณ๋ ฌ, ์์๊ฐ์ ๋ง์ ๊ณต๊ฐ์ด ํ์ํ ๋. ํด๋ฌ์คํฐ์์ ๋ง์ด ์ด๋ค. ์ ๋ ดํด์.
EC2 ์ธ์คํด์ค ์ ํ : ์ํ๋ ์ธ์คํด์ค ์ ํ ์ง์ ์
๋ ฅ, t2.micro
์ธ์คํด์ค ๊ฐ์ : 2
๋ฃจํธ๋ณผ๋ฅจํฌ๊ธฐ : 30
ํค ํ์ด : ๋ง๋ค์ด๋ ๊ฒ ์ ํ
โ๏ธ ๋คํธ์ํน VPC: MY-VPC
์๋ธ๋ท : PUBLIC SUBNET 2A,C
ํผ๋ธ๋ฆญ IP ์๋ํ ๋น : ํ์ฑํ ๋จ
๋ณด์๊ทธ๋ฃน : MY-SG-WEB
์ปจํ
์ด๋ ์ธ์คํด์ค IAM์ญํ : ๊ทธ๋๋ก ๋๊ธฐ ์ ํํ ๊ฑฐ ์์ ์ ํํ๊ณ .
-์์ฑ๋ฒํผ ํด๋ฆญ
โ๏ธ ์๋น์ค - ์์ฑ ํด๋ฆญ
์์ ์ ํ : EC2
์์
๊ฐ์ :2
์ต์ ์ํ ๋ฐฑ๋ถ์จ : 50 ; ํ๋ ์ง์ฐ๊ณ ํ๋ ๋จ๊ธฐ๊ณ
์ต๋ ๋ฐฑ๋ถ์จ : 100; 2๊ฐ๋ฅผ 100์ผ๋ก ๋ณด๊ธฐ
->๋ง์ฝ 100,200์ด๋ฉด 2๊ฐ๊ฐ ๊ธฐ๋ณธ 4๊ฐ๊น์ง ๋์ด๋ ์ ์์. ๊ตฌํ ์ง์ฐ์ง ์๊ณ 4๊ฐ ๋ง๋ ๋ค์ ์๋ ๊ฑฐ ์ฐจ๊ทผ์ฐจ๊ทผ ์ง์ฐ๋ ๋๋.
๋ฐฐํฌ์ ํ : ๋กค๋ง ์
๋ฐ์ดํธ ;๋ฐฑ๋ถ์จ
-๋ค์๋จ๊ณ
๋ก๋๋ฐธ๋ฐ์ ์ ํ : ALB
์ํ๊ฒ์ฌ ์ ์๊ธฐ๊ฐ : 150
EC2์ฝ์์์ ๋ก๋๋ฐธ๋ฐ์ ๋ง๋ค๊ณ ์ค๊ธฐ(ALB์์ฑ)
์ด๋ฆ : ECS-ALB
VPC: MY-VPC
์๋ธ๋ท: ํผ๋ธ๋ฆญ 2a,2c
๋ณด์๊ทธ๋ฃน : default ์ง์ฐ๊ณ MY-SG-WEB์ ํ
๋์๊ทธ๋ฃน ์์ฑ ํ๊ณ ์ค๊ธฐ
์ด๋ฆ : TG-ECS
ํ๋กํ ์ฝ : 80
๋ค์ ๋ก๋๋ฐธ๋ฐ์ ์ฝ์์์ ๋์๊ทธ๋ฃน TG-ECS ์ ํํ๊ณ ๋ก๋๋ฐธ๋ฐ์ ์์ฑ ํด๋ฆญ
(๋ช
์ ์ํด๋ ๊ฒ์ default)
๋ค์ ์๋น์ค ์์ฑ์ผ๋ก ์์, ๋ก๋๋ฐธ๋ฐ์ ์ด๋ฆ ECS-ALB์ ํ
๋ฐธ๋ฐ์ฑํ ์ปจํ
์ด๋ : ๋ก๋๋ฐธ๋ฐ์์ ์ถ๊ฐ๋ฒํผ ํด๋ฆญ
ํ๋ก๋์
๋ฆฌ์ค๋ ํฌํธ : 80:HTTP
๋์๊ทธ๋ฃน ์ด๋ฆ : TG-ECS
-๋ค์๋จ๊ณ
auto scaling
-๋ค์ - ์๋น์ค ์์ฑ๋ฒํผ ํด๋ฆญ
-> ๋ก๋๋ฐธ๋ฐ์ DNS ์ฃผ์๋ก ์ ๊ทผ ๊ฐ๋ฅ.
๋ ์ฝ๋ ์์ฑํด์ ๊ฐ์ํ๋ ๋๋ฉ์ธ ์ด์ฉํ๊ธฐ.
โ๏ธ ์์ ์ ์ -MY-TD ํด๋ฆญ - ์ ๊ฐ์ ์์ฑ ํด๋ฆญ
โ๏ธ ํ๋จ์ผ๋ก ๋ด๋ ค์ ์ปจํ ์ด๋ ์ ์ -์ปจํ ์ด๋ ์ด๋ฆ ํด๋ฆญ - ์ด๋ฏธ์ง nginx๋ฅผ mj030kk/web-site:v1.0๋ก ๋ฐ๊พธ๊ธฐ. - ์ ๋ฐ์ดํธ ํด๋ฆญ
โ๏ธ ๋งจ ํ๋จ ์์ฑ๋ฒํผ ํด๋ฆญ
ํด๋ฌ์คํฐ - MY-CLUSTER ํด๋ฆญ - ์๋น์ค์์ MY-WEBํด๋ฆญ- ์
๋ฐ์ดํธ ํด๋ฆญ
๊ฐ์ 2, ์ ๋ฐฐํฌ์ ์ฉ ์ฒดํฌ.
๋ค๋ฅธ ๊ฒ ๋ค ๊ทธ๋๋ก ๋๊ณ ๋ค์๋จ๊ณ ์งํ.
โ๏ธ centos7 ova๊ฐ์ ธ์ค๊ธฐ CPU2, RAM 4GB(์ต์์ฉ๋)
โ๏ธ ์ค์ ; ์ด๋ฆ : Minikube ๋คํธ์ํฌ - ๋งฅ ์ด๋๋ ์ค ์๋ก๊ณ ์นจ - ์์
IP : 192.168.1.166
(single Node : Master Node + Worker Node), (Multi Node: Master Node, Worker Node)
์ฟ ๋ฒ๋คํฐ์ค ์ปจํ
์ด๋ ๋ฐํ์์ ์ํด ๋์ปค ์ค์น
# curl -fsSL https://get.docker.com/ | sudo sh
# systemctl enable --now docker
# yum install -y conntrack git
# curl -Lo minikube https://storage.googleapis.com/minikube/releases/v1.23.2/minikube-linux-amd64 && chmod +x minikube
# mkdir -p /usr/local/bin/
# install minikube /usr/local/bin/
# minikube version
# minikube start --driver=none ##๊ฐํธ์ค์น ์ํด์ ๋๋ผ์ด๋ฒ ์ค์ X. ๋๋ผ์ด๋ฒ ์ค์ ํ๋ฉด ๋ ๊ทธ ๋๋ผ์ด๋ฒ ์ํด์ ์ค์นํ ๊ฒ๋คใ
ใ
ฃ์๊น.
# minikube status
api์๋ฒ์ ์ฐ๊ฒฐํ๋ ๋๊ตฌ
# curl -LO https://dl.k8s.io/release/v1.22.2/bin/linux/amd64/kubectl
# install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
# source <(kubectl completion bash)
# echo "source <(kubectl completion bash)" >> ~/.bashrc
# exit
# kubectl version
# mkdir workspace && cd $_
# kubectl run nginx-pod --image=nginx
# kubectl get node
# kubectl get pod
# kubectl expose pod nginx-pod --name clusterip --type=ClusterIP --port 80
[root@localhost workspace]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
clusterip ClusterIP 10.98.216.228 <none> 80/TCP 2m2s
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 110m
[root@localhost workspace]# curl 10.98.216.228
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
->ClusterIP๋ ์ธ๋ถ ๋ธ๋ผ์ฐ์ ์์๋ ์ ์ ์๋จ ๋ด๋ถ์์ curl๋ก ํ์ธ ํด์ผํจ
# kubectl expose pod nginx-pod --name nodeport --type=NodePort --port 80
# kubectl expose pod nginx-pod --name loadbalancer --type=LoadBalancer --external-ip 192.168.1.166 --port 80
[root@localhost workspace]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
clusterip ClusterIP 10.98.216.228 <none> 80/TCP 55m
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 163m
loadbalancer LoadBalancer 10.101.230.101 192.168.1.166 80:30228/TCP 83s
nodeport NodePort 10.109.64.156 <none> 80:31999/TCP 24m
ํ๋ ; ์ฟ ๋ฒ๋คํฐ์ค์์ ๋ฐฐํฌํ ์ ์๋ ๊ฐ์ฅ ์์ ๋จ์
์๋น์ค ; ๋คํธ์ํฌ์ ๊ด๋ จ๋ ๋ฆฌ์์ค pod๋ฅผ ์ธ๋ถ ๋คํธ์ํฌ์ ์ฐ๊ฒฐํด์ฃผ๊ณ ์ฌ๋ฌ๊ฐ์ pod๋ฅผ ๋ฐ๋ผ๋ณด๋ ๋ด๋ถ ๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ์์ฑํ ๋ ์ฌ์ฉ.
clusterIP
ํธ์คํธํฌํธ๊ฐ ๊ณง ๋
ธ๋ํฌํธ๋ค.
๋ด๋ถ์์ clusterIP๋ก curl ํ๋ฉด ๋ด๋ถ์์ ์น์๋ฒ ํ์ธ ๊ฐ๋ฅ.
nodeport์ด์ฉํ๋ฉด ๋ด๋ถ์์๋ ๋ฌผ๋ก ๋ฐ๊นฅ์์๋ ํ์ธ ๊ฐ๋ฅ.
์ฌ๊ธฐ์ ํ์ฉํด์ผ ํ ๊ฒ์ ํฌํธ๋ฒํธ์.
ํธ์คํธ IP:nodeport๋ฒํธ
pod ์ง์
[root@localhost workspace]# kubectl exec -it nginx-pod -- bash
root@nginx-pod:/#
root@nginx-pod:/# cd /usr/share/nginx/html/
root@nginx-pod:/usr/share/nginx/html# echo "minikube" > index.html
# kubectl get all
# kubectl delete svc clusterip
# kubectl delete svc --all
# kubectl delete pod nginx-pod
Service
# vi nginx-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
labels:
app: nginx-pod //service์์ ์ฐ๊ฒฐ ๊ณ ๋ฆฌ
spec:
containers:
- name: nginx-pod-container
image: nginx
# kubectl apply -f nginx-pod.yaml
# kubectl get pod
# docker images
# kubectl get pod -o wide
# kubectl describe pod nginx-pod
# vi clusterip-pod.yaml
apiVersion: v1
kind: Service
metadata:
name: clusterip-service-pod
spec:
type: ClusterIP
selector:
app: nginx-pod
ports:
- protocol: TCP
port: 80
targetPort: 80
# kubectl apply -f clusterip-pod.yaml
# kubectl get svc -o wide
# kubectl describe svc clusterip-service-pod
------------ ์๋น์ค์ ์ฐ๊ฒฐ๋๋ nginx-pod ๋ฐ๊ฟ๋ณด๊ธฐ--
[root@localhost workspace]# kubectl delete svc clusterip-service-pod
[root@localhost workspace]# vi clusterip-pod.yaml
app: nginx-pod1
[root@localhost workspace]# kubectl apply -f clusterip-pod.yaml
service/clusterip-service-pod created
[root@localhost workspace]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
clusterip-service-pod ClusterIP 10.96.217.148 <none> 80/TCP 38s
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 67m
[root@localhost workspace]# curl 10.96.217.148
curl: (7) Failed connect to 10.96.217.148:80; Connection refused
[root@localhost workspace]#
[root@localhost workspace]# vi clusterip-pod.yaml
->ํฌํธ๋ฒํธ๋ฅผ 8080์ผ๋ก
[root@localhost workspace]# kubectl apply -f clusterip-pod.yaml
service/clusterip-service-pod created
[root@localhost workspace]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
clusterip-service-pod ClusterIP 10.97.198.129 <none> 8080/TCP 22s
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 69m
[root@localhost workspace]# curl 10.97.198.129
^C
[root@localhost workspace]# curl 10.97.198.129:8080
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
[root@localhost workspace]# kubectl edit svc clusterip-service-pod
service/clusterip-service-pod edited
-> edit์ด์ฉํด์ ํฌํธ๋ฒํธ ๋ค์ 80์ผ๋ก
[root@localhost workspace]# curl 10.97.198.129
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
-> ๋ฐ๋ก ๋จ.
-----------------------------------
# vi nodeport-pod.yaml
apiVersion: v1
kind: Service
metadata:
name: nodeport-service-pod
spec:
type: NodePort
selector:
app: nginx-pod
ports:
- protocol: TCP
port: 80
targetPort: 80 ##๋ฐ๊พธ๋ฉด ์๋จ! ์ปจํ
์ด๋ ํฌํธ์.
nodePort: 30080 ( 30000~32767 ๊ฐ๋ฅ)
# kubectl apply -f nodeport-pod.yaml
# kubectl get svc -o wide
# kubectl describe svc nodeport-service-pod
# vi loadbalancer-pod.yaml
apiVersion: v1
kind: Service
metadata:
name: loadbalancer-service-pod
spec:
type: LoadBalancer
externalIPs:
- 192.168.1.166
selector:
app: nginx-pod
ports:
- protocol: TCP
port: 80
->ํ๊ฒํฌํธ ๋ฃ์ง ์์๋ ์ ์ ์ ๋จ. (curl)
# kubectl apply -f loadbalancer-pod.yaml
# kubectl get svc -o wide
# kubectl describe svc loadbalancer-service-pod
โ๏ธ์ด๋ฏธ์ง ๋ฐ๊ฟ๋ณด๊ธฐ
[root@localhost workspace]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-pod 1/1 Running 0 71m
[root@localhost workspace]# kubectl edit pod nginx-pod
๐โ๏ธโ๏ธ๐ขโญ๏ธ๐
ํ
๋ผํผ ํ๋ก๋น์
์ค์๋ธ ๊ตฌ์ฑ๊ด๋ฆฌ
๋์ปค ์๋ฒํ
ํ๋ฆฟ
์ฟ ๋ฒ๋คํฐ์ค ์ค์ผ์คํธ๋ ์ด์
๋๊ตฌ