(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

DevOps-Kubernetes

【Kubernetes】特定のPodに対してパケットキャプチャーをしかける

やりたいこと WorkerNode上で動作する特定のPod(例IngressController等)を宛先とする通信のパケットを取得する。 環境情報 Kubernetes v1.23 やり方 tcpdumpが含まれたコンテナイメージを用意した上でIngress ControllerのPodが動くWorkerNodeを以下のYAML…

【Kubernetes】kube-controller-managerのnode-monitor-grace-periodを変更する

やりたいこと WorkerNodeの状態を管理するパラメータである「node-monitor-grace-period」を変更する。 環境情報 Kubernetes v1.23.2 やり方 kube-contoller-managerの引数に記載する数値を変更する。(デフォルトは40秒) - kube-controller-manager - --no…

【Kubernetes】calico/kube-controllersのLivenessであるcheck-statusの動き

はじめに Calicoのkube-controllersのLiveness/Readinessを見ると、内部的に以下コマンドで生死監視が行われています。 exec [/usr/bin/check-status -l] delay=10s timeout=10s period=10s #success=1 #failure=6本記事にて実機を用いて内部的に何が確認さ…

【Kubernetes】NotReadyのNodeで動いているPodはServiceから切り離される

確認したいこと 以下の記事のようにWorkerNode~API Serverの通信が途絶えたりkubelet障害が発生した場合に Pod上はどのような挙動をするのか。尚、環境としては2台のNodeを用意&1つずつPodをDeployした状態でService経由のアクセスを可能にしておく。 環境…

【Kubernetes/Dashboard】Error scraping node metricsというエラーの解消法

事象 システムログに以下のメッセージが定期的に出力される。 ... journal: {"level":"error","msg":"Error scraping node metrics: the server could not find the requested resource (get nodes.metrics.k8s.io)","time":"..."}尚、以下記事のようにDashb…

【Kubernetes】kubeletを停止したNodeは自動的にNotReadyとなる

確認したいこと WorkerNode上で動作するkubeletプロセスが停止した場合にNodeとしてどのように見えるのか。尚、以下のようにMasterNodeとなっているNode上でkubeletを停止させることで事象を確認する。 # kubectl get node NAME STATUS ROLES AGE VERSION te…

【Kubernetes】特定ユーザに対してkube-apiserverのAudit機能を有効にする

はじめに KubernetesのAPIサーバには監査機能があり、時系列情報として各アクティビティをテキストファイルとして吐き出すことが可能です。本記事ではkubeadmでインストールしたNodeにてauditログを出力する設定を行い、その中でも特にkube-adminが行った操…

【Kubernetes】RBACにおけるget,list,watchの違いを実機で確認する

はじめに KubernetesではRoleとUser/ServiceAccountを紐付けることで権限管理ができますが、その中で get list watch という状況照会系の似たverbが存在し、それぞれに役割が異なります。本記事ではgetのみを与えた場合、listのみを与えた場合、watchのみを…

【Kubernetes】kube-proxy停止時はServiceとPodのIPアドレスが新たに紐づかなくなる

はじめに KubernetesではServiceのIPアドレスとPodのIPアドレスの紐付けをDNSではなくkube-proxyが担っています。つまり、kube-proxyが動作しているおかげでEndpointの数が増減しても、Serviceさえ指定すればコンテナのIPを気にせず通信を行えます。本記事で…

【Kubernetes】Livenessによる再起動時にCrashLoopBackOffとなる事象

事象 Liveness Probeを入れて再起動させているPodがCrashLoopBackOffとなって起動してこない。 # kubectl get pod NAME READY STATUS RESTARTS AGE liveness-exec 0/1 CrashLoopBackOff 7 (2m22s ago) 13m尚、describeで詳細メッセージを見ると下記のメッセ…

【Kubernetesr】Nodeに対してdrainを行うもPodが起動しつづける

事象 KubernetesのNodeに対してdrainコマンドを押下するも $ kubectl drain worker01以下のようなメッセージが標準出力に表示された上で node/worker01 cordoned ... error: unable to drain node "worker01", aborting command... There are pending nodes …

【Kubernetes】新規ユーザのClusterアクセス用にSSL証明書を用意する流れ

はじめに Kubernetesクラスターへのアクセスにてデフォルトではkubernetes-adminというユーザにclient-certificate-dataとclient-key-dataが与えられて認証しています。今回は新規ユーザを用意した場合にclient-certificate-dataとclient-key-dataを用意する…

【Kubernetes】Calicoインストール時に導入されるIPPoolとは?

はじめに KubernetesのCalicoを選択した際、インストール時に自動で生成されるippool。 本記事ではippoolの役割とその動きについて、kubeadmでインストールしたクラスターを例に分かりやすく解説しました。 環境情報 kubectl v1.23 docker.io/calico/kube-co…

【Kubernetes/Docker】exec: sh : executable file not found in $PATHとなっているコンテナの中に入る

やりたいこと 以下のようにKubernetes/Docker経由で中に入れないコンテナに入りたい。 # kubectl exec -it coredns-xx sh -n kube-system kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- …

【Kubernetes/Dashboard】ダッシュボードにToken認証でログインする

やりたいこと kubernetesui/dashboardにおいてToken認証機能をオンにする。 尚、以下でダッシュボード機能自体はインストール済とする。 # kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.4.0/aio/deploy/recommended.yaml 環…

【Kubernetes/Docker】コンテナイメージからcontainerStatuses.imageIDを取得する

やりたいこと Pod上にて以下のように格納されているimageIDをコンテナイメージからdockerコマンドで取得する。 $ kubectl get pod xx -n -o jsonpath='{.status.containerStatuses[].imageID}' xx@sha256:XX 環境情報 Kubernetes 1.23 docker version 1.13 …

【Kubernetes】Podにlimitsを付与してCPUスロットリングを発生させる

はじめに Kubernetesでは以下のようにlimitsというフィールドがあり $ kubectl explain pod.spec.containers.resources.limits KIND: Pod VERSION: v1 FIELD: limits <map[string]string>メモリやCPUリソースに制限を与えることができます。今回はその中でもCPUに焦点を当て、Po</map[string]string>…

【Kubernetes】kubectl debug nodeでPodが起動しない事象

事象 KubernetesにてNodeで任意のコマンドを打つためにkubectl debug nodeを実施するも $ kubectl debug node/test_node -it --image=busybox Creating debugging pod node-debugger-test_node-b4gg2 with container debugger on node test_node.上記からプ…

【Kubernetes】FailedCreatePodSandBoxでPodが起動しない事象

事象 KubernetesにてPodの起動を試みるもステータスがContainerCreating/CrashLoopBackOffで起動に失敗し、Event欄を見ると以下のようなエラーが出ている。 Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 118s defa…

【Kubernetes】imageGCManagerによってイメージの削除が行われる流れ

はじめに Kubernetesクラスターにおけるコンテナ基盤はkubeletプロセスによって動作していますが、kubeletにはファイルシステムが一定以上になるとガベージコレクションを行う機能が存在します。本記事はコンテナイメージ領域の逼迫に伴い発動するイメージの…

【Kubernetes】Terminatingで固まっているPodを強制的に削除する

やりたいこと 以下のようにStatusがTerminateingのまま変化しないPodを $ oc describe pod mongodb-5bc87db5bf-h5kbz ... Status: Terminating (lasts 27d) Termination Grace Period: 30sdeleteコマンドで削除する。尚、直接打つと以下で処理がフリーズする…

【Kubernetes】SchedulingDisabledとなっているNodeにDaemonSetが存在し続ける理由

はじめに 以下記事のようにNodeに対してdrainを発行して NodeのステータスをSchedulingDisabledとしているにもかかわらずDaemonSetに紐づくPodはそのNode上で削除をしても動作し続けます。本記事ではその理由について説明しました。 環境情報 $ kubectl vers…

【Kubernetes】PodがEmptyDirで使用しているディスク領域を確認する

やりたいこと Podにて以下のようにemptyDirを利用している場合に volumeMounts: - mountPath: /data name: storage-volume volumes: - emptyDir: {} name: storage-volume 同領域のディスク利用サイズを確認する。 環境情報 $ kubectl version Client Versio…

【Kubernetes/stern】Deploymentに紐づくPodのログを一気に確認するツール

はじめに Deploymentを単純にサービスに紐づけている場合はどのPodに通信が流れるかは判断できないため、ログ調査をする場合は各Podを選定しながら $ kubectl logs PODNAMEにてログを標準出力に出して確認しますがこれは時に面倒です。そんな時に重宝するツ…

【Kubernetes】externalNameでnamespaceを超えたServiceと接続する

やりたいこと ある名前空間にいるPodから別の名前空間にいるServiceに対して通信を発生させる。例として以下のサービスに対して $ oc get service -n openshift-monitoring NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE... node-exporter ClusterIP None <none> </none>…

【Kubernetes】Failed to watchとエラーが出た際のServiceAccountへの権限追加

事象 Pod(TektonTrigger)を起動した際に以下ログが出力して権限エラーのリスタートが起きている。 $ kubectl get pod NAME READY STATUS RESTARTS AGE tt-test-664dcbd49d-jd2wx 0/1 Running 3 Xs尚Podのログを確認するとServiceAccountに付与している権限…

【Kubernetes】ingress作成時にignoring add for ingress .. annotation .. with valueとして失敗する事象

事象 Ingressを作成するもIngressコントローラーにて以下のログが出力され ignoring add for ingress test-ingress based on annotation kubernetes.io/ingress.class with valueIngressにIPが割り振られない。 status: loadBalancer: {} 環境情報 nginx-ing…

【Kubernetes】Podがファイルシステムを逼迫させた際におきた事象

はじめに Podにログインしてdfコマンドを打つと以下のようなファイルシステムが確認できますが / # df Filesystem 1K-blocks Used Available Use% Mounted on overlay 101330012 53038048 48275580 52% / tmpfs 65536 0 65536 0% /dev tmpfs 2022504 0 20225…

【Kubernetes】Client.Timeout or context cancellation while reading bodyというエラーの解消方法

事象 kubectlコマンドでPodを展開しようとするも下記エラーでエラーとなる。 E0111 21:53:18.429065 5884 request.go:1001] Unexpected error when reading response body: net/http: request canceled (Client.Timeout or context cancellation while readi…

【Kubernetes】storageClass経由でPVCを要求するStatefulsetの1回目と2回目の挙動の違い

はじめに PodのspecにvolumeClaimTemplatesとしてPersistentVolumeClaimを要求してデータを固定化する際、1回目と2回目でイベントに違いががあります。本記事はレプリカ数1のmongoイメージを例にステートフルセットの落とし上げをしました。 それによって、…