みなさん
お疲れ様です。和田です。 APCブログ初投稿になります。 至らない点あるかもしれませんが、よろしくお願いいたします。
本記事では、重点施策(k8sチーム)で検証した内容となります。
k8sでDokerイメージのローリングアップデートってどうやるんだろう?と調査していたところ、 軽い気持ちでGKEで試してみたら あまりに楽に出来てしまい、衝撃を受けました。
たぶん手順に起こす必要も無いくらい簡単な手順で申し訳ないのですが、 一応アウトプットとして記事にします!
10分位で出来ますよ!Let'sTry !!!
GKE環境セットアップ
【手順1】
以下のURLにアクセスすると図.1に飛びます
https://cloud.google.com/kubernetes-engine/
【手順2】
国-> 日本 利用規約->チェックをつける 「同意して実行」をクリック
ステップ2/2では アカウントの種類->個人 住所、支払い情報等を入力し、 決定します。
【手順3】
新規でアカウントを作成した場合は 新しいプロジェクトを作成する必要があります。
【参考情報】 無料版のアカウントだと12個までのプロジェクトが作成できるようです。
【手順4】
プロジェクトを作成するとダッシュボード画面が表示できるようになります。 左のメニューから [Kubernetes Engine]をクリック
次の画面でクラスタを選択し、 作成をクリックします。
【手順5】
クラスタ作成画面に入ると、 テンプレートが設定できます。
自分でカスタマイズも可能ですが、 [標準クラスタ]を選ぶと
ノード数:3 マシンタイプvCPU × 1
の構成が選ばれている状態になります。 [標準クラスタ]->デフォルトの設定のまま 作成をクリック 2〜3分ほどで k8sの環境が提供されます。
【参考情報】 ローリングアップデートを試すのであれば、ノード数3以上に設定するのがオススメです。
【手順6】
クラスタが完成すると、図.8のように 表示されます。
[クラスタ名]をクリックすると クラスタの情報を表示(図.9)します。
【参考情報】 一方で、[接続]をクリックすると クラスタに接続(図.10)に遷移し、 さらに[Cloud Shellで実行]をクリックすると CLI画面(図.11)が開きます。
CLI画面では自動的に 以下のコマンドが入力されているので、 Enterを入力すれば kubectlコマンドが打てる状態になります。
gcloud container clusters get-credentials <Cluster名>--zone <zone名> --project<Project名>
【参考情報】 コンテナをデプロイする方法はCLIから行う方法と GUIでコンテナを選択して行う方法と2通りあります。
CLIでの方法は以下のドキュメントにまとまっています。
https://cloud.google.com/kubernetes-engine/docs/tutorials/hello-app?hl=ja
以降はGUIでの操作を記載しますが、 GUIで操作すると、裏で対応するCLIのコマンドが発行されているようです。
ここで記載されているCLIは基本GUIで全て操作できるようになっていました。
【手順7】
ワークロード画面に遷移すると、 何もk8sにpodがない場合、図.13の画面が表示されます。 [デプロイ]をクリック
【参考情報】 ここで[システムワークロードを表示] をクリックすると 現状立ち上がっているサービス一覧が参照できます(図.15)
【手順8】
ローリングアップデートを検証するため、 あえて最新版ではなく、 nginx:1.14.0を指定し、下にスクロールして [デプロイ]をクリック
【参考情報】 事前に自作のイメージなどを GoogleContainerRegistryにアップロードしていれば、 そのイメージを指定することも可能です。 ※有料なのであまりオススメしません・・・
DockerHubにイメージをアップしておけば、 自作イメージを指定できることも確認したので、 そっちの方が良いです。
また、以下も可能です。 - 環境変数の設定 - 1podに複数のイメージを指定する - 名前空間の変更 - デプロイするクラスタ先の変更
【手順9】
正常に終了すると図.17のように ワークロードに先ほどデプロイしたイメージが確認できます。 コンテナ名をクリックし、 イメージのバージョンが 1.14.0になっていることを確認しましょう(図18)。
【手順10】
先ほどデプロイしたイメージをサービスとして公開します。 [公開]を選択
【参考情報】 [YAMLを表示]をクリックすると図.21のように イメージのYAMLが表示されます。 デプロイ前に公開しようとしているものが正しいか確認することができます。
【手順11】
サービスの公開が完了すると [サービス]->[詳細]タブ画面(図.22)から 情報が確認でき、 [外部エンドポイント]のリンクをクリックすると 公開しているサービスがブラウザで確認できます(図.23)
【参考情報】 ロードバランサをクリックすると、 バックエンド、フロントエンド等の情報が確認可能です。
また、外部エンドポイントで付与されるIPは エフェメラル外部 IP アドレスといって、期限付きのIPアドレスなので、本番では静的IPに切り替える必要があります。 https://cloud.google.com/kubernetes-engine/docs/tutorials/http-balancer?hl=ja
【手順12】
また、サービスの公開が完了すると [ワークロード]->現在起動中のサービスを選択 ->操作->ローリング更新を選択(図.24,25)
画像(imageを直訳?)を nginx:1.14.0->nginx.1.15.0 に変更、その他はデフォルトのままで 更新をクリック
【参考情報】 準備の最短秒数: コンテナがクラッシュすることなく、新しく作成されたポッドが使用可能とみなされるまでの最小秒数。
最大サージ: 目的のポッド数を超えて作成できるポッドの最大数です。この値には絶対値(5 など)や目的のポッド数に対するパーセンテージ(10% など)を指定できます。
オフライン上限: 更新プロセス中に使用不能にできるポッドの最大数です。この値には絶対値(5 など)や目的のポッド数に対するパーセンテージ(10% など)を指定できます。
【手順13】
アップデートが完了すると [ワークロード]->現在起動中のサービスを選択し [ポッドの仕様]を確認するとnginx1.15.0に 更新されていることがわかります。
【参考情報】 YAMLを確認してみても、 imageがすでに新しいバージョンになっていることが 確認できます。
まとめ
以上、やってみると大変簡単です。 ローリングアップデートだけでなく、 色々な操作がGUI上からできてしいます。
やったからと言って決してスキルアップとかにはなりませんが、 k8sを利用したい開発者は、このスピード感と便利さを求めているのか! と体感することができます。
現場でも早く取り入れられないかなぁ、と楽しみにしています。
以上!