(O+P)ut

アウトプット



(O+P)ut

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

DevOps-Kubernetes

【Kubernetes】kubectlコマンドを補完して利用する方法

やりたいこと kubectlコマンドのサブコマンドを[TAB]キーで補完できるようにしたい。 環境情報 $ kubectl version ... Client Version: version.Info{Major:"1", Minor:"17", ...bash --version GNU bash, version 4.4.20(1)-release (x86_64-pc-linux-gnu) …

【Kubernetes】Deploymentを例にOwnerReferencesを理解する

はじめに Kubernetesではkubectl create deployment nginx-dep --image nginxとデプロイメントを作成すると自動的にReplicaSetやPodが作成され、同デプロイメントを削除すれば自動的にReplicaSetやPodも削除されます。これはOwnerReferencesによってオブジェ…

【Kubernetes】特定Podを停止させずにレプリカセットから切り離す手順

はじめに Kubernetesではkubectl create deployment nginx-dep --image nginxとデプロイメントを作成すると自動的にReplicaSetも作成され、不具合が発生した場合もPodをdeleteすれば自動的に新たなPodが復旧します。ただ、PD対応等で特定のPodを一時的に退避…

【Kubernetes】Proxy経由にてcurlコマンドでAPIサーバと通信する

はじめに Kubernetesではkubectlコマンドを利用してマスターノードのAPIサーバと通信を行いますが、今回はkubectlコマンドではなくcurlコマンドで直接deploymentの削除であるkubectl delete deploymentに相当するリクエストを行ってみます。 コマンド実行環…

【Kubernetes入門】ConfigMapでPodの環境変数を設定する

はじめに Kubernetesではデータベースの接続先やアプリケーションのパラメータをConfigMapとしてPodとは別に管理することができます。 今回はコンテナ内の環境変数をConfigMapオブジェクトから設定する流れについて分かりやすく解説しました。 コマンド実行…

【Kubernetes】maxSurgeとmaxUnavailableとは?

はじめに Kubernetesではでデプロイ戦略はいくつかあり以下記事ではローリングアップデート(rollingUpdate)ということで順次新たなバージョンのPodが生成される動きを実践しました。 一方でこのようなデプロイ時の動きの詳細な制御を行うフィールドにmaxSu…

【Kubernetes】The node was low on resource: ephemeral-storageとなってPodが停止する事象

事象 Podを起動するもkubectl describe podにて以下メッセージが見られ Warning FailedScheduling 3s (x4 over 26s) default-scheduler 0/3 nodes are available: 3 node(s) had taints that the pod didn't tolerate.展開先候補のNodeをkubectl describe no…

【Kubernetes】kubectl taint nodeでlabelをoverwriteしてみた

はじめに Kubernetesではノードにラベルを付与することができ、例えばテスト環境や本番環境のノードを明示的に分離することでPodのデプロイ先を明示的にスケジューリングすることができます。本記事ではPodにtolerationsを設定することで明示的にノードに載…

【Kubernetes】PodのQoSクラス:Guaranteed/Burstable/BestEffortについて

はじめに Kubernetesではコンテナを管理するためにコンテナが使用できるリソースを制限することが可能です。 それに伴いノードがコンテナに割り当てるリソースを管理することができますが、万が一ノードが割り当てられる以上のリソース要求があった場合はPod…

【Kubernetes入門】CoreDNSによる名前解決とは?

はじめに Kubernetesでは同じNamespaceに属するPodやデフォルトのドメインの名前解決にDNSを利用しています。本記事ではDockerDesktop環境にて「kube-dns」サービスによる名前解決の動きをPod内でpingコマンドを打つことで確認してみます。 環境情報 Windows…

【Kubernetes】WorkerNodeに対してdrain/uncordonを行う

はじめに Kubernetesでは構成サーバはマスターノードとワーカーノードに分かれており、kubectl get nodesにてそれぞれの一覧が確認できます。 今回は以下のような構成のクラスターにて1台のWorkerを一時的に切り離すべくdrainした後にuncordonする手順を紹介…

【Kubernetes】kubelet&kubeadmをapt-getでインストールする

はじめに DockerDesktopのようにオールインワンのKubernetesを利用する場合はkubectlさえ利用できれば問題ないですが、マスターノードを自前で用意する場合にはkubeadm等のコマンドが必要です。今回はDebian系サーバに対してkubeletとkubeadmをインストール…

【Kubernetes入門】YAMLファイルのtemplateの意味

はじめに Kubernetesのyamlファイルの中にある「template」の文言、初学者の方には何を指しているのか分かりづらいと思います。それこそ私も以下のようにコメントアウトされるべき情報と思っていました。 # template size = S or M or L size = M今回はKuber…

【Kubernetes入門】永続化ボリュームPersistentVolumeClaimを利用する

はじめに コンテナは基本的にステートレスで削除してしまえば再度作成しても中で作成したファイルは消えています。が、Dockerでは例えば以下のように一部ファイルを外出しすることで永続的に利用できます。 Kubernetesにも永続ストレージという概念にてPersi…

【Kubernetes】NodePortとLoadBalancerの違い

はじめに 以下記事にてKubernetesのサービスで利用するClusterIPとNodePortの違いについて説明しました。 その違いは K8sクラスタに所属していないマシンからポッド内に通信できるか否か です。一方で上記の特徴を持つNodePortと同じくLoadBalancerでも同様…

【Kubernetes】nginxのPodへのcurlがEmpty reply from serverとなる事象

事象 Kubernetesにて立ち上げ済のnignxのPod&サービスを利用してcurlコマンドで接続を行うも以下エラーになる。 $ curl localhost curl: (52) Empty reply from server接続ポート(80)に誤りはなく > kubectl get service NAME TYPE CLUSTER-IP EXTERNAL-IP…

【Heapster】Error in scraping containers from kubelet failed to get all container stats from...というエラー

事象 Podのリソース(CPU/Memory)を確認すべくHeapsterをデプロイするも以下エラーで正常に利用ができない。 > kubectl logs -n kube-system heapster-d75f6848c-xbtf7 ... E0505 XX 1 manager.go:101] Error in scraping containers from kubelet:192.168.…

