k8sをやってみる―Deploymentを作る―

※この記事は私の学習のメモであり、有益な知見は含まれていません。読まないでください。

k8sのクラスタを作る

チュートリアルのnginxのコンテナを立ててスケールさせて…みたいなやつは大昔に一度やった。今回はymlファイルのアレ(何て言うんでしょう?)で宣言的に管理できる状態を目指す。

チュートリアルを読むといきなりMinikubeというやつが出てくる。

https://kubernetes.io/ja/docs/tutorials/hello-minikube/

kubernetesのクラスタを作るのにkubernetes hogeとかkubectl fugaみたいなコマンドじゃなくて別の何かが必要になるのか…

https://kubernetes.io/docs/setup/

kubernetesのクラスタを作る方法を選ぶためのページがある。ローカルでの開発にはminikubeを、プロダクションにはkubeadamということにしよう。

https://minikube.sigs.k8s.io/docs/start/

minikubeを入れた。

minikube start

するとkubectlが見つかりませんと表示された。そこで

https://kubernetes.io/ja/docs/tasks/tools/install-kubectl/#curl%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6linux%E3%81%B8kubectl%E3%81%AE%E3%83%90%E3%82%A4%E3%83%8A%E3%83%AA%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B

に従ってkubectlを入れた。あとでaptで入れればよかったと後悔したが、まあ良い。minikube deleteして再度minikube startするとなんとなく問題なさそうなログが出て作成が完了した。

ymlファイルを書いてなんかアプリケーションをデプロイしたい

k8sのドキュメントの中で情報を探すのに苦労したが、どうやら

https://kubernetes.io/docs/tasks/manage-kubernetes-objects/declarative-config/
https://kubernetes.io/docs/tasks/manage-kubernetes-objects/kustomization/

この辺りを読めばいいらしい。ymlで設定ファイルを書ける機能はkubernetesの(というかkubectlの?)標準機能としてありDeclarative Managementと呼ばれていて、kustomizeはその拡張?のようなものだろうか。

そもそもどうやるとアプリケーションをデプロイできるのかというのを忘れてしまっているので、チュートリアルの内容をDeclarative Managementの作法で進めてみる。

チュートリアルによるとまずはDeploymentを作るらしい。

https://kubernetes.io/docs/tasks/manage-kubernetes-objects/declarative-config/#how-to-create-objects

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

というファイルを作って同じディレクトリで kubectl apply -f . してみるとDeploymentが作られた。metadataとかselectorとか無くても動かんかw?と思って削ってみたらダメだった。これがホントの最小構成らしい。

次はこうして立てたコンテナに外からアクセスできるようにしたい。チュートリアルの方はしばらくデバッグ用と思われる kubectl proxy を使いながら基本的な操作の説明をするようだ。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です