docker
kubernetes
docker-for-mac
Knative

Docker Desktop for MacでKnativeを動かす

概要

少々無謀ですがDocker Desktop上でKnativeを動かしてみましたので,履歴として紹介します.なお,サンプルを動作させたところまでですので,過剰な期待はなさらないでください.また,動作させたサービスが落ちることもありました.

環境

以下の環境で試しました.メモリ8GBだとギリギリです.

項目 利用した環境
本体 MacBook Pro(13-inch, 2017)
CPU 2.3GHz Core i5
メモリ 8GB
Docker Docker Desktop for Mac (Docker CE 18.06.0-ce-mac69, edge)
Kubernetes Kubernetes v1.10.3 (上記に含まれているもの)

Kubernetesの設定は,CPUsを4に,Memoryを6GiBにしました.これ未満ではサンプルのサービスを起動する際にPODが立ち上がりません.

image.png

インストールと確認

参考文献を見ながら進めます.

Istioのインストール

まずはIstioをインストールします.
コマンドを打ち終わってからPODが起動するまで1分ほどお待ち下さい.

$ curl -L https://raw.githubusercontent.com/knative/serving/v0.1.0/third_party/istio-0.8.0/istio.yaml \
  | sed 's/LoadBalancer/NodePort/' \
  | kubectl apply -f -
$ kubectl label namespace default istio-injection=enabled

Knative Servingのインストール

Knativeをインストールします.
こちらもコマンド入力後,1分ほどお待ち下さい.

$ curl -L https://github.com/knative/serving/releases/download/v0.1.0/release-lite.yaml \
  | sed 's/LoadBalancer/NodePort/' \
  | kubectl apply -f -

services.yamlの作成と起動

動作確認のためのサンプルサービスのためのservices.yamlを作成します.
ここでは,参考文献に従ってhelloworld-goを使用します.

apiVersion: serving.knative.dev/v1alpha1 # Current version of Knative
kind: Service
metadata:
  name: helloworld-go # The name of the app
  namespace: default # The namespace the app will use
spec:
  runLatest:
    configuration:
      revisionTemplate:
        spec:
          container:
            image: gcr.io/knative-samples/helloworld-go # The URL to the image of the app
            env:
            - name: TARGET # The environment variable printed out by the sample app
              value: "Go Sample v1"

上記をapplyします.
PODが起動するまで30秒ほどお待ち下さい.

$ kubectl apply -f service.yaml

PODの起動を確認

下記のようにPODの起動を確認しましょう.
CPUやメモリが不足していると,SERVICESは作られるのですがPODが作られません.
なお,ここで表示されるPODの名称は,次で使います.

$ kubectl get pods
NAME                                              READY     STATUS    RESTARTS   AGE
helloworld-go-00001-deployment-5b5f5f877b-l4xb4   3/3       Running   0          13s

port-forwardの設定

先程調べたPODの名称を使って,PORT FORWARDの設定を行います.

$ kubectl port-forward helloworld-go-00001-deployment-5b5f5f877b-l4xb4 8080:8080

curlでアクセス

ここまでできたらcurlコマンドでアクセスしてみましょう.
下記のように表示されればOKです.
または,Webブラウザでhttp://localhost:8080/にアクセスしてみてください.

$ curl -v localhost:8080
* Rebuilt URL to: localhost:8080/
*   Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 8080 (#0)
> GET / HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.54.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Wed, 01 Aug 2018 12:56:18 GMT
< Content-Length: 27
< Content-Type: text/plain; charset=utf-8
<
Hello World: Go Sample v1!
• Connection #0 to host localhost left intact

まとめ

とりあえずDocker DesktopでもKnativeを動かせることが分かりました.
試し終わったら,helloworld-goやKnative,Istioのコンテナを止めたいのですが,kubectl delete中に無反応になってしまうこともありました.お気をつけください.

参考文献

https://github.com/knative/docs/blob/master/install/Knative-with-Minikube.md
https://github.com/knative/docs/blob/master/install/getting-started-knative-app.md