Corredor

ウェブ、プログラミングの勉強メモ。

2020-11-28 : このブログは2020年末をもって更新停止する予定です。
2021年以降は Neo's World (https://neos21.net/) で記事を公開していきますので、今後はコチラをご覧ください。
このブログの記事は2021年以降、Neo's World に順次移行していきます。元記事および本ブログは移行次第削除する予定です。

Kubernetes

Kubernetes Pod の一覧を生成した順に表示する

kubectl get pod で Pod を一覧表示する時、生成された順番に表示したい。 $ kubectl get pod --sort-by=.metadata.creationTimestamp コレで OK。 kubectl get pod は -o wide オプションを付けると、その Pod がどの Node 上で動いているかが確認できるよ…

kubectl get で対象リソースがなくてもエラーにしない (--ignore-not-found)

Kubernetes の kubectl コマンドで、Pod の存在チェックをしたりする時に、対象が存在しないとコマンドの終了コードは 1 になる。 $ kubectl get pod my-app-server Error from server (NotFound): pods "my-app-server" not found $ echo $? 1 Bash スクリ…

Docker と Kubernetes でコンテナログを Tail で見る

Docker コンテナや Kubernetes Pod の標準出力ログを見るには、次のように見れば良い。 $ docker logs -f --tail=10 【コンテナ名】 $ kubectl logs -f --tail=10 【Pod 名】 -f オプションがない場合は、最古のログから最新のログまでを表示したら終わり -f…

Kubernetes の nginx Ingress でパスを書き換えて転送したい

Kubernetes の Ingress が受け取ったパスの一部を加工して、後ろにいる Service (Pod) へ転送したくなった。どういうことかというと、 http://example.com/my-app-1/index.html といった URL で Ingress がリクエストを受け取った時、後ろに用意した my-app-…

Kubernetes Secret をデコードして表示する jq 芸

