ここ最近はAWSのEKSを検証として業務で触り始めて、 kubernetesは本当によく出来ているなと感じている私です。kubernetesの勉強も含めて個人開発でも使いたいなと思っていますが、EKSは個人で利用するには高いです。
EKSを利用するのに必要なリソース
GKEは安く使えるとの記事をよく見かけるので試しに使ってみようと思います。今までGCPを使ってないこともあり無料トライアルで約3万円分のクレジットもあるので恐れずに利用出来そうです。ちなみに私はBigQueryしかGCPのサービスを触った事がないです。
今回の目標はnginxをインターネット越しに見れるようにする所まで。
VPCを作成する
最初にVPCを作成する。一旦下記設定で進める。
- 名前の指定
- サブネットを作成する(今回は自動)
- ファイアウォール ルールを設定する
- ダイナミック ルーティング モードを
リージョン
にする
GKEのクラスタを作成する
GCPのコンソールからクラスタを作成
する。
- テンプレードを
最初のクラスタ
を指定する - ロケーションタイプを
リージョン
にしてasia-northeast1(tokyo)
にする - ノードプールを編集する
- ノード数を
1
にする(ゾーン単位で起動する) - マシンタイプ を
small
にする (microだとエラーになりやすいので) - 高度な編集でプリエンプティブ ノードを有効化にする (安価にするため)
- ノード数を
- VPCネイティブを有効にする
- ネットワークを先ほど作ったVPCを指定する
- 後は基本的にはデフォルト
Kubenetesクラスタに接続する
kubenetesクラスタに接続するための準備を行う。
- gcludコマンドを導入する
- gcp のコンソールから接続のコマンドラインを取得して実行する
- kubectlコマンドを導入する
gcloud components install kubectl
ここまで実施するとgcpのkubenetesに接続出来ることが確認出来る。
$ kubectl config current-context gke_*****_asia-northeast1_****
kube-system
を見てみると何も設定しない状態でもいろんなPodが起動してた。
$ kubectl get pods NAME READY STATUS RESTARTS AGE event-exporter-v0.2.4-79db85647b-8m4hk 2/2 Running 0 40m fluentd-gcp-scaler-674c75cb48-65bk7 1/1 Running 0 40m fluentd-gcp-v3.1.1-46pwm 2/2 Running 0 42m fluentd-gcp-v3.1.1-kdwf6 2/2 Running 0 41m fluentd-gcp-v3.1.1-zzdl7 2/2 Running 0 41m heapster-v1.6.1-fb877c6bf-4fm6t 3/3 Running 0 31m kube-dns-76dbb796c5-9sxpn 4/4 Running 0 22m kube-dns-76dbb796c5-qqsjb 4/4 Running 0 40m kube-dns-autoscaler-67c97c87fb-hz4qn 1/1 Running 0 40m kube-proxy-gke-****-preemptible-small-8d635337-s2s0 1/1 Running 0 41m kube-proxy-gke-****-preemptible-small-d24552f5-qf6m 1/1 Running 0 41m kube-proxy-gke-****-preemptible-small-ebd212d3-9q59 1/1 Running 0 41m l7-default-backend-7ff48cffd7-ch94d 1/1 Running 0 40m metadata-agent-2z7cm 1/1 Running 5 41m metadata-agent-cluster-level-579ffb7c5f-zmvhm 1/1 Running 6 40m metadata-agent-fp79c 1/1 Running 3 42m metadata-agent-fpsnw 1/1 Running 5 41m metrics-server-v0.2.1-fd596d746-7shvc 2/2 Running 0 22m prometheus-to-sd-8jdt4 1/1 Running 0 42m prometheus-to-sd-g7vcj 1/1 Running 0 41m prometheus-to-sd-mdfcc 1/1 Running 0 41m
nginxのPodを作成して接続してみる
nginxのためのdeploymentとserviceのマニフェストを~/nginx/
配下に作成する。
$ tree nginx nginx ├── deployment.yaml └── service.yaml
deployment.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: nginx labels: name: nginx spec: replicas: 2 selector: matchLabels: name: nginx template: metadata: labels: name: nginx spec: containers: - name: nginx image: nginx:1.11.3 ports: - containerPort: 80
service.yaml
apiVersion: v1 kind: Service metadata: name: nginx spec: selector: name: nginx type: LoadBalancer ports: - port: 80 name: http targetPort: 80
$ kubectl apply -f ~/nginx/
でkubernetes上にデプロイする。
nginxのEXTERNAL-IP
を確認する。
$ kubectl get services nginx NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx LoadBalancer xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx 80:32710/TCP 39s
ブラウザでEXTERNAL-IP
に接続するとnginxの初期画面が表示される
マシンタイプを変更する
最初はmicro
にして試していたが、いきなりnodeが落ちたのでsmall
にしたくなった。
ノードプールから直接変更は出来ないようなので入れ替える下記の手順となりそう。
- 新しいノードプールを作成する
- Podを新しいノードプールに移行する
- 古いノードプールを削除する
触ってみた感想
意外とあっさりkubernetesのクラスタ構築が出来てGCPは設定少なくても動いてすごいなと思いました(小並感)
プリエンプティブ ノードを利用することで、個人利用でも絶望しない程度の金額で収まるかと思うので、気軽に使えそうです。移動履歴のアプリでlambdaを使っている所をkubernetesのjobで出来ないかなとも思ってるので試したいところ。https化どうやるんだろ…