kubernetes デプロイ時に `MatchExpressions:[]v1.LabelSelectorRequirement(nil)}: field is immutable` エラーが出た際に対処方法

k8s で manifest file を編集して実行したら以下のようなエラーが出て実行できなかった。 Exception ( Monitor Deploy ) Deploy failed: The Deployment “—” is invalid: spec.selector: Invalid value: v1.LabelSelector{MatchLabels:map[string]string{“app”:“—”}, MatchExpressions:[]v1.LabelSelectorRequirement(nil)}: field is immutable 調べてみたところ、 once deployed the label selectors of kubernetes service can not be updated until you decide to delete the existing deployment ref: MatchExpressions:[]v1.LabelSelectorRequirement(nil)}: field is immutabl #508 らしく、一度デプロイされたk8s service の label selector は、既存のdeployment を削除しないとアップデートは不可能らしい。 なので、field is immutableというエラー文は正しいわけですね。 そのdeployment を削除しても良い状態なら、以下のコマンドを実行後再度デプロイすれば、k8s service のlabel selector は実行されます。...

December 2, 2021 Â· Shunya Ueta

GKE でローリングアップデート後、ローカルからポートフォワードでリクエストを投げるとcurl: (52) Empty reply from server と返ってくるときの対処方法

前提 ローカルからkubectlでポートフォワードして、GKEにリクエストを投げて確認を行っている 発生した問題 deployment のローリングアップデート前は問題なくポートフォワードを通してリクエストが返っていた。コードに変更を加えてGKE上でも確認をしたかったので、まずローカルで確認をして問題がなかった変更が、ローリングアップデート後ポートフォワード でGKE にリクエストを投げると curl: (52) Empty reply from server と返ってくる。 TL; DR; ポートフォワードはrolling update が終わったら貼り直そう。なぜなら、ポートフォワードの接続先はローリングアップデート前後で変化するため。 エラーメッセージ curl でリクエストした際のメッセージ 1 curl: (52) Empty reply from server Port foward の出力 1 uid : Error: No such container: xxxxx まとめ 発生していた問題は、ローリングアップデートを行うと、ポートフォワードの接続先が変更され、その際にローリングアップデート前後でkubectl でのポートフォワードは固定されたままなのでリクエストはサーバーから返ってこないという説明するのも恥ずかしい問題でした。 理由は単純だけど、気づくのに時間がかかってしまった。k8s の動きを理解していないからこういうので時間を溶かしてしまった。反省 Appendix Performing a Rolling Update

February 21, 2021 Â· Shunya Ueta

Courseraで Getting Started with Google Kubernetes Engine の講義を修了した

表題のとおりですが、Getting Started with Google Kubernetes Engine という Coursera の講義を終了しました 業務で k8s を本格的に使い始め、ちゃんと理解したいな~と思いこのコースを取りました。 半年前に Kubernetes 完全ガイド impress top gear シリーズ をサラッと読んではいたのですが、やはり手を動かして学んでいないと実際に kubectl command など完全に忘れているし、スキルとして身についていない感半端なかったので、良い機会なので Hands-on が提供うされている Coursera を使って学んでみました。 個人的にこの講義がめちゃくちゃオススメなのが、 GKE の講義なので Google が提供する qwiklab が使えます。 一時的に GCP プロジェクトが作成され、そこでハンズオンができるのですがこれが実際に手を動かしながら学ぶという形式にすごく良いのと k8s の構築もすべてクラウドでできえるので変に環境構築でハマることなく快適に学習に集中できました。 もう、これがめちゃくちゃ快適でハンズオンとしてすごく快適に手を動かせなら、k8s の初歩的な概念や Command line などを学べました。 実際に手を動かしながら学ぶべきものだと思うので、このハンズオン形式の講義はありがたかったです! 後は学ぶにつれて、 k8s の凄さがわかってきたので理解して使いこなせるようになればスケールするシステムを個人でも作れそうなので、頑張っていきます。

April 12, 2020 Â· Shunya Ueta