DevOps-Kubernetes
やりたいこと WorkerNode上で動作する特定のPod(例IngressController等)を宛先とする通信のパケットを取得する。 環境情報 Kubernetes v1.23 やり方 tcpdumpが含まれたコンテナイメージを用意した上でIngress ControllerのPodが動くWorkerNodeを以下のYAML…
やりたいこと WorkerNodeの状態を管理するパラメータである「node-monitor-grace-period」を変更する。 環境情報 Kubernetes v1.23.2 やり方 kube-contoller-managerの引数に記載する数値を変更する。(デフォルトは40秒) - kube-controller-manager - --no…
はじめに Calicoのkube-controllersのLiveness/Readinessを見ると、内部的に以下コマンドで生死監視が行われています。 exec [/usr/bin/check-status -l] delay=10s timeout=10s period=10s #success=1 #failure=6本記事にて実機を用いて内部的に何が確認さ…
確認したいこと 以下の記事のようにWorkerNode~API Serverの通信が途絶えたりkubelet障害が発生した場合に Pod上はどのような挙動をするのか。尚、環境としては2台のNodeを用意&1つずつPodをDeployした状態でService経由のアクセスを可能にしておく。 環境…
事象 システムログに以下のメッセージが定期的に出力される。 ... journal: {"level":"error","msg":"Error scraping node metrics: the server could not find the requested resource (get nodes.metrics.k8s.io)","time":"..."}尚、以下記事のようにDashb…
確認したいこと WorkerNode上で動作するkubeletプロセスが停止した場合にNodeとしてどのように見えるのか。尚、以下のようにMasterNodeとなっているNode上でkubeletを停止させることで事象を確認する。 # kubectl get node NAME STATUS ROLES AGE VERSION te…
はじめに KubernetesのAPIサーバには監査機能があり、時系列情報として各アクティビティをテキストファイルとして吐き出すことが可能です。本記事ではkubeadmでインストールしたNodeにてauditログを出力する設定を行い、その中でも特にkube-adminが行った操…
はじめに KubernetesではRoleとUser/ServiceAccountを紐付けることで権限管理ができますが、その中で get list watch という状況照会系の似たverbが存在し、それぞれに役割が異なります。本記事ではgetのみを与えた場合、listのみを与えた場合、watchのみを…
はじめに KubernetesではServiceのIPアドレスとPodのIPアドレスの紐付けをDNSではなくkube-proxyが担っています。つまり、kube-proxyが動作しているおかげでEndpointの数が増減しても、Serviceさえ指定すればコンテナのIPを気にせず通信を行えます。本記事で…
事象 Liveness Probeを入れて再起動させているPodがCrashLoopBackOffとなって起動してこない。 # kubectl get pod NAME READY STATUS RESTARTS AGE liveness-exec 0/1 CrashLoopBackOff 7 (2m22s ago) 13m尚、describeで詳細メッセージを見ると下記のメッセ…
事象 KubernetesのNodeに対してdrainコマンドを押下するも $ kubectl drain worker01以下のようなメッセージが標準出力に表示された上で node/worker01 cordoned ... error: unable to drain node "worker01", aborting command... There are pending nodes …
はじめに Kubernetesクラスターへのアクセスにてデフォルトではkubernetes-adminというユーザにclient-certificate-dataとclient-key-dataが与えられて認証しています。今回は新規ユーザを用意した場合にclient-certificate-dataとclient-key-dataを用意する…
はじめに KubernetesのCalicoを選択した際、インストール時に自動で生成されるippool。 本記事ではippoolの役割とその動きについて、kubeadmでインストールしたクラスターを例に分かりやすく解説しました。 環境情報 kubectl v1.23 docker.io/calico/kube-co…
やりたいこと 以下のように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] -- …
やりたいこと kubernetesui/dashboardにおいてToken認証機能をオンにする。 尚、以下でダッシュボード機能自体はインストール済とする。 # kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.4.0/aio/deploy/recommended.yaml 環…
やりたいこと Pod上にて以下のように格納されているimageIDをコンテナイメージからdockerコマンドで取得する。 $ kubectl get pod xx -n -o jsonpath='{.status.containerStatuses[].imageID}' xx@sha256:XX 環境情報 Kubernetes 1.23 docker version 1.13 …
はじめに 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にて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にてPodの起動を試みるもステータスがContainerCreating/CrashLoopBackOffで起動に失敗し、Event欄を見ると以下のようなエラーが出ている。 Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 118s defa…
はじめに Kubernetesクラスターにおけるコンテナ基盤はkubeletプロセスによって動作していますが、kubeletにはファイルシステムが一定以上になるとガベージコレクションを行う機能が存在します。本記事はコンテナイメージ領域の逼迫に伴い発動するイメージの…
やりたいこと 以下のようにStatusがTerminateingのまま変化しないPodを $ oc describe pod mongodb-5bc87db5bf-h5kbz ... Status: Terminating (lasts 27d) Termination Grace Period: 30sdeleteコマンドで削除する。尚、直接打つと以下で処理がフリーズする…
はじめに 以下記事のようにNodeに対してdrainを発行して NodeのステータスをSchedulingDisabledとしているにもかかわらずDaemonSetに紐づくPodはそのNode上で削除をしても動作し続けます。本記事ではその理由について説明しました。 環境情報 $ kubectl vers…
やりたいこと Podにて以下のようにemptyDirを利用している場合に volumeMounts: - mountPath: /data name: storage-volume volumes: - emptyDir: {} name: storage-volume 同領域のディスク利用サイズを確認する。 環境情報 $ kubectl version Client Versio…
はじめに Deploymentを単純にサービスに紐づけている場合はどのPodに通信が流れるかは判断できないため、ログ調査をする場合は各Podを選定しながら $ kubectl logs PODNAMEにてログを標準出力に出して確認しますがこれは時に面倒です。そんな時に重宝するツ…
やりたいこと ある名前空間にいるPodから別の名前空間にいるServiceに対して通信を発生させる。例として以下のサービスに対して $ oc get service -n openshift-monitoring NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE... node-exporter ClusterIP None <none> </none>…
事象 Pod(TektonTrigger)を起動した際に以下ログが出力して権限エラーのリスタートが起きている。 $ kubectl get pod NAME READY STATUS RESTARTS AGE tt-test-664dcbd49d-jd2wx 0/1 Running 3 Xs尚Podのログを確認するとServiceAccountに付与している権限…
事象 Ingressを作成するもIngressコントローラーにて以下のログが出力され ignoring add for ingress test-ingress based on annotation kubernetes.io/ingress.class with valueIngressにIPが割り振られない。 status: loadBalancer: {} 環境情報 nginx-ing…
はじめに 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…
事象 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…
はじめに PodのspecにvolumeClaimTemplatesとしてPersistentVolumeClaimを要求してデータを固定化する際、1回目と2回目でイベントに違いががあります。本記事はレプリカ数1のmongoイメージを例にステートフルセットの落とし上げをしました。 それによって、…