LoginSignup
3
3

More than 5 years have passed since last update.

GKEでダウンタイム発生させずにk8sバージョンアップ

Last updated at Posted at 2018-05-28

はじめに

GKEではk8sのバージョンアップは3世代離れてしまうと面倒くさくなるので、
頻繁(とは言っても3ヶ月ごと)にアップしていくことを強くお勧めします。

ただし、GKE上で無邪気にk8sバージョンアップしてしまうと、必ずサービスのダウンタイムが発生してしまいます。
そのため、ダウンタイムを発生させたくない場合には工夫する必要があります。

今回は、DNS切り替えにより解決する手順を残します。

(追記)リージョナルクラスタの場合はマスターノードに冗長性があるため基本的に当方法は不要です。
普通にupgradeすればダウンタイム発生しません。

ざっくり手順

  • 新しいクラスタを用意する
  • DNS切り替える
  • 古い環境消す

新しいクラスタを用意する

  • 新しいクラスタを作る

--cluster-versionは必ずバージョンアップ後のものを指定してください。デフォルトが使われると意図したものが指定されない場合があります。
--region指定していた方が良いです

gcloud beta container clusters create cluster-new \
--region=asia-northeast1 \
--network=default \
--cluster-version=1.10.2-gke.1 \
--project=your_project \
--no-enable-autorepair
  • コンポーネントをデプロイする

お手持ちのk8sのマニフェストをapplyしてください。
持ってない場合は頑張って作ってください。

kubectl config current-context # 念のため現在どのクラスタを向いているのか確認
kubectl config get-contexts # 一覧取得
kubectl config set-context {cluster_gke_cluster_new} # 向いてなかったら向ける
kubectl apply -f hogehoge.yaml
  • static ipが割り振られるのを待つ

GKEならingressServiceのtype:LoadBalancerを使っていると思います。
待ってれば、そのうち割り振られます。

kubectl get ing
NAME           HOSTS     ADDRESS         PORTS     AGE
test-ingress   *         XXXXXXXXX   80, 443   1h

はい、割り振られたら覚えておいといてください。

DNS切り替え

ドメインで公開してないとかの人はまあこれ以降は参考程度にお願いします。
ここではGCPのホスティングサービス前提で話します。

  • uptime checkを設置

DNS切り替えの前にちゃんとサービスが切り替わってるのか確認しながらやるためにやりましょう。

StackDriver -> Monitoring -> Uptime Checks -> Add Uptime Check

こんな感じで間隔は短めで設定します。

  • ローカルからも周期的に殴っておきましょう

上記のuptime checkはいろんな地域から殴ってくるのでとても良いのですが、周期が最短1分なのできになる人はローカルでも殴ると良いです。
今回はvegetaを使います。

1秒周期で3時間以上ひたすら殴る設定です。
この状態で放置しておきます。

echo "GET https://hogehoge.com" | vegeta attack -duration=10000s -rate=1 -insecure | tee results.bin | vegeta report
  • アクセスログをみる

StackDriver -> LoggingでLBのログを見ておきましょう。
Cloud HTTP Load Balancer -> 新旧それぞれのLBを選択しておいて2窓で開いておきます。

  • レコードセット

ようやくDNS切り替えです。

Network Services -> Cloud DNS
ここで該当のレコードをさっき控えたIPに切り替えます。

前述したアクセスログには、uptime checkやvegetaで殴っているログが出ると思います。
新ログにログが出ていて 且つ 旧ログにアクセスがこなくなった時点で切り替えはできているとしましょう。

もしかしたら、事前に1日前くらいからDNSレコードのTTLを短くしておけば、この切り替えが早いかもしれません。

旧環境を消す

いらないので消しましょう。情けはいりません。

gcloud container clusters delete cluster-old --region=asia-northeast1

以上

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3