【Kubernetes】Heapsterでkubectl top pods/nodeを利用する

はじめに Kubernetesではポッドの状況を確認するためのHeapsterやmetrics-serverが導入されていない場合にkubectl topコマンドが利用できません。 本記事ではDocker Desktop環境にてHeapsterを導入し、kubectl top podsを利用できるようにするまでの流れにつ…

【Kubernetes】カナリアリリースでデプロイを行う

はじめに カナリアリリース/カナリーリリース(Canary Release)とはサービスを一部ユーザーのみが利用できるようにリリースし、問題がないことを確認しながら段階的に全体に向けて展開していくデプロイ手法を指します。本記事では2種類のnginxのバージョン…

【Kubernetes】Recreateを指定するデプロイ方法

やりたいこと Kubernetesにおいて以下のようなロールアウト機能を用いたデプロイではなく 全てのポッドを一気に変更したい。 環境情報 Windows 10 Enterprise Docker Desktop 2.2.0 やり方 deploymentのyamlファイルに以下の文言を追記する。 strategy: type…

【Kubernetes入門】クラスターと名前空間の違い

はじめに Kubernete(以降K8s)では「クラスター」と「名前空間(ネームスペース)」が似たような意味で利用されるケースがあり、初学者の人が困惑する場合があります。本記事ではそれらの違いを適宜コマンドを押下しながら分かりやすく説明しました。 コマ…

【Kubernetes入門】kubectl config viewで参照しているファイル

はじめに 以下記事でDockerDesktopをインストールした環境にて Kubernetesクラスタの設定を確認するkubectl config viewについて使い方を簡単に説明します。 環境情報 Windows 10 Enterprise Docker Desktop 2.2.0 Kubernetesのマスターノード 例えばDockerD…

【Kubernetes】ローカルでbuildしたimageのコンテナがrepository does not existで起動できない

事象 ローカルでbuildして作成した独自イメージをyamlファイルで起動しようとすると以下のようにポッドが起動しない。 > kubectl get pods NAME READY STATUS RESTARTS AGE nginx-deployment-84f8547f85-fc5cw 0/1 ImagePullBackOff 0 XX 原因 Kubernetesが…

【minikube】Db2エラー及び起動時のメモリ割り当て変化手順

事象 Db2と接続するJava アプリにてSQLCODE805/SQLSTATE51002エラーが発生する。 [err] java.sql.SQLException: DB2 SQL Error: SQLCODE=-805, SQLSTATE=51002, SQLERRMC=NULLID.SYSSN200 0X5359534C564C3031, DRIVER=4.26.14 DSRA0010E: SQL State = 51002,…

【minikube&k8s】/etc/kubernetes配下のファイルを確認する

はじめに minikubeにログインする際はminikube sshを用いますが ログイン時はdockerユーザであるためコマンド実行時に権限不足となる場合があります。本記事はKubernetes関連の設定ファイルが格納される /etc/kubernetes配下を調査した結果をシェアします。 …

【Kubernetes入門】ClusterIPとNodePortの違いは?

はじめに Kubernetesの世界ではServiceという概念があり、そのServiceの中のタイプとしてClusterIPやNodePortがあります。本記事では初学者の方に向けてClusterIPやNodePortとはなんぞや?という点について分かりやすく解説しました。 コマンド実行環境 Kube…

【Kubernetes】ロールアウト機能でポッドを入れ替える

はじめに マニフェストに記載したレプリカ数を維持してサービスを継続提供しながら、機能修正をリリースするポッドコントロールとして、ロールアウトと呼ばれるものがあります。 今回は、nginxのバージョン1.7.9をnginxの提供は維持したまま1.7.8に落とす流…

【Kubenetes】minikubeにおけるSSH及びSCPの方法と仕組み

はじめに minikube上の状況を確認したり、ローカルからファイルを配置する時に便利なのがSSH/SCPです。 本記事では「minikube ssh」で何故SSHができるのかというところから掘り下げて説明し、最後に手順を紹介します。 minikube sshでSSHができる仕組み mini…

【Kubernetes】minikubeのstartにてX Unable to start VMとエラーになる

事象 minikubeを起動しようとしたところ以下エラーで失敗する $ minikube start * minikube v1.6.2 on Microsoft Windows 10 Enterprise 10.0.18362 Build 18362 * Selecting 'virtualbox' driver from user configuration (alternates: [hyperv]) * X Unabl…

【Kubanetes】マニフェストをapplyしてDeploymentを作成する流れ

はじめに k8sではオブジェクトの理想状態をマニフェストとして宣言することで、各コンポーネントがその理想状態を実現すべく良しなに動いてくれます。本記事ではnginxのサンプルマニフェストにて、Deploymentコントローラー(Pod&Replica)をminikubeで動か…