본문 바로가기

Infra/Kubernetes

2. 쿠버네티스로 컨테이너 실행하기

1. Kubectl

https://kubernetes.io/ko/docs/reference/kubectl/cheatsheet/

2. Kubectl 사용예제 (Echoserver 만들기)

  1. Echoserver라는 Pod 생성
    • kubectl run echoserver --generator=run-pod/v1 --image="k8s.gcr.io/echoserver:1.10" --port=8080
  2. Eschoserver 서비스 생성 (쿠버네티스의 Pod들이 접근할 때 필요함)
    • kubectl expose po echoserver --type=NodePort
  3. Pod상태 확인
    • kubectl get pods
  4. Service상태 확인
    • kubectl get services
  5. 에코 서버에 접근 가능하도록 포트 포워딩 설정
    • kubectl port-forward svc/echoserver 8080:8080
  6. 브라우저에 localhost:8080 테스트해서 정상적인 페이지가 열린다면 성공
  7. Pod의 Log 보기
    1. kubectl logs -f echoserver
참고로 Kubernetes 모드가 Minikube로 되어있다면 docker-desktop으로 바꿔줘야 아래의 에러를 피할 수 있다
"Unable to connect to the server: dial tcp 10.0.0.3/6443: I/o timeout"
(아래 스크린샷 참고)

 

3. Kubectl 사용예제 (Echoserver 삭제)

  1. kubectl delete pod echoserver
  2. kubectl delete service echoserver

4. Kubectl 기타 명령어

  • 자원확인
    • kubectl api-resources
  • 각 node의 IP Fetch
    • kubectl get nodes -o wide --no-headers | awk '{print $6}'
    • kubectl get nodes -o json | jq -r '.items[].status.addresses[] | select(.type=="InternalIP") | .address'
    • kubectl get nodes -o jsonpath='{.items[*].status.addresses[?(@.type=="InternalIP")].address}'
  • gron과 jid는 복잡하나 JSON 구조를 파악해 JSONPath에 인자로 전달할 값을 찾을 때 유용한 도구이다(개인적으론 사용안할듯)

 

5. Kubectl Run으로 컨테이너 실행하기

  1. nginx 컨테이너 실행
    • kubectl run nginx-app --image nginx --port=80
    • kubectl scale deploy nginx-app --replicas=2 (파드개수 늘리기)
  2. 템플릿으로 컨테이너 실행하기
    • kubectl apply -f nginx-deployment.yaml

nginx-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

 

6. 클러스터 외부에서 클러스터 안 앱에 접속하기

  • NodePort 설정 (참고로 Service Type으로는 ClusterIP, NodePort, LoadBalancer, ExternalName, Headless가 있다)
    • kubectl expose deployment nginx-deployment --type=NodePort
  •  Service생성 확인
    • kubectl get service
    • 또는 kubectl describe service nginx-deployment (더 상세하게 나온다)
      • Endpoints를 통해 어느 내부 아이피와 포트가 할당됬는지 알 수 있다(물론 kubectl get pods -o wide를 통해 같은 정보확인이 가능하다).
    • 아래의 결과에서 80내부포트가 외부의 32739포트로 연결 되어있음이 확인 가능하다.
      • nginx-deployment   NodePort    10.105.234.113   <none>        80:32739/TCP   2m27s

외부포트로 접속하면 Nginx사이트가 정상적으로 보인다

 

'Infra > Kubernetes' 카테고리의 다른 글

4. POD  (0) 2020.06.05
3. 쿠버네티스 개념  (0) 2020.06.05
1. 쿠버네티스 관련 설정 및 설치  (0) 2020.06.03
4. 파드와 노드  (0) 2020.05.24
3. Kubectl을 사용해서 디플로이먼트 생성하기  (0) 2020.05.24