kakakakakku blog

Weekly Tech Blog : Keep on Learning 👍

Kubernetes

Kubeval で kustomization.yaml を対象外にする

Kubeval で Kubernetes マニフェストを検査する場合に kustomize を使っていると,以下のように kustomization.yaml でエラーになってしまう.kustomization.yaml には kind フィールドがなく,Kubeval の対象外にしたい! $ kubeval --version Version: 0.1…

kubectl や kube-apiserver など Kubernetes バイナリを checksum で検証する

以下のドキュメントを読んでいたら kubectl コマンド(バイナリファイル)をダウンロードした後に checksum を使って検証(改ざんなし)をする手順が載っていた.kubectl に限定する必要はなく kube-apiserver などにも適用できる.さっそく試していく! kub…

Helmfile で kustomize プロジェクトをデプロイする機能を試した

Helmfile のドキュメントを読んでいたら Advanced Features として「Deploy Kustomization with Helmfile(Helmfile で kustomize をデプロイする)」という機能が載っていた.最初はどういう意味?と疑問だったけど,簡単に言うと helmfile apply コマンド…

Helmfile の「テンプレート機能」を試した

前回の記事では Helmfile に入門した!Helm Chart を宣言的に管理することができて便利だった 引き続き Helmfile を試していて,GitHub に載っている「The Helmfile Best Practices Guide」を読んでいたら「テンプレート機能」が紹介されていた.Helmfile で…

Helmfile で Helm Chart を宣言的に管理する

Helm を使うと Kubernetes クラスタ上に簡単にアプリケーションなどをインストールできる.そして Helm Chart は Artifact Hub で確認できる.また values.yaml と組み合わせれば Helm Chart のデフォルト設定を変更することもできる.しかし helm コマンド…

Deployment の maxUnavailable と maxSurge : ロールアウト中の割合を設定する

Kubernetes で Deployment を使うと Pod を安全にデプロイ(ロールアウト)できる.そのときに更新する Pod の割合として Max Unavailable と Max Surge という設定値があり,デフォルト値は以下のようにドキュメントに書いてある.今回は動作確認をしながら…

Argo CD で kustomize プロジェクトを GitOps 化する

