今朝メーリングリストで通知が来たので試してみた!
導入
組み込まれるのは17.12.0-ce-mac45
からということでEdge版をダウンロード&インストール。
Preferences..メニューを確認するとちゃんとKubernetes v1.8.2
の文字が!
Kubernetesを使用するには、新たに設けられたKubernetesタブからEnable Kubernetes
をオンにしてApplyボタンをポチり。ちょっと待つとKubernetes is running
になる。
動作確認
そんなこんなで早速いじってみる。
contextの切り替え
操作対象のクラスタとして既存のminikubeに加えて、新たにdocker-for-desktop
が追加されていることが確認できる。use-context
で切り替えて使用していく。minikube同様に(当たり前だけど)一台のnode構成。
$ kubectl config get-contexts CURRENT NAME CLUSTER AUTHINFO NAMESPACE * minikube minikube minikube docker-for-desktop docker-for-desktop-cluster docker-for-desktop $ kubectl config use-context docker-for-desktop Switched to context "docker-for-desktop". $ kubectl get node NAME STATUS ROLES AGE VERSION docker-for-desktop Ready master 39m v1.8.2
Manifestfileの作成
公式ドキュメントじゃDocker.incの苦々しい思いもあってかdocker-compose.ymlを使う例しか載ってないけど、せっかくのKubernetesなんでちゃんとManifestfileを使ったデプロイをしてみる。
(docker-compose.yamlでデプロイできるKomposeなんてものも世間にはあるけど、k8sとdocker compose必ずしも完全互換じゃなくて凝ったことをやろうとすると躓くこと必至なんで、普通にKubernetesの流儀を学ぶことをオススメしたい。)
例としてminikubeの時と同様にnginxを立ち上げてみる。
以下のようなManifestfileを用意。今回は折角ローカルで動いているということで、開発時を想定してホストのディレクトリをマウントしてみる。
# pod.yaml apiVersion: v1 kind: Pod metadata: name: http labels: app: http-app spec: containers: - name: nginx image: nginx:latest ports: - name: http-port containerPort: 80 volumeMounts: - name: docroot mountPath: /usr/share/nginx/html volumes: - name: docroot hostPath: path: /PATH/TO/DIR # 作業ディレクトリ
ちなみにこのディレクトリはFile Sharingタブで指定されているディレクトリの下位である必要がある。/Users/YOUR_NAME
とか/tmp/k8s/sample
とか。(まあこれは通常のDocker for Mac使用時も同様だけど。)
External IPどうすりゃええねんと色々試行錯誤してみたけど、docker-composeと同じノリでlocalhostで使いたければひとまずtype: LoadBalancer
にしておけば良さそう。
# service.yaml kind: Service apiVersion: v1 metadata: name: http-service labels: app: http-app spec: selector: app: http-app ports: - port: 8080 targetPort: http-port type: LoadBalancer
起動
createコマンドで先程作成したManifestfileを指定して起動。
$ kubectl create -f service.yaml -f pod.yaml service "http-service" created pod "http" created $ kubectl get all NAME READY STATUS RESTARTS AGE po/http 1/1 Running 0 9m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE svc/http-service LoadBalancer 10.106.61.172 <pending> 8080:31557/TCP 10m svc/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 4h
svcは<pending>
のままで問題なさそう。podがRunning
になれば起動完了。
curlでアクセスすると、最初はドキュメントルートが空なので当然403。
$ curl localhost:8080 <html> <head><title>403 Forbidden</title></head> <body bgcolor="white"> <center><h1>403 Forbidden</h1></center> <hr><center>nginx/1.13.8</center> </body> </html>
それじゃあというわけで、マウントしたディレクトリにindex.htmlを作成すると・・・
$ echo '<html><body>hello k8s!</body></html>'> /PATH/TO/DIR/index.html $ curl localhost:8080 <html><body>hello k8s!</body></html>
ちゃんと作成したindex.htmlが読み込まれてる!
まだ出始めだしminikubeは色々addonが用意されてて便利だしですぐに移行する/できるかというと微妙かなーとは思うけど、公式ツールに組み込まれてることによるお手軽さは良いですな。社内で初心者にKubernetesの説明をする分にはやりやすくなる。
これまで手軽さからローカル開発時はdocker-compose、ステージング・本番環境はk8sみたいな二重体制だったのを上手いこと一本化できれば良いなあ。
- 作者: ?橋健一,谷口禎英,井本大登,山崎勝平,大和田純,内村元樹,坂東昌哉,平田敏之,牧大輔,板敷康洋,大?浩崇,穴井宏幸,原口宗悟,久田真寛,ふしはらかん,のざきひろふみ,うらがみ,ひげぽん,池田拓司,はまちや2,竹原,片田雄樹,渋江一晃,WEB+DB PRESS編集部編
- 出版社/メーカー: 技術評論社
- 発売日: 2017/06/24
- メディア: 大型本
- この商品を含むブログを見る
↑の特集がpodとかserviceとかって何よ?的なKubernetesの概念を最初にざっくり把握するにはおすすめ。