Google Kubernetes Engine を使って Kubernetesクラスタを作成してみた

Google Kubernetes Engine(GKE)を使ったクラスタの作成方法をまとめました。
2018.12.12

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

おはようございます、加藤です。最近少しずつですがKubernetes(以降、k8s)を勉強し始めました。Google Kubernetes Engine(以降、GKE)を使ったクラスタの作成方法をまとめてみました。

やってみた

クラスタの作成

k8sのクラスタを作成します、先に新規プロジェクトを作成しそのプロジェクト内に作成すると、後から簡単に破棄できる為オススメです。
Google Cloud Platform のプロジェクトを作成する | MAGELLAN BLOCKS

クラスタを作成します。

デフォルトのままで作成を完了します。

名前 備考
名前 standard-cluster-1 クラスタを識別する任意の名前
ロケーションタイム ゾーン リージョン クラスタ  |  Kubernetes Engine  |  Google Cloud
ゾーン us-central1-a 検証なので地理的に遠いがusを選択
マスターのバージョン 1.10.9-gke.5(デフォルト) k8sマスターノードのバージョン

ノードプール(default-pool)

名前 備考
ノード数 3
マシンタイプ マシンタイプ 任意のマシンタイプを選択(今回はvCPU x 1を選択した)
自動アップグレード オン

作成が完了すると、一覧でグリーンチェックが付きます。

gcloudコマンドのインストール

この作業を行うとkubectl/usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/bin/kubectlに変更されます。

$ brew cask install google-cloud-sdk

~/.bash_profileに以下を追記

# gcloud
source '/usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/path.bash.inc'
source '/usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/completion.bash.inc'

kubectlのインストール

$ gcloud components update
$ gcloud components install kubectl

クラスタへ接続

# gcloudのコンフィグセットを作成する
$ gcloud config configurations create k8s-practice
Created [k8s-practice].
Activated [k8s-practice].
# 作成したプロジェクトがActiveになっていることを確認
$ gcloud config configurations list
NAME          IS_ACTIVE  ACCOUNT               PROJECT      DEFAULT_ZONE   DEFAULT_REGION
default       False      xxxxxxxxxx@gmail.com  main-223214  us-central1-a  us-central1
k8s-practice  True
# Googleアカウントの認証
$ gcloud auth login
Your browser has been opened to visit:

    https://accounts.google.com/o/oauth2/auth?認証用URL


WARNING: `gcloud auth login` no longer writes application default credentials.
If you need to use ADC, see:
  gcloud auth application-default --help

You are now logged in as [xxxxxxxxxx@gmail.com].
Your current project is [None].  You can change this setting by running:
  $ gcloud config set project PROJECT_ID
# プロジェクトID・リージョン・ゾーンの設定
$ gcloud config set project k8s-practice
Updated property [core/project].
$ gcloud config set compute/region us-central1
Updated property [compute/region].
$ gcloud config set compute/zone us-central1-a
Updated property [compute/zone].
# 作成したプロジェクトに設定されていることを確認
$ gcloud config configurations list
NAME          IS_ACTIVE  ACCOUNT               PROJECT       DEFAULT_ZONE   DEFAULT_REGION
default       False      xxxxxxxxxx@gmail.com  main-223214   us-central1-a  us-central1
k8s-practice  True       xxxxxxxxxx@gmail.com  k8s-practice  us-central1-a  us-central1

デフォルトだと、k8sの設定ファイルは~/.kube/config保存されます。
k8s環境毎に設定ファイルを分けたいので環境変数KUBECONFIGで参照・保存先を変更します。
環境変数は作業ディレクトリに移動した時に自動でセットしたいので、direnvを使いました。複数のバージョンのkubectlを使っている場合なども、これを使用すると簡単にパス指定ができて便利です。
同時にgcloudのコンフィグセットも選択するように設定しました。
以降の作業は任意場所に専用の作業ディレクトリを作成し、そこで行ってください。

.envrc

export KUBECONFIG=$(pwd)/.kube/config
gcloud config configurations activate k8s-practice
gcloud config list

k8sのコンフィグを生成します。GKEの管理画面のクラスタ一覧に接続というボタンがあるのでクリックすると、コマンドを取得できます。

$ gcloud container clusters get-credentials standard-cluster-1 --zone us-central1-a --project k8s-practice-223214

作業ディレクトリに.kube/configが作成されます。
クラスタに接続できるか確認してみましょう。

$ kubectl version
Client Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.7", GitCommit:"0c38c362511b20a098d7cd855f1314dad92c2780", GitTreeState:"clean", BuildDate:"2018-08-20T10:09:03Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"10+", GitVersion:"v1.10.9-gke.5", GitCommit:"d776b4deeb3655fa4b8f4e8e7e4651d00c5f4a98", GitTreeState:"clean", BuildDate:"2018-11-08T20:33:00Z", GoVersion:"go1.9.3b4", Compiler:"gc", Platform:"linux/amd64"}

接続できました!Podの立ち上げもできるか確認してみます。

apiVersion: v1
kind: Pod
metadata:
  name: sample-pod
spec:
  containers:
    - name: nginx-container
      image: nginx:1.13
$ kubectl apply -f sample-pod.yaml
pod "sample-pod" created
$ kubectl get pods
NAME         READY     STATUS    RESTARTS   AGE
sample-pod   1/1       Running   0          4s
$ kubectl delete -f sample-pod.yaml
pod "sample-pod" deleted

Podの作成も問題ありませんでした!

あとがき

簡単にセットアップできました!今回作成した環境は、GCPの無料利用枠の範囲外、ご注意ください。
複数のk8s環境を利用している場合でも、ミスが起きにくい様に意識してセットアップしてみました。
ちなみに、書評「Kubernetes完全ガイド」Kubernetesを学ぶ全ての人にオススメしたい | DevelopersIOを読んで勉強しています!