GCPUG Beginners Tokyo 12 feat. GKE part.2 に参加してきました #gcpug

GCPUG Beginners Tokyo #12 feat. GKE part.2のハンズオンに参加して来ました。内容や感想をブログ化しました。
2019.01.29

はじめに

おはようございます、加藤です。GCPUG Beginners Tokyo #12 feat. GKE part.2のハンズオンに参加して来ました。 事前に資料が用意されており、その資料に従って4名程度でグループを組みフォローしながら進める形でした。

ハンズオン

前提

  • GCPアカウントの課金が有効になっていること
  • 費用はかからないがリソース作成の為に課金設定が必要
  • クレジットカードの登録が必要

資料

今回(Part2)

sakajunquality/gke-getting-started

Part1

プロジェクトの作成

後片付けをしやすい様にプロジェクトを新規作成します。

作成したプロジェクトに切り替えます。

Cloud Shellのアクティブ化

画面右上のCloud Shellのアイコンをクリックします。

しばらくすると画面下部にターミナルが開きます。

ソースコードの取得

$ git clone https://github.com/sakajunquality/gke-getting-started.git
$ cd gke-getting-started

GKEクラスターの作成

Part1のハンズオンを参考にGKEクラスターの作成までを行います。(クラスター作成が完了したら中断する) 1.2 必要なAPIの有効化 は完了に時間がかかります。 プロジェクト名 = プロジェクトIDとは限らないことに注意すれば特にハマるポイントはありませんでした。

$ cloudshell launch-tutorial -d tutorial.md

メインのハンズオン

下記コマンドでチュートリアルを起動して進めます。

$ cloudshell launch-tutorial -d tutorial2.md

コメント

  • docker-composeで起動するアプリはポート8083で動く
  • Cloud Shellのデフォルトのポートフォワードは8080なので変更が必要
  • 冒頭のCloud Shell操作のスライドに方法が記載されている
  • 鉛筆マークをクリックするとブラウザ上でエディタが開く
  • Cloud Shellがもう一つタブで立ち上がるが無視
  • komposeはdocker-composeからk8sのマニフェストファイルを作成してくれるツール
  • skaffold
  • コンテナのビルド→k8sへのデプロイをやってくれる
  • オプションでGoogle Cloud Buildを使用できる
  • helmと連携してデプロイすることも出来る
  • skaffold dev 実行中にコードを書き換えるとソースコードの変更を検知して、デプロイまで自動で走る

skaffold(kompose)によるマニフェストファイルの生成

scaffoldがDockerfile, docker-composeの2つのファイルからマニフェストファイルを生成してくれます。 正確にはskaffoldがkomposeを呼び出して変換しています。

docker-compose.yaml

version: '3'
services:
  app:
    build: .
    image: "gcr.io/gcpug-gke-part2/app3"
    ports:
     - "8089:8089"
FROM golang:1.11.5-alpine

WORKDIR $GOPATH/src/github.com/sakajunquality/gke-getting-started/app3
COPY main.go main.go

RUN go get -d -v ./...
RUN go install -v ./...

FROM alpine
RUN apk add --no-cache ca-certificates
COPY --from=0 /go/bin/app3 /usr/local/bin/app3

CMD ["app3"]

下記の2つのマニフェストが生成されました。

app-deployment.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  annotations:
    kompose.cmd: kompose convert -f docker-compose.yaml
    kompose.version: 1.17.0 (a74acad)
  creationTimestamp: null
  labels:
    io.kompose.service: app
  name: app
spec:
  replicas: 1
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        io.kompose.service: app
    spec:
      containers:
      - image: gcr.io/gcpug-gke-part2/app3
        name: app
        ports:
        - containerPort: 8089
        resources: {}
      restartPolicy: Always
status: {}

app-service.yaml

apiVersion: v1
kind: Service
metadata:
  annotations:
    kompose.cmd: kompose convert -f docker-compose.yaml
    kompose.version: 1.17.0 (a74acad)
  creationTimestamp: null
  labels:
    io.kompose.service: app
  name: app
spec:
  ports:
  - name: "8089"
    port: 8089
    targetPort: 8089
  selector:
    io.kompose.service: app
status:
  loadBalancer: {}

あとがき

チュートリアルの機能がものすごく便利で快適でした。

特にこのボタンを押すと、チュートリアルからCloud Shellにコマンドが貼り付けられるのが便利です。

skaffoldについては触りしか理解できていないので、もっと触ってみたいです。今後Dockerfileを書く際に使っていこうと思います。 最後にk8sクラスター、プロジェクトの削除を忘れると課金がかさむので忘れないようにご注意ください。