Kubernetes The Hard Wayの事前準備

5月 14, 2021

以下をもとにKubernetes The Hard Wayの事前準備をします。
https://github.com/kelseyhightower/kubernetes-the-hard-way/blob/master/docs

まずは、作業PCにGCPのSDKとkubectlとcfsslを入れようと思います。

以下2つを対象としています。

  • 01-prerequisites.md
  • 02-client-tools.md

前提として、以下のような条件で進めます。

  • 事前に、GCPのアカウントを作成しておきましょう
  • 本手順はMacOSで動作確認しています
  • GCPでKubernetesを動かせればいい!が目標です

公式ドキュメントを見ながら進めます。
https://cloud.google.com/sdk/docs/downloads-versioned-archives

アーカイブをダウンロードする

ターミナルで以下のコマンドを実行します。

getconf LONG_BIT

64が結果で返ってきたので、macOS 64 ビット(x86_64)をダウンロードします。
ダウンロード完了したら、アーカイブを展開しておきます。

インストールスクリプトを実行する

ターミナルで、先ほどインストールしたディレクトリまで移動します。 移動後、インストールスクリプトを実行します。

cd google-cloud-sdk
sh install.sh

SDKを初期化する

インストールスクリプト実行後、SDKを初期化します。

./google-cloud-sdk/bin/gcloud init

コマンド実行後、ブラウザが起動して、以下のような表示がされたらGoogle Cloud Platform リソースにアクセスする権限が付与されます。
コマンドプロンプトに移動すると、以下のようになっていました。

You are logged in as: [sample@gmail.com]. Pick cloud project to use: [1] api-project-274393732609 [2] api-project-527724764603 [3] clean-abode-282305 [4] keen-autumn-668 [5] Create a new project Please enter numeric choice or text value (must exactly match list item):

プロジェクト作った覚えないけど、いくつかできてる、、 今回はとりあえず5を選択してみます。

Updates are available for some Cloud SDK components. To install them, please run: $ gcloud components update

ひとまず、SDKの初期化はできました。

設定状況を確認するコマンドがあるみたいなので、現状どんな設定がされているか確認しておきます。

  • 認証情報がローカル システムに保存されているアカウントのリストを表示する
gcloud auth list
  • 有効な SDK 構成のプロパティのリストを表示する
gcloud config list

gcloudコマンドのパスを通しておく

~/.bash_profile~/.bash_profileのパスを追加します。
追加したら、sourceで変更を反映させます。

vi ~/.bash_profile source ~/.bash_profile

Cloud SDK ツールの承認

GCPにアクセスするには、Google Cloud SDK ツールを承認する必要があります。

アカウントには、2つのタイプがあります。

  • ユーザアカウント
    • エンドユーザーが自分のアプリケーションに対して、直接認証するための Google アカウント
    • 以下の場合に使用する
      • Cloud SDK ツールをコマンドラインで使用する
      • スクリプト化して 1 台のマシンで使用する
  • サービスアカウント
    • GCP プロジェクトに関連付けられている Google アカウント
    • 特定のユーザではない
    • 以下の場合に使用する
      • Cloud SDK を本番環境へのマシンのデプロイの一環としてインストールして設定する
      • すべてのユーザーが root にアクセスできる Google Compute Engine 仮想マシン インスタンスで使用する

ユーザアカウントを使用して承認する

gcloud auth login で、ユーザー アカウントの承認のみを行います。

gcloud auth login

コマンド実行後、ブラウザが起動するので、Googleアカウントでログインします。

ターミナルに戻って、gcloud auth listを実行して、先ほどログインしたGoogleアカウントが表示されたら完了です。

gcloud auth list
ACTIVE  ACCOUNT
*       sample@gmail.com

サービス アカウントを使用して承認する

Google Cloud Console の [サービス アカウント] ページに移動します。

https://console.cloud.google.com/iam-admin/serviceaccounts?_ga=2.171402720.1742009815.1594636446-2136438449.1593840631

[サービス アカウントを作成] をクリックします。

[操作] -> [鍵を作成] -> JSONを指定して[作成]をクリックします。

しばらくすると、認証キー(JSON)がダウンロードされます。

ターミナルを開いて、ダウンロードされた認証キーのあるディレクトリ、または任意のディレクトリに認証キーを移動しておきます。

先ほどダウンロードした認証キーを指定して、gcloud auth activate-service-accountを実行します。

gcloud auth activate-service-account [ACCOUNT] --key-file=[KEY_FILE]

