Kubernetes 시작하기

By | 2024년 1월 11일
Table of Contents

Kubernetes 시작하기

설치

Docker Desktop 을 설치하고, 설정에서 Kubernetes 를 설정하는 방법으로 간단히 윈도우에 k8s 를 설치해 사용해 볼 수 있습니다.

Hello, World!

아래 파일을 생성합니다.

nginx-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-server
  labels:
    app: server
spec:
  replicas: 2
  selector:
    matchLabels:
      app: server
  template:
    metadata:
      name: nginx-server
      labels:
        app: server
    spec:
      containers:
        - name: server
          image: nginx:1.23.3
          ports:
            - containerPort: 80

아래 명령을 이용해 Deployment 를 생성합니다.

# kubectl delete -f nginx-deployment.yaml
kubectl create -f nginx-deployment.yaml
kubectl get pods
-------------------
NAME                           READY   STATUS    RESTARTS   AGE
nginx-server-5d4b88c67-rmlc2   1/1     Running   0          83s
nginx-server-5d4b88c67-tqs5x   1/1     Running   0          83s
kubectl logs nginx-server-5d4b88c67-rmlc2

하지만 현재 상태에서는 nginx 에 접속할 방법이 없습니다.

Deployment 에 접근하기

Deployment 에 접근하는 방법은 여러가지가 있습니다.

Pod 에 로그인하기

아래 명령을 이용해 컨테이너에 로그인할 수 있습니다.
디버깅시 여러모로 유용합니다.

kubectl exec nginx-server-5d4b88c67-rmlc2 -it -- /bin/sh

Pod 에 브라우저로 접근하기

위에서 containerPort: 80 으로 설정하였으므로, 컨터이너 포트는 80 입니다.

kubectl port-forward nginx-server-5d4b88c67-rmlc2 9090:80

위 명령을 실행해 주면 http://127.0.0.1:9090/ 으로 브라우저를 이용해 접근이 가능합니다.

NodePort 를 통해 접근

kubectl expose deployment nginx-server --type=NodePort --name=nginx-service-nodeport
kubectl get service
-------------------
NAME            TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes                ClusterIP   10.96.0.1       <none>        443/TCP        6h38m
nginx-service-nodeport    NodePort    10.99.247.240   <none>        80:32720/TCP   2m2s

http://127.0.0.1:32720/ 을 통해 브라우저에서 접근할 수 있습니다.

127.0.0.1 은 노드의 물리적인 외부 아이피이다.
Docker Desktop 을 이용해 인스턴스를 생성했기 때문에 단일 localhost 또는 127.0.0.1 로 접속하게 됩니다.
AWS 등에서 인스턴스를 생성했다면 EC2 인스턴스에 할당된 퍼블릭 아이피를 이용해 접속하면 됩니다.

LoadBalancer 를 통해 접근

kubectl expose deployment nginx-server --type=LoadBalancer --name=nginx-service
kubectl get service
-------------------
NAME            TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes      ClusterIP      10.96.0.1       <none>        443/TCP        2m50s
nginx-service   LoadBalancer   10.107.237.74   localhost     80:32229/TCP   10s

이제 브라우저에서 http://localhost/ 로 접속하면 nginx 가 실행중인것을 확인할 수 있습니다.

하지만 AWS 와 같은 클라우드 환경에서는 물리적인 로드밸런서를 사용하는 것이 되어 추가비용이 발생합니다.

Ingress 를 통해 접근

git clone https://github.com/kubernetes/ingress-nginx.git
cd ./ingress-nginx/deploy/static/provider/baremetal
kubectl apply -k ./

nginx-ingress.yaml

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  type: ClusterIP
  selector:
    app: server
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 80
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-ingress
spec:
  ingressClassName: "nginx"
  rules:
  - host: "localhost"
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: nginx-service
            port:
              number: 80
# kubectl delete -f nginx-ingress.yaml
kubectl apply -f nginx-ingress.yaml
kubectl get svc -n ingress-nginx
-------------------
NAME                                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
ingress-nginx-controller             NodePort    10.105.189.55   <none>        80:30452/TCP,443:32562/TCP   28m
ingress-nginx-controller-admission   ClusterIP   10.99.28.188    <none>        443/TCP                      28m
kubectl describe ing nginx-ingress

http://localhost:30452/ 로 접속할 수 있습니다.

One thought on “Kubernetes 시작하기

답글 남기기