この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
おはようございます、加藤です。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クラスター、プロジェクトの削除を忘れると課金がかさむので忘れないようにご注意ください。