その辺にいるITインフラ屋さん

たまーに気が向いた時に適当な事を書く個人の日記みたいなもの。個人で作ったアプリのサポートページとしても利用しています。

AWSを触ってる人がGKEを試してみる

ここ最近はAWSのEKSを検証として業務で触り始めて、 kubernetesは本当によく出来ているなと感じている私です。kubernetesの勉強も含めて個人開発でも使いたいなと思っていますが、EKSは個人で利用するには高いです。

EKSを利用するのに必要なリソース

  • EKSクラスタの料金
  • ワーカーノード(EC2)の費用
  • NAT Gatewayの費用
  • ELBの費用

GKEは安く使えるとの記事をよく見かけるので試しに使ってみようと思います。今までGCPを使ってないこともあり無料トライアルで約3万円分のクレジットもあるので恐れずに利用出来そうです。ちなみに私はBigQueryしかGCPのサービスを触った事がないです。

今回の目標はnginxをインターネット越しに見れるようにする所まで。



VPCを作成する

最初にVPCを作成する。一旦下記設定で進める。

  • 名前の指定
  • サブネットを作成する(今回は自動)
  • ファイアウォール ルールを設定する
  • ダイナミック ルーティング モードをリージョンにする

GKEのクラスタを作成する

GCPのコンソールからクラスタを作成する。

  • テンプレードを最初のクラスタを指定する
  • ロケーションタイプを リージョンにして asia-northeast1(tokyo)にする
  • ノードプールを編集する
    • ノード数を1にする(ゾーン単位で起動する)
    • マシンタイプ を smallにする (microだとエラーになりやすいので)
    • 高度な編集でプリエンプティブ ノードを有効化にする (安価にするため)
  • VPCネイティブを有効にする
  • ネットワークを先ほど作ったVPCを指定する
  • 後は基本的にはデフォルト

Kubenetesクラスタに接続する

kubenetesクラスタに接続するための準備を行う。

ここまで実施すると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の初期画面が表示される f:id:mayuki123:20190505225239p:plain

マシンタイプを変更する

最初はmicroにして試していたが、いきなりnodeが落ちたのでsmallにしたくなった。 ノードプールから直接変更は出来ないようなので入れ替える下記の手順となりそう。

  • 新しいノードプールを作成する
  • Podを新しいノードプールに移行する
  • 古いノードプールを削除する

触ってみた感想

意外とあっさりkubernetesクラスタ構築が出来てGCPは設定少なくても動いてすごいなと思いました(小並感)
プリエンプティブ ノードを利用することで、個人利用でも絶望しない程度の金額で収まるかと思うので、気軽に使えそうです。移動履歴のアプリでlambdaを使っている所をkubernetesのjobで出来ないかなとも思ってるので試したいところ。https化どうやるんだろ…