Mac 용 Docker [Edge]에서 Kubernetes를 사용해보십시오.

Mac 용 Docker [Edge]에서 Kubernetes를 사용해보십시오.



설치


  • macOS Sierra(10.12.6)

  • Mac용 Docker[Edge]을 설치합니다.
  • Mac용 Docker 설정에서 Kubernetes를 활성화합니다.
  • Kubernetes 패키지 관리자 helm을 설치합니다.
  • $ brew install kubernetes-helm
    
  • 버전은 다음과 같습니다.
  • $ docker -v
    Docker version 18.03.0-ce-rc4, build fbedb97
    
    $ kubectl version
    Client Version: version.Info{Major:"1", Minor:"9", GitVersion:"v1.9.2", GitCommit:"5fa2db2bd46ac79e5e00a4e6ed24191080aa463b", GitTreeState:"clean", BuildDate:"2018-01-18T10:09:24Z", GoVersion:"go1.9.2", Compiler:"gc", Platform:"darwin/amd64"}
    Server Version: version.Info{Major:"1", Minor:"9", GitVersion:"v1.9.2", GitCommit:"5fa2db2bd46ac79e5e00a4e6ed24191080aa463b", GitTreeState:"clean", BuildDate:"2018-01-18T09:42:01Z", GoVersion:"go1.9.2", Compiler:"gc", Platform:"linux/amd64"}
    
    $ helm version
    Client: &version.Version{SemVer:"v2.8.1", GitCommit:"6af75a8fd72e2aa18a2b278cfe5c7a1c5feca7f2", GitTreeState:"clean"}
    Server: &version.Version{SemVer:"v2.8.1", GitCommit:"6af75a8fd72e2aa18a2b278cfe5c7a1c5feca7f2", GitTreeState:"clean"}
    

    Kubernetes란?


  • 컨테이너 오케스트레이션 도구입니다.
  • 자동 배포, 스케일링, 컨테이너 애플리케이션 관리를 위한 오픈 소스 소프트웨어입니다.

  • 신청



    이번에는 Nginx + PHP-FPM 7.1 웹 애플리케이션을 구축합니다.



    Dockerfile


  • nginx

  • Dockerfile
    FROM nginx:1.13.8-alpine
    
    ADD conf/nginx.conf /etc/nginx/nginx.conf
    

    nginx.conf
    user  nginx;
    worker_processes  1;
    
    events {
        worker_connections  1024;
    }
    
    http {
        include       mime.types;
        default_type  text/html;
        sendfile        on;
        keepalive_timeout  65;
    
        server {
            listen       8080;
            server_name  localhost;
            root   /docker/app/;
    
            location / {
                index  index.php;
            }
    
            location ~ \.php {
                fastcgi_pass  127.0.0.1:9000;
                fastcgi_index index.php;
                include       fastcgi_params;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            }
        }
    
    }
    
  • php-fpm

  • Dockerfile
    FROM php:7.1-fpm-alpine
    

    Docker 컨테이너 빌드


    $ docker build -t sample/nginx:1.0 docker/nginx
    $ docker build -t sample/php:1.0 docker/php-fpm
    

    Pods


  • 하나 이상의 컨테이너로 구성됩니다.
  • Kubernetes에서 배포할 수 있는 최소 단위입니다.

  • Deployment


  • ReplicaSet과 Pods로 구성됩니다.

  • deployment.yml
    apiVersion: apps/v1beta1
    kind: Deployment
    metadata:
      name: sample-k8s
    spec:
      replicas: 1
      template:
        metadata:
          labels:
            name: sample-k8s
        spec:
          containers:
            - name: sample-nginx
              image: "sample/nginx:1.0"
              imagePullPolicy: IfNotPresent
              ports:
              - containerPort: 8080
              volumeMounts:
              - name: web-root
                mountPath: /docker
            - name: sample-php
              image: "sample/php:1.0"
              imagePullPolicy: IfNotPresent
              ports:
              - containerPort: 9000
              volumeMounts:
              - name: web-root
                mountPath: /docker
          volumes:
          - name: web-root
            hostPath:
              path: /Users/moritake/go/src/github.com/mediba-moritake/sample-kubernetes
    

    서비스


  • Pods에 대한 액세스를 제공합니다.

  • service.yml
    apiVersion: v1
    kind: Service
    metadata:
      name: sample-k8s
    spec:
      type: NodePort
    #  type: LoadBalancer
      selector:
        name: sample-k8s
      ports:
      - port: 8080
        protocol: TCP
        targetPort: 8080
    

    Ingress


  • HTTP(S) 로드 밸런서를 설정합니다.

  • ingress.yml
    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: sample-k8s
      annotations:
        kubernetes.io/ingress.class: nginx
    spec:
      backend:
        serviceName: sample-k8s
        servicePort: 8080
    

    Ingress Controller


  • Ingress 로드 밸런서의 실제 상태인 Nginx Ingress Controller를 설치합니다.
  • $ helm install stable/nginx-ingress
    

    Deployment, Service, Ingress 만들기


    $ kubectl create -f deployment.yml -f service.yml -f ingress.yml
    

    PHP 애플리케이션



    index.php
    <?php
    
    echo 'Hello k8s!';
    

    동작 확인


    $ curl localhost
    Hello k8s!
    

    요약



  • Mac용 Docker[Edge]에서 Kubernetes를 사용해 보았습니다.
  • 보다 높은 환경 일치를 목표로 Ingress 를 도입했습니다만, 개발 환경이면 필수는 아닙니다. 그 때는 Service 를 type: LoadBalancer 와 같이 설정합시다.
  • Docker Compose에서도 비슷한 일이 가능하다고 생각하지만 Kubernetes를 사용하면 더 높은 환경 일치가 될 수 있습니까?

  • Amazon EKS (현재는 미리보기)를 빨리 사용하고 싶습니다.

  • 소스 코드


  • htps : // 기주 b. 코 m / 메바 바 모리 타케 / 사 mp ぇ

  • 참고(자주 사용하는 명령)


  • pods/service/ingress 상태를 확인합니다.
  • $ kubectl get pods
    $ kubectl get service
    $ kubectl get ingress
    
  • pods/service/ingress에 대한 자세한 설명을 검토하십시오.
  • $ kubectl describe pods
    $ kubectl describe service
    $ kubectl describe ingress
    
  • 컨테이너 로그를 확인합니다.
  • $ kubectl log #{pod名} -c #{コンテナ名}
    $ kubectl log sample-k8s-xxxxxxxxxx-yyyyy -c sample-nginx
    
  • 컨테이너에 들어갑니다.
  • $ kubectl exec -it #{pod名} -c #{コンテナ名} ash
    $ kubectl exec -it sample-k8s-xxxxxxxxxx-yyyyy -c sample-nginx ash
    $ kubectl exec -it sample-k8s-xxxxxxxxxx-yyyyy -c sample-php ash
    
  • 컨테이너에서 명령을 실행합니다.
  • $ kubectl exec #{pod名} -c #{コンテナ名} -- #{コマンド}
    $ kubectl exec sample-k8s-xxxxxxxxxx-yyyyy -c sample-nginx -- nginx -v
    $ kubectl exec sample-k8s-77596b46b5-ggvg4 -c sample-php -- php -v
    

    좋은 웹페이지 즐겨찾기