Kubernetes (minikube)가 Nginx를 배포하고 Hello World를 표시하도록합니다.

개요



이 문서에서는 Ubuntu에서 만든 minikube에 Nginx를 배포합니다. 그런 다음 "Hello World"의 HTML 파일을 배포 한 Nginx에서 볼 수 있도록 ConfigMap을 설정합니다.

전제 조건



우분투에 minikube를 시작하십시오. minikube의 설치 방법에 대해서는 저자가 작성한 아래의 기사를 참고해 주십시오.
Ubuntu20.04.1 LTS에 minikube 설치

1. Nginx YAML 파일 만들기



Nginx YAML 파일을 만듭니다. vi nginx.yaml에서 Vi 편집기를 시작하여 다음 YAML 파일을 만듭니다.
apiVersion: v1 # 使用するKubernetes APIバージョンを定義
kind: Service # PodのネットワークであるServiceリソースを定義
metadata: # 名前やラベルを指定
  labels:
    app: nginx-app
    name: nginx
  name: nginx-service
spec: # spec内にリソースの仕様を記述する
  selector: # 同一のラベルを定義しているリソースを参照
    app: nginx-app
    name: nginx
  type: NodePort # Kubenetes外からアクセスできるようにNodePortを指定(ホストOSからNginxの画面が確認できるようにする)
  ports:
  - name: nginx-port #ポート番号を指定
    port: 80
    protocol: TCP
    targetPort: nginx-port
---
apiVersion: apps/v1
kind: Deployment # Podの自己修復機能を持つDeploymentリソースを定義
metadata:
  labels:
    app: nginx-app
    name: nginx
  name: nginx
spec:
  replicas: 1 # 作成するPod数を定義
  selector:
    matchLabels:
      app: nginx-app
      name: nginx
  template:
    metadata:
      labels:
        app: nginx-app
        name: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest # NginxのDockerHubに記載されているDockerImageの名称とバージョンを指定
        ports:
        - containerPort: 80 # Podから解放するポート番号を定義
          name: nginx-port
          protocol: TCP

2. Nginx 배포



  • 다음 명령을 실행하여 만든 YAML 파일을 배포합니다.
    $ kubectl apply -f nginx.yaml
    

  • 아래 명령을 실행하여 Nginx 포드와 서비스가 생성되었는지 확인합니다.
    $ kubectl get pod | grep nginx
    nginx-669bffdf57-hnmph       1/1     Running   1          25m
    $ kubectl get service | grep nginx
    nginx-service                NodePort    10.108.1.208    <none>        80:30348/TCP   25m
    

  • 아래 명령을 실행하여 호스트 OS(Ubuntu)에서 Nginx 화면을 표시할 수 있는 IP 주소를 지불합니다.
    $ minikube service nginx-service
    |-----------|---------------|---------------|---------------------------|
    | NAMESPACE |     NAME      |  TARGET PORT  |            URL            |
    |-----------|---------------|---------------|---------------------------|
    | default   | nginx-service | nginx-port/80 | http://192.168.49.2:30348 |
    |-----------|---------------|---------------|---------------------------|
    * Opening service default/nginx-service in default browser...
    
  • 브라우저에서 내보낸 IP 주소로 이동하여 Nginx의 기본 화면을 볼 수 있는지 확인합니다.



  • 3. index.html을 Configmap 리소스에 저장



    ConfigMap은 구성 파일을 리소스에 저장하고 저장된 구성 파일을 Pod에 마운트하는 데 사용됩니다.
    Kubernetes 공식 ConfigMap 개요
    vi nginx-configmap.yaml에서 Vi 편집기를 시작하고 ConfigMap의 YAML 파일을 만듭니다.
    apiVersion: v1
    kind: ConfigMap # Podに設定ファイルを渡すことができるリソース
    metadata:
      labels:
        app: nginx-app
        name: nginx
      name: nginx-html
    data: # 下記にPodに渡したい設定ファイルを定義
      index.html: | # ファイル名を定義
        <html> # 設定ファイルの中身を記載
          <head>
            <title>
            Kubernetes Hello World
            </title>
          <body>
            <h1>
            Kubernetes Hello World
            </h1>
            <h2>
            Kubernetes Nignx ConfigMap
            </h2>
          </body>
        </html>
    

    YAML 파일을 만든 후 kubectl apply -f nginx-configmap.yaml를 실행하여 ConfigMap 리소스를 만듭니다. ConfigMap 리소스가 생성되었는지 확인하려면 kubectl get configmap를 실행합니다.
    $ kubectl get configmap | grep nginx
    nginx-html         1      9m26s
    

    4. Nginx의 Pod에서 index.html을 볼 수 있도록



    방금 만든 ConfigMap 리소스를 Pod에 마운트하기 위해 1장에서 만든 nginx.yaml을 수정합니다.
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: nginx-app
        name: nginx
      name: nginx-service
    spec:
      selector:
        app: nginx-app
        name: nginx
      type: NodePort
      ports:
      - name: nginx-port
        port: 80
        protocol: TCP
        targetPort: nginx-port
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: nginx-app
        name: nginx
      name: nginx
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx-app
          name: nginx
      template:
        metadata:
          labels:
            app: nginx-app
            name: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:latest
            ports:
            - containerPort: 80
              name: nginx-port
              protocol: TCP
            volumeMounts: # Pod上にマウントするファイルを定義
            - name: nginx-html-file # マウントしたいvolumeを指定
              mountPath: /usr/share/nginx/html/index.html # 配置するパスを指定(Nginxのデフォルトの公開ディレクトリは/usr/share/nginx/html)
              subPath: index.html # マウントするファイル名を指定
              readOnly: true
          volumes: # マウントしたいリソースを定義
            - name: nginx-html-file # Podにマウントするvolumeを定義
              configMap:
                name: nginx-html # 使用するConfigMapリソースを指定
                items: # ConfigMapリソースで定義した、どのファイルを使用するか指定する
                - key: "index.html"
                  path: "index.html"
    

    YAML 파일을 수정한 후 kubectl apply -f nginx.yaml를 실행하여 수정한 내용을 적용합니다. 그런 다음 브라우저를 검토하여 index.html의 내용이 표시되는지 확인합니다.



    마지막으로



    이 문서에서는 ConfigMap을 사용하여 Nginx에 index.html을 표시 할 수있었습니다. Kubernetes(minikube)내의 ConfigMap과 Nginx를 조합하는 것으로 HTML의 공부나 동작 확인등에 사용할 수 있습니다.

    좋은 웹페이지 즐겨찾기