[ACCOUNT]はGoogleアカウントのメールアドレス、[KEY_FILE]はダウンロードした認証キーを指定します。

gcloud auth listを実行して、先ほどログインしたGoogleアカウントが表示されたら完了です。

gcloud auth list
ACTIVE  ACCOUNT
*       sample@gmail.com

実行後、gcloud CLIに認証キーが保存されるので、[KEY_FILE]で指定した認証キーは削除しておきましょう。

プロキシ / ファイアウォールの構成

今回は、プロキシがある環境で作業していないので、スキップします。

ドキュメントは以下になります。
https://cloud.google.com/sdk/docs/proxy-settings

SDK 構成の管理

ここでは設定しない

SDKコンポーネントの管理

コンポーネントとは

公式より

コンポーネントとは、個別にインストール可能な SDK の構成要素です。コマンドライン ツール(gcloud、bq、gsutil)、アルファ版 / ベータ版リリースレベルの gcloud CLI コマンドや、SDK の特定のツールとの依存関係を含むパッケージなどがあります。
最も一般的なコンポーネントは、デフォルトでインストールされます。gcloud alpha または gcloud beta コマンドをインタラクティブに実行する際に、alpha コンポーネントや beta コンポーネントがインストールされていない場合、インストールするかどうか尋ねるメッセージが gcloud CLI に表示されます。 インストールを選択すると、コンポーネントがインストールされて、コマンドが実行されます。その他のコンポーネントは、それらを要求するコマンドを実行すると、gcloud CLI によってオンデマンドでインストールされます。

Cloud SDK のコンポーネントの管理

必要に応じて、Google Cloud SDK のコンポーネントの一覧表示、インストール、更新、削除を行うことができます。

コンポーネントの一覧を表示する

使用可能なコンポーネントと現在インストールされているコンポーネントのリストを表示するには、gcloud components list を実行します。

$ gcloud components list

Your current Cloud SDK version is: 298.0.0
The latest available version is: 301.0.0

┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│                                                   Components                                                  │
├──────────────────┬──────────────────────────────────────────────────────┬──────────────────────────┬──────────┤
│      Status      │                         Name                         │            ID            │   Size   │
├──────────────────┼──────────────────────────────────────────────────────┼──────────────────────────┼──────────┤
│ Update Available │ Cloud SDK Core Libraries                             │ core                     │ 14.9 MiB │
│ Not Installed    │ App Engine Go Extensions                             │ app-engine-go            │  4.8 MiB │
│ Not Installed    │ Appctl                                               │ appctl                   │ 18.5 MiB │
│ Not Installed    │ Cloud Bigtable Command Line Tool                     │ cbt                      │  7.6 MiB │
│ Not Installed    │ Cloud Bigtable Emulator                              │ bigtable                 │  6.6 MiB │
│ Not Installed    │ Cloud Datalab Command Line Tool                      │ datalab                  │  < 1 MiB │
│ Not Installed    │ Cloud Datastore Emulator                             │ cloud-datastore-emulator │ 18.4 MiB │
│ Not Installed    │ Cloud Firestore Emulator                             │ cloud-firestore-emulator │ 40.8 MiB │
│ Not Installed    │ Cloud Pub/Sub Emulator                               │ pubsub-emulator          │ 34.9 MiB │
│ Not Installed    │ Cloud SQL Proxy                                      │ cloud_sql_proxy          │  3.7 MiB │
│ Not Installed    │ Emulator Reverse Proxy                               │ emulator-reverse-proxy   │ 14.5 MiB │
│ Not Installed    │ Google Cloud Build Local Builder                     │ cloud-build-local        │  5.9 MiB │
│ Not Installed    │ Google Container Registry's Docker credential helper │ docker-credential-gcr    │  1.8 MiB │
│ Not Installed    │ Kind                                                 │ kind                     │  4.4 MiB │
│ Not Installed    │ Kustomize                                            │ kustomize                │ 22.8 MiB │
│ Not Installed    │ Minikube                                             │ minikube                 │ 23.1 MiB │
│ Not Installed    │ Skaffold                                             │ skaffold                 │ 15.3 MiB │
│ Not Installed    │ anthos-auth                                          │ anthos-auth              │ 15.9 MiB │
│ Not Installed    │ gcloud Alpha Commands                                │ alpha                    │  < 1 MiB │
│ Not Installed    │ gcloud Beta Commands                                 │ beta                     │  < 1 MiB │
│ Not Installed    │ gcloud app Java Extensions                           │ app-engine-java          │ 61.0 MiB │
│ Not Installed    │ gcloud app PHP Extensions                            │ app-engine-php           │ 21.9 MiB │
│ Not Installed    │ gcloud app Python Extensions                         │ app-engine-python        │  6.1 MiB │
│ Not Installed    │ gcloud app Python Extensions (Extra Libraries)       │ app-engine-python-extras │ 27.1 MiB │
│ Not Installed    │ kpt                                                  │ kpt                      │ 20.9 MiB │
│ Not Installed    │ kubectl                                              │ kubectl                  │  < 1 MiB │
│ Installed        │ BigQuery Command Line Tool                           │ bq                       │  < 1 MiB │
│ Installed        │ Cloud Storage Command Line Tool                      │ gsutil                   │  3.5 MiB │
└──────────────────┴──────────────────────────────────────────────────────┴──────────────────────────┴──────────┘
To install or remove components at your current SDK version [298.0.0], run:
  $ gcloud components install COMPONENT_ID
  $ gcloud components remove COMPONENT_ID

