서버를 많이 사용 못하는 상황이라 minikube로 실습을 진행한다.
#미니쿠베 설치
curl -LO https://storage.googleapis.com/minikube/releases/v1.22.0/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
kubectl 은 kubernetes cluster (server) 에 요청을 간편하게 보내기 위해서 널리 사용되는 client 툴이다.
curl -LO https://dl.k8s.io/release/v1.22.1/bin/linux/amd64/kubectl
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
minikube start --driver=docker
kubectl get pod -n kube-system
위에 사진처럼 나오면 잘 시작된 것이다.
Pod(파드)는 쿠버네티스에서 생성하고 관리할 수 있는 배포 가능한 가장 작은 컴퓨팅 단위이다.
간단한 Pod 의 예시
vi pod.yaml
vi 에디터로 연 후에 아래 형식처럼 입력
apiVersion: v1 # kubernetes resource 의 API Version
kind: Pod # kubernetes resource name
metadata: # 메타데이터 : name, namespace, labels, annotations 등을 포함
name: counter
spec: # 메인 파트 : resource 의 desired state 를 명시
containers:
- name: count # container 의 이름
image: busybox # container 의 image
args: [/bin/sh, -c, 'i=0; while true; do echo "$i: $(date)"; i=$((i+1)); sleep 1; done'] # 해당 image 의 entrypoint 의 args 로 입력하고 싶은 부분
pod.yaml 적용
kubectl apply -f pod.yaml
kubectl get pod
위 사진처럼 나오면 pod가 잘 생성된 것이다.
Deployment(디플로이먼트)는 Pod와 Replicaset에 대한 관리를 제공하는 단위이다.
관리라는 의미는 Self-healing, Scaling, Rollout(무중단 업데이트) 과 같은 기능을 포함한다
조금 어렵다면 Deployment 는 Pod을 감싼 개념이라고 생각할 수 있다.
vi deployment.yaml
vi에디터로 deployment.yaml 만든 후 아래 값 입력
apiVersion: apps/v1 # kubernetes resource 의 API Version
kind: Deployment # kubernetes resource name
metadata: # 메타데이터 : name, namespace, labels, annotations 등을 포함
name: nginx-deployment
labels:
app: nginx
spec: # 메인 파트 : resource 의 desired state 를 명시
replicas: 3 # 동일한 template 의 pod 을 3 개 복제본으로 생성합니다.
selector:
matchLabels:
app: nginx
template: # Pod 의 template 을 의미합니다.
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx # container 의 이름
image: nginx:1.14.2 # container 의 image
ports:
- containerPort: 80 # container 의 내부 Port
deployment.yaml 적용
kubectl apply -f deployment.yaml
kubectl get deployment
위 사진처럼 나오면 잘 적용된 것이다.
kubectl get pod -o wide
curl -X GET [pod i] -vvv
ssh 서버에서 우분투가 만들어졌기때문에 80번 포트로 설정된 pod에서는 연결이 안 됨
minikube ssh
minikube를 ssh로 변경한 후에는 잘 되는 모습이다.
vi service.yaml
vi에디터로 service.yaml 만든 후 아래 코드 작성
apiVersion: v1
kind: Service
metadata:
name: my-nginx
labels:
run: my-nginx
spec:
type: NodePort # Service 의 Type 을 명시하는 부분입니다. 자세한 설명은 추후 말씀드리겠습니다.
ports:
- port: 80
protocol: TCP
selector: # 아래 label 을 가진 Pod 을 매핑하는 부분입니다.
app: nginx
서비스 적용
kubectl apply -f service.yaml
kubectl get service
80번포트로 연결되었다.
curl -X GET $(minikube ip):<PORT>
위 명령어를 쓰면 ssh 포트로 이동하지 않아도 잘 작동이 되는 모습이다.