通常、Kubernetes の Secret を見ようとすると、Base64 エンコードされた値で見えるので、実際の値はパッと見分からない。 $ kubectl get secret my-credential -o json | jq '.data' { "my-username": "yyyyyyyyyyyyyyyyyyy==", "my-password": "xxxxxxxxxx…

Kubernetes の Secret を Git 管理可能にする Sealed Secrets を使ってみた

Kubernetes でクレデンシャル情報などを管理する際、Secret という仕組みを利用するだろう。 しかし、この Secret は、単に Base64 でエンコードされているだけで、デコードしてしまえば機密情報が簡単に確認できてしまう。Secret を定義するための YAML フ…

Kubernetes のコンテキスト切り替えに kubectx、ネームスペース切り替えに kubens

Kubernetes の作業がやりやすくなるコマンドを見つけたので紹介。 kubectx と kubens kubectx : コンテキストを切り替える kubens : ネームスペースを切り替える 以上 kubectx と kubens 今回紹介する kubectx と kubens という2つのコマンドは、まとめて一…

コミットされた YAML ファイルを Kubernetes にデプロイする GitHub Actions

Kubernetes のマニフェストファイルを管理している GitHub リポジトリがあって、そこにコミット・プッシュされた YAML ファイルを特定して、Kubernetes クラスタにデプロイするような GitHub Actions を作ってみた。 コード全量と使い方 先にコード全量。 .g…

Kubernetes Pod に環境変数がうまく注入できているか試す際の YAML ファイル

Kubernetes 上の Pod (コンテナ) に対して環境変数を注入する、お試し Deployment を作ってみた。 ConfigMap や Secret を注入する valueFrom の configMapKeyRef や secretKeyRef の書き方が毎回よく分からなくなるのと、「どんな Key Value を定義したっけ…

Kubernetes のオシャレな管理コンソール「k9s」

Kubernetes クラスタを管理する時に使うのが kubectl だが、この kubectl の機能を発展させ、ターミナル上でイイカンジに Pod の閲覧・操作ができる CLI ツールを見つけたので紹介。「k9s」というツールだ。 GitHub - derailed/k9s: Kubernetes CLI To Mana…

OCI 上に OKE クラスタと踏み台サーバを構築する Terraform スクリプトを作った

Oracle Cloud Infrastructure (OCI) 上に、プライベートサブネットに配置した Oracle Container Engine for Kubernetes (OKE) クラスタを作り、そこに SSH 接続するための踏み台サーバも構築する、という Terraform スクリプトを作った。 ソースコードは以下…

Kubernetes の Replica 数を減らした時に削除される Pod は「生成日時がより新しい Pod」

普段、Kubernetes の Deployment を使って、一種類の Pod (≒ コンテナ) を複数個作り、冗長稼動させている。 1つの Deployment から作成される Pod の個数は、deployment.yaml 内の spec.replicas プロパティに指定した数値で決まる。replicas: 5 とすれば5…

Wercker を使ってみた感想

Oracle Container Pipelines として取り込まれた CI・CD ツールである Wercker を使ってみたので紹介。 wercker 参考:Oracle Blogs 日本語のまとめ: [Cloud] New in Developer Cloud - Fn Support and Wercker Integration Wercker ってどんなもの?僕が感…

Kubernetes で Blue Green デプロイをやってみた

最近の仮想技術とクラウドサービスを使うと、アプリケーションのデプロイ作業もより安全に行える。その手法の一つが「ブルー・グリーン・デプロイメント」というモノで、コレを Kubernetes クラスタでやってみた、という話。 Blue Green Deployment とは Kub…

Kubernetes で Pod が再起動しまくった原因は、コンテナのプロセスが終了したから

Kubernetes で動かすコンテナを作ってデプロイしたところ、Docker コンテナとして単体で動かしていた時は上手く動いていたのに、Kubernetes Pod としては正常に起動しない問題に遭遇した。 $ kubectl get pod で Pod のステータスを見ると、CrashLoopBackOff…

Kubernetes の Pod にファイルを転送する / Pod からファイルをダウンロードする

前回、Docker コンテナとホスト OS 間でファイルをやり取りする docker cp コマンドを紹介した。 neos21.hatenablog.com 今回は、Docker コンテナを Kubernetes クラスタ内で動かしている時に、同様にファイルを送ったり・受け取ったりする方法。 コマンドの…

OCI CLI・OKE・OCIR 利用時に異なるアカウントを切り替えるには

OCI (Oracle Cloud Infrastructure) 環境の参照・操作に使う OCI CLI (oci コマンド)。 なかなかいないかもしれないが、複数のテナンシーを管理していて、OCI CLI で複数の環境を操作したいという人向けに、設定ファイルの切り替え方を考えたのでご紹介。 OC…

kubectl コマンドを使うとき異なる Kubernetes 環境を切り替えるには

前回、複数のプライベート Docker レジストリを切り替えて使う方法を紹介した。 neos21.hatenablog.com 今回は Kubernetes における環境切り替えの方法。 Kubernetes の設定ファイルは、デフォルトでは ~/.kube/config というパスに配置される。特に環境変数…

Kubernetes Secret に登録した情報を Base64 デコードして表示する

Kubernetes の Secret に登録した情報は、Base64 エンコードされた状態で保持される。そのため、kubectl get secret で情報を表示させても、Base64 文字列しか見えず、内容が確認しづらい。 勿論、登録された値を base64 --decode コマンドに流してやれば見…

Kubernetes の Pod 内で使う環境変数を Secret から設定する

Kubernetes 時代の環境変数設定。 Kubernetes Secret について deployment.yaml の env プロパティ --from-literal オプションで一つずつ登録 env・valueFrom で1つずつ参照紐付け --from-env-file オプションで一括登録 envFrom で一括読み込み 以上 Kubern…

OCI ことはじめ : OCIR に Push した Docker イメージを OKE クラスタ上で動かしてブラウザからアクセスするまで

OCI : Oracle Cloud Infrastructure という IaaS を使ってみる。OCI には OCIR : Oracle Cloud Infrastructure Registry と呼ばれるプライベート Docker レジストリと、OKE : Oracle Container Engine for Kubernetes という Kubernetes マネージド・サービ…

Kubernetes クラスタの Load Balancer に SSL を適用する

Let's Encrypt などでサーバ証明書を発行した後、それを Kubernetes クラスタに適用する方法。 今回は、各 Pod (Docker コンテナ) 内で SSL の終端をさせるのではなく、Load Balancer で終端させて、Kubernetes クラスタ内は HTTP で通信できる方法を取る。…

Kubernetes にデプロイした複数 Pod のログをまとめて見られる「k8stail」が大変便利だった

Kubernetes を使い始めて困ったのが、動作中の Pod (コンテナ) の動作をリアルタイムで確認する方法。 Pod 内のプロセスが標準出力に出力する情報は、kubectl logs コマンドで一応見られる。しかしこのコマンド、基本は Pod 単位でログを見る前提の作りで、$…