To update your SDK installation to the latest version [301.0.0], run:
  $ gcloud components update

あー、なんかいっぱい出てきた。

コンポーネントをインストールする

現在インストールされている Cloud SDK のバージョンのコンポーネントをインストールするには、gcloud components install を実行します。
試しに、kubectl をインストールしてみます。

$ gcloud components install kubectl

Your current Cloud SDK version is: 298.0.0
Installing components from version: 298.0.0

ERROR: (gcloud.components.install) Your current working directory is inside the Cloud SDK install root: /Users/sekinetakumaru/Downloads/google-cloud-sdk.  In order to perform this update, run the command from outside of this directory.

おっと、エラーが出てしまいました。

注意: インストールを変更するときは、ターミナルの現在のディレクトリを SDK のインストール ディレクトリ google-cloud-sdk の外部にする必要があります。

これか、ディレクトリをgoogle-cloud-sdkの外に移動して再度実行します。

$ gcloud components install kubectl

Your current Cloud SDK version is: 298.0.0
Installing components from version: 298.0.0

┌─────────────────────────────────────────────────────────────────────┐
│                 These components will be installed.                 │
├─────────────────────┬────────────────────────┬──────────────────────┤
│         Name        │        Version         │         Size         │
├─────────────────────┼────────────────────────┼──────────────────────┤
│ kubectl             │             2020.05.01 │              < 1 MiB │
│ kubectl             │                1.15.11 │             74.7 MiB │
└─────────────────────┴────────────────────────┴──────────────────────┘

For the latest full release notes, please visit:
  https://cloud.google.com/sdk/release_notes

╔════════════════════════════════════════════════════════════╗
╠═ Creating update staging area                             ═╣
╠════════════════════════════════════════════════════════════╣
╠═ Installing: kubectl                                      ═╣
╠════════════════════════════════════════════════════════════╣
╠═ Installing: kubectl                                      ═╣
╠════════════════════════════════════════════════════════════╣
╠═ Creating backup and activating new installation          ═╣
╚════════════════════════════════════════════════════════════╝

Performing post processing steps...done.                                                                                        

Update done!

WARNING:   There are other instances of Google Cloud Platform tools on your system PATH.
  Please remove the following to avoid confusion or accidental invocation:

  /Applications/Docker.app/Contents/Resources/bin/kubectl

ワーニング出てるけど、気にせず gcloud components list してみます。

$ gcloud components list

Your current Cloud SDK version is: 298.0.0
The latest available version is: 301.0.0

┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│                                                   Components                                                  │
├──────────────────┬──────────────────────────────────────────────────────┬──────────────────────────┬──────────┤
│      Status      │                         Name                         │            ID            │   Size   │
├──────────────────┼──────────────────────────────────────────────────────┼──────────────────────────┼──────────┤
│ Update Available │ Cloud SDK Core Libraries                             │ core                     │ 14.9 MiB │
│ Not Installed    │ App Engine Go Extensions                             │ app-engine-go            │  4.8 MiB │
│ Not Installed    │ Appctl                                               │ appctl                   │ 18.5 MiB │
│ Not Installed    │ Cloud Bigtable Command Line Tool                     │ cbt                      │  7.6 MiB │
│ Not Installed    │ Cloud Bigtable Emulator                              │ bigtable                 │  6.6 MiB │
│ Not Installed    │ Cloud Datalab Command Line Tool                      │ datalab                  │  < 1 MiB │
│ Not Installed    │ Cloud Datastore Emulator                             │ cloud-datastore-emulator │ 18.4 MiB │
│ Not Installed    │ Cloud Firestore Emulator                             │ cloud-firestore-emulator │ 40.8 MiB │
│ Not Installed    │ Cloud Pub/Sub Emulator                               │ pubsub-emulator          │ 34.9 MiB │
│ Not Installed    │ Cloud SQL Proxy                                      │ cloud_sql_proxy          │  3.7 MiB │
│ Not Installed    │ Emulator Reverse Proxy                               │ emulator-reverse-proxy   │ 14.5 MiB │
│ Not Installed    │ Google Cloud Build Local Builder                     │ cloud-build-local        │  5.9 MiB │
│ Not Installed    │ Google Container Registry's Docker credential helper │ docker-credential-gcr    │  1.8 MiB │
│ Not Installed    │ Kind                                                 │ kind                     │  4.4 MiB │
│ Not Installed    │ Kustomize                                            │ kustomize                │ 22.8 MiB │
│ Not Installed    │ Minikube                                             │ minikube                 │ 23.1 MiB │
│ Not Installed    │ Skaffold                                             │ skaffold                 │ 15.3 MiB │
│ Not Installed    │ anthos-auth                                          │ anthos-auth              │ 15.9 MiB │
│ Not Installed    │ gcloud Alpha Commands                                │ alpha                    │  < 1 MiB │
│ Not Installed    │ gcloud Beta Commands                                 │ beta                     │  < 1 MiB │
│ Not Installed    │ gcloud app Java Extensions                           │ app-engine-java          │ 61.0 MiB │
│ Not Installed    │ gcloud app PHP Extensions                            │ app-engine-php           │ 21.9 MiB │
│ Not Installed    │ gcloud app Python Extensions                         │ app-engine-python        │  6.1 MiB │
│ Not Installed    │ gcloud app Python Extensions (Extra Libraries)       │ app-engine-python-extras │ 27.1 MiB │
│ Not Installed    │ kpt                                                  │ kpt                      │ 20.9 MiB │
│ Installed        │ BigQuery Command Line Tool                           │ bq                       │  < 1 MiB │
│ Installed        │ Cloud Storage Command Line Tool                      │ gsutil                   │  3.5 MiB │
│ Installed        │ kubectl                                              │ kubectl                  │  < 1 MiB │
└──────────────────┴──────────────────────────────────────────────────────┴──────────────────────────┴──────────┘
To install or remove components at your current SDK version [298.0.0], run:
  $ gcloud components install COMPONENT_ID
  $ gcloud components remove COMPONENT_ID

To update your SDK installation to the latest version [301.0.0], run:
  $ gcloud components update

kubectl が Installed になりました。

コンポーネントを更新する

インストールされている Cloud SDK のすべてのコンポーネントを、使用可能な最新バージョンに更新するには、gcloud components update コマンドを使用します。

コンポーネントを削除する

コンポーネントを削除するには、ID を指定して gcloud components remove コマンドを実行します。

CFSSLをインストールする

コマンドラインユーティリティを提供するために使用されるPKIインフラストラクチャおよびTLS証明書を生成します。

$ curl -o cfssl https://storage.googleapis.com/kubernetes-the-hard-way/cfssl/1.4.1/darwin/cfssl
$ curl -o cfssljson https://storage.googleapis.com/kubernetes-the-hard-way/cfssl/1.4.1/darwin/cfssljson
$ chmod +x cfssl cfssljson
$ sudo mv cfssl cfssljson /usr/local/bin/

バージョンが表示されたらインストール完了です。

$ cfssl version
Version: 1.4.1
Runtime: go1.12.12
$ cfssljson --version
Version: 1.4.1
Runtime: go1.12.12

kubectlをインストールする

kubectlコマンドラインユーティリティは、Kubernetes API Serverと対話するために使用されます。kubectl公式リリースバイナリからダウンロードしてインストールします。

$ curl -o kubectl https://storage.googleapis.com/kubernetes-release/release/v1.18.6/bin/darwin/amd64/kubectl
$ chmod +x kubectl
$ sudo mv kubectl /usr/local/bin/

バージョンが表示されたらインストール完了です。

$ kubectl version --client
Client Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.9", GitCommit:"a17149e1a189050796ced469dbd78d380f2ed5ef", GitTreeState:"clean", BuildDate:"2020-04-16T11:44:51Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"darwin/amd64"}

これで事前準備は完了です。

これから実際にGCPでKubernetesをやっていきます。