Argo CD は kustomize をサポートしているため,簡単に kustomize プロジェクトを GitOps 化できる.さっそく試していく! argo-cd.readthedocs.io 検証環境 前回書いた記事で使った kustomize プロジェクトを使う. Namespace + Service + Deployment (ngin…

kustomize で patchesStrategicMerge を使わずに簡単に replicas と images を変更する

今まで kustomize を使って Deployment の replicas を変更するときなどは kustomization.yaml に patchesStrategicMerge を設定していた.例えば,1年前に kustomize に入門したときに書いた以下の記事でもそういう手順になっている. kakakakakku.hatenabl…

Kubernetes と OPA を組み合わせて Deployment の spec.replicas に対して「最低個数」を制限する

前回の記事では Kubernetes と OPA (Open Policy Agent) を組み合わせて「ラベル強制」を試した.OPA を使ってできることをより把握するために,今回は Deployment の spec.replicas に対して「最低個数」を制限できるようにする.なお OPA のインストール手…

Kubernetes と OPA を組み合わせて Namespace と Pod の「ラベル強制」を試した

今回は Kubernetes と OPA (Open Policy Agent) を組み合わせて「ラベル強制」を試す. OPA Gatekeeper をインストールする まず,Kubernetes クラスターに OPA Gatekeeper をインストールする.今回は OPA のドキュメントに載っている kubectl apply コマン…

kube-apiserver で「匿名リクエスト」を無効化する : --anonymous-auth=false

Kubernetes の kube-apiserver では,デフォルトで「匿名リクエスト」機能が有効になっている(正確な条件は以下のドキュメントに載っている).今回は「匿名リクエスト」機能の動作確認と kube-apiserver のセキュリティ対策として「匿名リクエスト」機能の…

Secret の自動マウントをオプトアウトするかどうか : automountServiceAccountToken フィールド

Kubernetes のセキュリティ対策として,Service Account と Pod に設定できる automountServiceAccountToken フィールド(Secret の自動マウントをオプトアウトするかどうか)の動作確認をした.とは言え,Service Account と Secret の関係性なども整理する…

Kubernetes と seccomp を組み合わせてシステムコールを制限する

前回の記事では seccomp (Secure computing mode) に入門するために「Docker と seccomp」を組み合わせて試した.docker run コマンドの --security-opt オプションを使って seccomp プロファイルを指定した. kakakakakku.hatenablog.com 今回は「Kubernete…

Artifact Hub で Helm chart のテンプレートを検索できる新機能「Helm charts templates explorer」

Helm chart を検索するときなどに使う Artifact Hub で,2021年3月頃から新機能「Helm charts templates explorer」を使える.Twitter @cncfartifacthub では 3/5 にアナウンスされていたまた GitHub Releases を見ると,3/16 にリリースされた v0.17.0 の C…

2021年2-3月に CKAD と CKA を受験した / 受験 Tips と 勉強方法をまとめる

2021年2-3月に Kubernetes の資格 CKAD (Certified Kubernetes Application Developer) と CKA (Certified Kubernetes Administrator) を受験した.3年後に更新をするであろう自分のためにも勉強方法をまとめておく.当たり前だけど,出題に関する内容は書か…

kube-capacity コマンドを使って Pod のリソース値をノード別にシンプルに表示する

Kubernetes では Pod にリソース値(要求 : Requests と 制限 : Limits)を設定できる.設定値は kubectl describe コマンドを使って確認できるし,使用率は kubectl top コマンドを使って確認できるけど,今回紹介する CLI「kube-capacity」を使うと,Pod …

Network Policy をわかりやすく学べる「Kubernetes Network Policy Recipes」

GitHub に公開されている「Kubernetes Network Policy Recipes」を使うと,Kubernetes の Network Policy をわかりやすく学べる.現時点だと「計14種類」の Network Policy レシピ(サンプル)が載っていて,実際に使う機会がありそうな設定も多くて参考にな…

マニフェストを適用する前に編集できる "kubectl create --edit" コマンド

Kubernetes のドキュメントを読んでいたら kubectl create コマンドで --edit オプションが使えると書いてあった.kubectl create -h コマンドでヘルプを確認したところ Edit the API resource before creating と書いてある.簡単に言うと kubectl create …

PodDisruptionBudget (PDB) と kubectl drain --timeout オプションを組み合わせる

Kubernetes で PodDisruptionBudget (PDB) を使うと,kubectl drain コマンドでノードをドレインするときなどに Kubernetes クラスター内に起動しておく「最低限必要な Pod 数」を設定できる.よって,Kubernetes を使ったサービスの可用性を高める戦略とし…

kubectl コマンドを使って Label や Annotation を削除する

kubectl コマンドを使って Label(ラベル) や Annotation(アノテーション)を削除する場合,削除用のオペレーションはなく,キー名の末尾に - を付けて登録をする必要がある.具体的には bar- や description- というキー名を指定すると削除できる.以下の…

kubectl drain コマンドのオプションを試す : --ignore-daemonsets と --force

Kubernetes で kubectl drain コマンドを実行すると,指定したノード上の Pod を安全に削除して,そのノードには新しく Pod をスケジューリングしないようにステータスを変更できる.例えば,Kubernetes クラスターの運用として,ノードをメンテナンスすると…

Deployment に revisionHistoryLimit を設定して ReplicaSet のリビジョン数を制御する

Kubernetes で Deployment を使うときにマニフェストを修正して kubectl apply コマンドを繰り返し実行すると,ReplicaSet のリビジョンが増えていく.サンプルとして Deployment の image を nginx:1.8-alpine ➔ nginx:1.9-alpine ➔ nginx:1.10-alpine と修…

Vertical Pod Autoscaler の Recommender で「推奨値」のみを算出する

Kubernetes で VPA (Vertical Pod Autoscaler) を使うと,Pod に設定する CPU / Memory リクエスト値をオートスケールできる.CPU / Memory リクエスト値 (spec.containers[].resources.requests) に対する「スケールアップ」と「スケールダウン」とも言える…

「RBAC Lookup」を使って RBAC に関連するオブジェクトを検索する

Kubernetes には RBAC (Role Based Access Control) という仕組みとして,Role / ClusterRole / RoleBinding / ClusterRoleBinding という「計4種類」の Kubernetes オブジェクトがある.Role と ClusterRole ではアクセス権限を宣言して(Namespace を指定…

kubecolor を使って kubectl の実行結果を色付けしよう

kubecolor コマンドを使うと kubectl コマンドの実行結果を色付けして読みやすくできる.kubectl コマンドの実行結果は基本的に白黒なので,リソース数が多かったり,例えば -o wide オプションを使って表示項目を増やしたりすると,読みにくくなることもあ…

kubectl-neat を使って Kubernetes のマニフェストをスッキリ表示する

「kubectl-neat(kubectl neat コマンド)」を使うと Kubernetes のマニフェストから「冗長な」情報を削除して表示できる.知っておくと便利!GitHub リポジトリの README.md を読むと「メタデータ」や「デフォルト設定」や「Admission Controllers によって…

Pod に「優先度」を設定できる PriorityClass と Non-preempting 機能を試した

Kubernetes の「PriorityClass」を使うと Pod に優先度(プライオリティ)を設定できる.例えば,通常 Pod を起動するために必要なリソースを確保できない場合は Pending になるけど,そういう場合でも優先的に起動できるようになる.逆に「優先度を低くした…

nginxdemos/nginx-hello イメージを使うと簡単に「コンテナ ID」を確認できる

コンテナを複数起動して,ロードバランサーなどを使って「期待通りに振り分けできているよ!」という挙動をデモで見せたいときがある.実際に最近あった.例えば nginx:alpine イメージを使うと,全て同じ index.html から Welcome to nginx! とレスポンスを…

Secret を暗号化して Git 管理を可能にする「Sealed Secrets」を試した

Kubernetes で設定値や機密情報を管理する場合,ConfigMap と Secret が代表的な選択肢として挙げられる.しかし Secret は暗号化ではなく Base64 でエンコードをする仕様になっているため,Git リポジトリで直接マニフェストを管理できないという懸念点があ…

Argo CD に入門するために「Getting Started」をカスタマイズしながら試した

今回は Argo CD に入門するためにドキュメントに載っている「Getting Started」を試す.任意の Kubernetes クラスターに Argo CD をセットアップして,アプリケーションのデプロイを体験できる.また Argo CD UI を使った画面操作も体験できる.しかし GitOp…