쿠버네티스란 컨테이너화 된 애플리케이션을 대규모로 운영하기 위한 컨테이너 오케스트레이션(관리 툴)
클러스터는 쿠버네티스의 전체 환경, 마스터노드, 워커노드를 합한 노드의 집합
1. 마스터 노드: 클러스터에 핵심적인 것들 설치,, 설치해야함(scheduler, API server, Scheduler 등) eks 를 사용해서 다운
> 워커노드 컨트롤 하는곳, 즉 여기서 명령어로 관리함
2.워커노드(ec2) : 실질적으로 컨테이너들이 실행하게될 노드
aws에서 클러스터 추가시 > 마스터노드 저절로 구성된다.
워커노드 생성시 마스터 노드에 종속 시켜야한다.
eks로 배포하기전에 연습을 해봐야한다.
실습 환경 : play with Kubernetes
3대 생성 1대는 마스터노드이고, 2개는 워커 노드이다
마스터 노드 구성한다는 뜻.
kubeadm init --apiserver-advertise-address $(hostname -i) --pod-network-cidr 10.5.0.0/16
윈도우는 ctrl insert c 가 복사이다
마스터 노드 1개 설정
2. 마스터 노드 에서 초기화 해준다.
kubectl apply -f https://raw.githubusercontent.com/cloudnativelabs/kube-router/master/daemonset/kubeadm-kuberouter.yaml
kubeadm join 에 서 토큰을 가져다가 워커노드인 2와 3에 쓰면 된다.
이렇게 되면 성공
기본 설정 끝 연결된 노드들 확인해본다. 노드2 혹은 노드 3에서 하면 마스터 노드가 아니기 때문에 에러가 난다.
다 Ready 가 나와야한다.
pod 생성 => 컨테이너를 만든다. nginx pod를 만든다.
pods 몇개 있는지 확인
get pode -A : 모든 pods 보기
get pods -A -o wide : 자세하게 보기
마스터 노드에서 nginx 실행 명령어 => 특정 로직에 의해 마스터 노드에 실행할 워커노드 지정 및 컨테이너 실행 (알아서 라우팅까지)
마스터 노드에 nginx pods 하나 설치 후 실행 확인.
kubectl run nginx --image=nginx --port=80 --restart=Never
running 중 됐다.
Namespace를 설정해주지 않으면 default로 들어간다.
Namespane 지정 해보기
kubectl create namespace test-namespace
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
namespace: test-namespace # 네임스페이스 지정시, 여기에 지정
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
#spec: 요소들 지정
test-namespace 생성
yml를 적용 해줘야한다. pod가 생성이 된다.
kubectl apply -f 파일명.yml
그러면 test-namespace에 생기게 된다.
지우는 방법 1.
yml파일로 만들어진 파일을 알아서 찾아서 삭제해준다.
2. pod이름과 스페이스 이름을 직접 써야한다.
kubectl delete pod nginx-pod -n test-namespace
curl 명령으로 호출을 하지만 port가 닫혀있어서 안된다.
port를 열어줘야한다.
service 생성
test할시
curl ip:nodePort => 해줘야지 nginx 화면이 출력된다.
node3으로 잡혀있다. 그럼 노드 3 ip로 접속해본다.
nginx가 나온다.
web -> service -> pods라고 생각하면 된다.
하지만 service가 물리적으로 서버로 직접 띄어있는게 아니라. service에서 nginx에 label 이름을 selector로 등록을 해 놓으면
ip를 직접 호출해 주었을때. 포트가 열려있어 nginx에 들어갈 수 있는것이다.
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
nodePort: 30007
selector:
app: nginx
selector에서 app 을 nginx로 설정을 해놔서 80 80 을 열어준다.
Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 2
selector: # 참조하겠다.
matchLabels:
app: my-nginx
template: # 파트의 정보
metadata:
labels:
app: my-nginx # 이름을 맞춰 줘야함
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
이렇게 이름을 my-nginx로 바꿔주면 service에서selector이름도 바꿔줘야한다.
deployment를 통해 pods를 만든다. >> pod 파일이 따로 필요없다
get pods 하면 2개가 나온다.
둘 다 ip를 날려보면 잘 나온다.
replicaSet
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: nginx-replicaset
spec:
replicas: 2
selector:
matchLabels:
app: my-nginx
template:
metadata:
labels:
app: my-nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
ReplicaSet는 지정된 수의 파드 복제본이 항상 실행되도록 보장해주는 k8s의 리소스이다.
실행해주면
이렇게 나온다.
진짜 eks로 실습하기
eks 설정
- 마스터노드에 연결완료.
aws eks update-kubeconfig --region ap-northeast-2 --name 6team_cluster
으로 work노드를 2개 만들어 줬다.
확인해보면 2개가 만들어 져있다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: boseok-nginx-depl
spec:
replicas: 2
selector:
matchLabels:
app: boseok-nginx
template:
metadata:
labels:
app: boseok-nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
apply해주면 내꺼 포함 팀원들꺼까지 들어온다.
인바운드를 추가해줘야지 ec2에서 접근이 가능하다.
loadbalancer
- http 만
apiVersion: v1
kind: Service
metadata:
name: boseok-nginx-service
spec:
type: LoadBalancer
ports:
-name: http
- port: 80
targetPort: 80
selector:
app: boseok-nginx # depl의 label과 싱크가 같다.
# loadbalancer 와 ,targetGroup을 만들어준다.
# 만들어지고 나서 loadbalancer 의 dns를 호출해야한다.
실행하면 로드밸런서와, 대상그룹을 잡아준다. 바로 접속이 가능하다.
- https + http 설정
apiVersion: v1
kind: Service
metadata:
name: boseok-nginx-service
annotations: # 인증서 주소
service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http
service.beta.kubernetes.io/aws-load-balancer-ssl-cert: # < 인증서arn (고유주소) >
service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "https"
spec:
type: LoadBalancer
ports:
- name: http
port: 80
targetPort: 80
- name: https
port: 443
targetPort: 80
selector:
app: boseok-nginx
# loadbalancer 와 ,targetGroup을 만들어준다.
# 만들어지고 나서 loadbalancer 의 dns를 호출해야한다.
댓글