실습 디렉토리 생성
mkdir ~/k8s-practice-web
웹 어플리케이션 서버는 node로 제작. 이를 위해 index.js 파일 작성
cat <<EOF > ~/k8s-practice-web/index.js
var http = require('http');
var os = require('os');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/html', 'Cache-Control': 'no-cache'});
res.end("<h1>I'm " + os.hostname() + "</h1>");
}).listen(8080);
EOF
Dockerfile 작성
cat <<EOF > ~/k8s-practice-web/Dockerfile
FROM node
RUN mkdir -p /usr/src/app
COPY index.js /usr/src/app
EXPOSE 8080
CMD [ "node", "/usr/src/app/index" ]
EOF
이미지 빌드
docker build -t node-server ~/k8s-practice-web/
이미지 확인
docker images | grep node-server
REPOSITORY TAG IMAGE ID CREATED SIZE
node-server latest 6115811ca3c2 28 minutes ago 899MB
deployment 디렉토리 생성
mkdir ~/k8s-practice-web/deployment
deployment 파일 작성
cat <<EOF > ~/k8s-practice-web/deployment/node-server-deployment.yml
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
name: node-server-deployment
spec:
replicas: 1
template:
metadata:
name: node-server-deployment-spec
labels:
role: demo
spec:
containers:
- name: node-server-container
image: node-server
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
EOF
deployment 생성
kubectl create -f ~/k8s-practice-web/deployment/node-server-deployment.yml
deployment.extensions/node-server-deployment created
deployment 확인
kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
node-server-deployment 0/1 1 0 7s
pod 확인
kubectl get pods
NAME READY STATUS RESTARTS AGE
node-server-deployment-58776857bb-jx78w 0/1 Error 2 20s
pod 접속
kubectl exec -it \\
$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\\n"}}{{end}}') \\
bash
웹 서버 접속 확인
curl localhost:8080
<h1>I'm node-server-deployment-58776857bb-jx78w</h1>
pod 접속 종료
exit
node-server Pod IP 확인
kubectl describe pod \\
$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\\n"}}{{end}}') \\
| grep IP | sed -E 's/IP:[[:space:]]+//'
10.32.0.4