Kubernetes
概要 GKE Ingressを使うとGCE LBのヘルスチェックが自動的に作成されますが、一定のルールがあります。 これらを理解していないと期待しないヘルスチェックが作成され、疎通ができなかったりするのでまとめておきます。 生成ルール GKE Ingressは次の流れで…
概要 Podの冗長化をする上でマルチゾーン構成にしたい場合 Pod Topology Spread Constraints | Kubernetes 上記のPod Topology Spread Constraintsを使うと実現できます。 環境 Kubernetes v1.24 Pod Topology Spread Constraints Pod Topology Spread Const…
概要 前回KubernetesのPodの安全な終了方法について図を交えて解説しました。 christina04.hatenablog.com 今回はistio-proxy(envoy sidecar)がある場合の安全な終了方法について説明します。 環境 Kubernetes v1.21.14 Istio 1.16.0 Envoy 1.24.1
概要 ラベルという名前ゆえか若干軽視されがちですが、Kubernetesにおいてlabelはリソースを識別する上で非常に重要な要素です。 そのlabelについてKubernetesの初学者が気になる(自身も気になった)ことを挙げて行きます。 気になること Deploymentにあるl…
概要 KubernetesのPodを安全に終了する際に気をつけるべき事前知識と設定方法について説明します。 あらかじめまとめると 新規リクエストのルーティングがなくなるまでpreStopでPodのアプリケーションコンテナの終了開始を待たせる 既存リクエストが全て処理…
背景 Kubernetes上でサクッと動作検証でPodを立てたい時に kubectl run \ --generator run-pod/v1 \ --namespace $NAMESPACE \ --image google/cloud-sdk:alpine \ --rm -it gcloud-test とやりますが、今実行すると以下のようにエラーになります。 error: u…
背景 Kubernetesは宣言的で自己回復するシステムを提供しているため、おかしなコミットが入ったdocker imageをapplyしてCrashLoopBackOffが発生していたりしても前のPodが生きていて気づかなかったみたいなケースがあります。 またメモリが瞬間的に枯渇する…
概要 GKEのPodといったWorkloadからGCPのリソース(GCS、PubSubなど)にアクセスする場合 GKE NodeのService Accountの権限でアクセスする 権限を持ったService AccountのJSONキーを使う の2通りあります。 それぞれの問題点の理解と、その解決策としてのWo…
概要 christina04.hatenablog.com 以前上の記事でGOMAXPROCSはCPU数程度が適切に動くという話をしました。 これはこれで正しいのですが、一方でdockerのようにcgroupsでCPU Quotaを制限するケースではこれに当てはまらなくなります。 Kubernetesでいうと Kub…
概要 gRPCサーバのヘルスチェック方法として HTTPサーバを別途立ち上げてHTTPでチェック tcpでポートがopenしたかチェック といった方法がありますが、前者はgRPCサーバなのにHTTPサーバを用意しないといけなかったり、後者はtcpのopenは実際にServe開始した…
概要 gRPCでのバランシングをClient-Sideで直接実装する方法の紹介です。 gRPCはPolyglot(様々な言語で扱う)を意識しているので、gRPC自体の仕様が策定→各言語がそれに則って実装となります。 なので「元々はこういう実装だったけど、他の言語と統一してこ…
概要 KubernetesにはL4ロードバランサのServiceとL7のIngressがあります。 IngressはControllerによって挙動が大きく変わるので実際に手を動かして学んでみます。 環境 minikube 1.3.0 Kubernetes 1.15.2 nginx-ingress 0.24.1 nginx-ingress chart 1.6.19 H…
概要 Kubernetesの問題の1つに、マニフェストファイルがたくさんできるYAMLの壁と呼ばれるものがあります。 image mountするファイル label リソース割当 といった一部の要素だけ変えたい時、ほとんど構成は同じで似たようなマニフェストファイルが大量に出…
概要 KubernetesではRBACという、各種リソースへのアクセス権限を管理する仕組みが用意されてます。 たとえばPrometheusのようにKubernetesのAPIを叩く場合、各リソースへアクセスするための権限が必要になります。 今回はそれの基本的な仕組みや設定方法を…
概要 PrometheusはPull型の監視ツールであるため、監視対象がどれかを教えてあげなければいけません。 これまでの記事は全てstatic_configsを用いた静的な値で、スケールした時やサービスが増減した時に柔軟性がありません。 PrometheusはServiceDiscoveryを…
概要 Kubernetesを利用する上であったら便利なツールの紹介です。 stern kubectx kubens kube-tmux stern podのログを簡単に取れるツールです。 github.com インストール $ brew install stern
概要 Kubernetesには以下のフィールドでCPUやメモリを制限することが可能です。 spec.containers[].resources.limits.cpu spec.containers[].resources.limits.memory spec.containers[].resources.requests.cpu spec.containers[].resources.requests.memor…
概要 前回書いた構成をKubernetesで実装してみます。 christina04.hatenablog.com 環境 minikube v0.26.1 kubernetes v1.10.0 成果物 今回のソースです。 github.com
概要 gRPCを用いた負荷分散ではEnvoyを使ったL7のバランシングが最近の主流になっています。 ただEnvoyが各Podに振り分けるためにPodのIPを知る必要があります。 ECSはService Discoveryを持っていないので自前でたてるか、control planeを用意してそれをSer…
概要 前回の続きです。 今回はflannelを導入してマルチホストでのコンテナ間通信を可能にします。 マスターの設定 flannelの設定 flannel.json ネットワークの設定ファイルを用意します。適当にflannel.jsonとします。 { "Network": "10.20.0.0/16", "Subnet…
概要 Kubernetesを使ってDockerのクラスタを構築します。Kubernetesを使うことで以下のような本番環境を意識したシステムを構築できます。 フェイルオーバー(コンテナが異常終了したことを検知し再起動させる) スケーリング(起動しているコンテナの数を自…