매니페스트 파일은 yml파일을 지칭하는 말이다 그냥 kubectl create
명령어를 이용하여 컨테이너를 생성할 수도 있지만 매니페스트 파일을 이용하여 컨테이너를 생성할 수도 있다 이번 파트는 nginx에 관련된 매니페스트 파일을 만들어 보았다
vi pod-nginx.yml
---
apiVersion: v1
kind: Pod
metadata:
name: test-nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
kubectl apply -f pod-nginx.yml
kubectl get pod
kubectl get pod -o wide
먼저 매니페스트 파일을 실행시키는 명령어는 kubectl apply -f
이다 뒤에는 내가 만들어놓았던 yml파일의 이름을 작성하면 실행이된다
잘 만들어졌는지 확인을 하기 위해서는 kubectl get pod
를 써서 확인을 한다 자세한 내용을 확인하기 위해서는 kubectl get pod -o wide
명령어 사용 어떤 노드에 컨테이너가 생성되었는지 어떤 IP를 가지고 있는지 등등 확인이 가능하다
---
apiVersion: v1
kind: Pod
metadata:
name: apache
namespace: 2team
spec:
containers:
- name: apache
image: httpd
ports:
- containerPort: 80
이번에는 새로운 항목이 추가되었다 namespace
이다 이것을 추가하고 싶은 경우 metadata
에 넣어서 파일을 실행해주고 kubectl get pod -n 2team
명령어를 사용하면 확인을 할 수 있다
하지만 매니페스트파일을 실행하여 컨테이너를 생성할때에는 미리 네임스페이스를 만들어 놓아야 한다
vi pod-nginx2.yml
---
apiVersion: v1
kind: Pod
metadata:
name: test-nginx
namespace: 1team
spec:
containers:
- name: nginx
image: nginx:1.23
ports:
- containerPort: 80
kubectl apply -f pod-nginx2.yml
kubectl get pods -n 1team
kubectl describe pod test-nginx -n 1team
컨테이너를 생성하고 자세한 정보를 보고 싶다면 describe
명령어를 사용하여 확인이 가능하다 안에는 수많은 정보들이 들어있다
여기서 주의해야 할점은 네임스페이스는 1team에 넣었다 그래서 pod를 확인할때에는 -n <namespace>
옵션을 꼭 넣어서 확인을 해줘야한다
그리고 실행을 시켜주기위해선 도커와 비슷하게 exec
명령어를 사용
실행을 하기위해서 사용한 명령어 kubectl exec -n 1team test-nginx -it -- bash
이다 1team에 속해있는 test-nginx를 bash셸을 이용하여 실행시키겠다 라는 의미이다
매니페스트파일을 쓰지않고 컨테이너를 만들기 위해서는 kubectl run test-nginx --image=nginx --port=80 -n 1team
명령어를 사용하면 똑같이 생성되는 것을 볼수 있다
위 사진을 보면 떠있는 IP는 내부의 IP로 외부에서 소통이 불가능하다 내부 소통만 가능하다는 것이다 하지만 외부에서 접속을 확인하고 싶거나 웹서버의 경우 외부에서 확인을 하고 싶다면 expose
명령어를 사용하면 된다
kubectl expose pod test-nginx --type=NodePort -n 1team
이렇게 명령어를 쳐주면 pod가 서비스가 되어 kubectl get svc -n 1team
를 해서 확인을 하면 포트번호가 지정된 것을 볼 수 있을 것이다 그 포트번호가 외부에에서 접속이 가능한 포트이다
정상적으로 잘 접속된 모습