(O+P)ut

アウトプット



(O+P)ut

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

DevOps

【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…

【Openshift】dataSourceによるPVC指定のバックアップがPending状態となる事象

事象 作成済のPVCに対して $ oc get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE test-data Bound pvc-test-73e902635620 1Gi RWO XX ...pvc.spec.dataSource(RESOURCE: dataSource )を利用してクローンコピーを作成するもPVが作成さ…

【Prometheus/Kubernetes】Service側に記載するannotationsについて

はじめに Prometheusはメトリクス収集対象を静的に記載して扱うこともできますが ServiceDiscoveryを利用すれば対象の自動的な検出が可能です。本記事ではKubernetesのServiceを利用してメトリクスを収集する際にマニフェストに記載する以下のアノテーション…

【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 …

【Istio】istiod停止下ではError creating: Internal error occurredでPodが起動しない

事象 Istioのコントロールプレーンである以下のDeploymentを停止した場合に $ oc scale deployment/istiod-basic --replicas=0 -n istio-system deployment.apps/istiod-basic scaledIstiodで管理しているnamespaceのPodが正しく再起動されない。 $ oc get d…

【Istio】DestinationRuleで設定した相互TLSをPeerAuthenticationで上書きする

はじめに 相互TLS(mTLS/mutual-TLS)とは、サーバ証明書による通常のTLS サーバ認証に加えてクライアント側の証明を行う機能です。 サービスメッシュを担うIstioでは同設定をDestinationRuleとPeerAuthenticationで行えますが、PeerAuthenticationの設定内…

【Istio/Virtualservice】Headerのブラウザ情報を用いてトラフィック管理を行う

はじめに Istioが持つTraffic Management機能にて、 Virtual ServiceとDestination Ruleを組み合わせることで異なるバージョンのアプリへのトラフィックの割合を指定することが可能となります。本記事ではUser-Agentを元にGoogleChormeとInternetExplorerの…

【Istio】Virtualservice/DestinationRuleでPodへの通信割合を管理する

はじめに Istioが持つTraffic Management機能にて、 Virtual ServiceとDestination Ruleを組み合わせることで異なるバージョンのアプリへのトラフィックの割合を指定することが可能となります。本記事では実際にv1のPodに80%、v2のPodに20%のトラフィックを…

【Istio/Openshift】ServiceMeshOperatorのistio-proxyログを出力させる

やりたいこと Red Hat OpenShift Service Mesh(2.1.0-0 provided by Red Hat, Inc)Operatorを利用して付与されるistio-proxy(Envoy)を通過するhttp accessをログとして表示させる。 環境情報 Openshift v4.6 Red Hat OpenShift Service Mesh(2.1.0-0 pr…

【Openshift/IngressOperator】Routeを利用してServiceに割り振られる仕組み

はじめに Red Hat OpenShiftではIngress Operatorによって外部からのアクセスを可能にしています。 同コンポーネントはKubernetesにはデフォルトで付属している要素ではないので、IBM CloudでオーダーしたOpenshiftの環境にて本項目について調査してみました…

【Istio/Openshift】ServiceMeshOperatorを利用してistioサイドカーを付与する

はじめに Red Hat OpenShift Service Mesh(2.1.0-0 provided by Red Hat, Inc)Operatorにて特定のnamespaceにIstioのサイドカーを付与する流れについて記載しました。 環境情報 Openshift v4.6 Red Hat OpenShift Service Mesh(2.1.0-0 provided by Red H…

【Openshift】may not be installed in the same project/namespace as the operatorというエラー

事象 Red Hat OpenShift Service Mesh(2.1.0-0 provided by Red Hat, Inc)OperatorにてCreate ServiceMeshControlPlaneをGUI上で行うも以下エラーで失敗する。 Danger alert:An error occurred admission webhook "smcp.validation.maistra.io" denied the…

【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.上記からプ…

【IBMCloud】SysdigのAPIを利用するもUnauthorizedエラーと出る事象

事象 SysdigのAPIを利用するも # docker run --rm quay.io/sysdig/secure-inline-scan:2 xx --sysdig-token xx --sysdig-url https://jp-tok.monitoring.cloud.ibm.com以下のエラーで権限エラーとなる。 ERROR: Invalid token for specific Sysdig secure en…

【fluetnd/tdagent】ログ収集コンテナを再起動してもログが欠落しない理由

はじめに FluentdとはOSSのログ収集ツールで、サーバだけではなくログ収集コンテナとしてKubernetesやOpenshiftの上で動くPodのログをサーバに転送するという使われ方もよくしています。一方で気になるのはFluentd自体が停止してしまった場合のログの欠落。 …