Kubernetes Deployments を使ってみた!

こんにちは。 @jedipunkz です。 いま僕らは職場では GKE 上に Replication Controller と Services を使って Pod を起動しているのですが最近の Kubernetes 関連のドキュメントを拝見すると Deployments を使っている記事をよく見掛けます。Kubernetes 1.2 から実装されたようです。今回は Kubernetes の Replication Controller の次世代版と言われている Deployments について調べてみましたので理解したことを書いていこうかと思います。 参考資料 今回は Kubernetes 公式の下記のドキュメントに記されているコマンドを一通り実行していきます。追加の情報もあります。 https://kubernetes.io/docs/user-guide/deployments/ Deployments を使って nginx Pod を起動 nginx をデプロイするための Yaml ファイルを用意します。 apiVersion: extensions/v1beta1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 2 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.7.9 ports: - containerPort: 80 作成した yaml ファイルを指定して Pod を作ります。 下記の通りここで “–record” と記しているのは、後に Deployments の履歴を表示する際に “何を行ったか” を出力するためです。このオプションを指定しないと “何を行ったか” の出力が “NONE” となります。...

fluentd-sidecar-gcp と Kubernetes Volumes で Cloud Logging ログ転送

こんにちは @jedipunkz です。 今回は Kubernetes を使った構成で Google-Fluentd をどのコンテナに載せるか?ってことを考えてみたので書きたいと思います。 Kubernetes は Docker を利用したソフトウェアなので Docker と同じく “1コンテナ, 1プロセス” というポリシがあります。つまり、コンテナ上のプロセスが停止したら Kubernetes がそれを検知してコンテナを起動しなおしてくれます。ですが、複数プロセスを1コンテナに稼働させると、それが出来ません。そうは言っても中には複数のプロセスを稼働させたい場面があります。その場面として考えられる具体的な例として HTTPD サーバのログを Google-Fluentd を使って GCP Cloud Logging に転送したい場合があります。 今回は上記の例を fluentd-sidecar-gcp と kubernetes volumes を使って解決する方法を記したいと思います。 構成のシナリオ シナリオとしては下記のとおりです。 マルチコンテナポッドを扱う 1つの Kubernetes Volumes を複数コンテナで共有する HTTPD ログをその Volume に出力 隣接する Google-Fluentd コンテナでその Volume に出力されたログを読み込みログ転送 fluentd-sidecar-gcp とは 次に説明するのは fluentd-sidecar-gcp の概略です。これは Kubernetes が contrib で扱っているコンテナです。下記の URL にあります。 https://github.com/kubernetes/contrib/tree/master/logging/fluentd-sidecar-gcp Google-Fluentd を稼働させる Dockerfile が用意されているのですが、下記の記述を確認するとこのコンテナに環境変数 $FILES_TO_COLLECT を渡すと Google Fluentd でログを取得してくれることが分かります。...

Google Cloud CDN を使ってみた

こんにちは。@jedipunkz です。 今回は Google Cloud Platform の Google CloudCDN について調べてみたので記したいと思います。 CloudCDN は GCP のロードバランサのバックエンドサービスに紐付けられるサービスです。このバックエンドサービスで CloudCDN を有効にしていると CDN サービスを機能させることが出来ます。先に書いておくとこの CloudCDN はとてもシンプルで扱いやすいサービスだと判りました。高機能な他の CDN サービスと比べると機能が足らない感ありますが、必要最低限なところを抑えているのと、価格がとても安いです。(価格は下記の URL 参照) 価格表 : https://cloud.google.com/cdn/pricing 構成 構成と構成の特徴です。 +----------+ +---------+ | instance |--+ +-| EndUser | +----------+ | +------------+ +----------+ | +---------+ +--|LoadBalancer|--| CloudCDN |-+-| EndUser | +----------+ | +------------+ +----------+ | +---------+ | instance |--+ +-| EndUser | +----------+ +---------+ コンテンツが初めてリクエストされた場合キャッシュミスする キャッシュミスした際に近くにあるキャッシュからコンテンツを取得しようと試みる 近くのキャッシュがコンテンツがある場合、最初のキャッシュにコンテンツが送信される 近くのキャッシュにコンテンツがない場合、HTTP ロードバランサにリクエストが転送される その後のリクエストはキャッシュが応答する(キャッシュヒット) キャッシュ間のフィルは EndUser のリクエストに応じて実行される キャッシュを事前に読み込むことできない キャッシュは世界各地に配置されている CloudCDN を導入する方法 導入する方法は簡単で下記のとおりです。...

coreos の etcd operator を触ってみた

こんにちは @jedipunkz です。 今日は某アドベントカレンダーに参加していて記事を書いています。 記事だけ先出ししちゃいます..。 今日は最近 coreos がリリースした ’etcd-operator’ を触ってみようかと思います。ほぼ、README に書かれている手順通りに実施するのですが、所感を交えながら作業して記事にしてみたいと思います。 coreos が提供している etcd についてご存知ない方もいらっしゃると思いますが etcd は KVS ストレージでありながら Configuration Management Store として利用できる分散型ストレージです。Docker 等の環境を提供する coreos という軽量 OS 内でも etcd が起動していてクラスタで管理された情報をクラスタ内の各 OS が読み書きできる、といった機能を etcd が提供しています。 詳細については公式サイトを御覧ください。 etcd 公式サイト : https://coreos.com/etcd/docs/latest/ etcd-operator はこの etcd クラスタを kubernetes 上でクラスタ管理するための簡単に運用管理するためのソフトウェアになります。 etcd-operator 公式アナウンス : https://coreos.com/blog/introducing-the-etcd-operator.html 後に実際に触れていきますが下記のような管理が可能になります。 etcd クラスタの構築 etcd クラスタのスケールアップ・ダウン etcd Pod の障害時自動復旧 etcd イメージをオンラインで最新のモノにアップグレード では早速利用してみたいと思います。 必要な環境 下記の環境が事前に用意されている必要があります。 Docker Kubernetes or minikube+kubernetes (https://github.com/kubernetes/minikube) etcdctl : https://github.com/coreos/etcd/tree/master/etcdctl 作業準備 下記のレポジトリをクローンします。...

Helm を使って Kubernetes を管理する

こんにちは。@jedipunkz です。 今回は Helm という kubernetes のパッケージマネージャ的なソフトウェアを使ってみたので記事にしたいと思います。 公式サイト : https://helm.sh/ Kubernetes を仕事で使っているのですが “レプリケーションコントローラ” や “サービス” といった単位を使って Pod, Service を管理しています。Helm を使うことでこれらの管理方法が変わるのか調べたいと思います。 依存するソフトウェア 今回は MacOS を使って環境を整えます。 virtualbox minikube kubectl これらのソフトウェアをインストールしていきます。 $ brew cask install virtualbo $ curl -Lo minikube https://storage.googleapis.com/minikube/releases/v0.12.2/minikube-darwin-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/ $ brew install kubectl minikube を使って簡易的な kubernetes 環境を起動します。 $ minikube start $ eval $(minikube docker-env) Helm を使ってみる Helm は Charts という単位で Kubernetes をパッケージングします。Charts の一覧を見てみましょう。...

kubernetes1.4 で実装された ScheduledJob を試してみた!

こんにちは、@jedipunkz です。今回は Kubernetes1.4 から実装された ScheduledJob を試してみたのでその内容を記したいと思います。 ScheduledJob はバッチ的な処理を Kubernetes の pod を使って実行するための仕組みです。現在は alpha バージョンとして実装されています。 kubernetes の pod, service は通常、永続的に立ち上げておくサーバなどを稼働させるものですが、それに対してこの scheduledJob は cron 感覚でバッチ処理を pod に任せることができます。 Alpha バージョンということで今回の環境構築は minikube を使って簡易的に Mac 上に構築しました。Docker がインストールされていれば Linux でも環境を作れます。 参考 URL 今回利用する yaml ファイルなどは下記のサイトを参考にしています。 http://kubernetes.io/docs/user-guide/scheduled-jobs/ https://github.com/kubernetes/minikube 前提の環境 私の環境では下記の環境を利用しました。 Mac OSX Docker-machine or Docker for Mac minikube kubernetes 1.4 以降の構成を minikube で構築する まず minikube のインストールを行います。 $ curl -Lo minikube https://storage.googleapis.com/minikube/releases/v0.12.0/minikube-darwin-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/ 早速 minikube を起動します。...

Minikube で簡易 kubernetes 環境構築

こんにちは。@jedipunkz です。 kubernetes の環境を簡易的に作れる Minikube (https://github.com/kubernetes/minikube) が2ヶ月前ほどにリリースになっていました。簡単ですが少し触ってみたのでその際のメモを記したいと思います。VirtualBox もしくは VMware Fusion がインストールされていればすぐにでも稼働可能です。私は Kubernetes 初心者ですが何も考えずに kubernetes を動かすことが出来ました。 前提 前提として下記の環境が必要になります。 Mac OSX がインストールされていること VirtualBox もしくは VMware Fusion がインストールされていること minikube をインストール minikube をインストールします。 $ curl -Lo minikube https://storage.googleapis.com/minikube/releases/v0.6.0/minikube-darwin-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/ kubetl をインストール 次に kubectl をインストールします。 $ curl -k -o kubectl https://kuar.io/darwin/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/ Minikube で Kurbernates を稼働 Minikube を使って Kubernetes を稼働してみます。下記のコマンドを実行すると Virtualbox 上で仮想マシンが稼働し Kubernetes 一式も立ち上がります。...

Go言語とInfluxDBで監視のコード化

こんにちは。@jedipunkz です。 今日は Go 言語でサーバのメトリクスデータを InfluxDB に入れてリソース監視を行う方法について書きます。 Ansible, Terraform, Chef などのソフトウェアを使ってインフラを定義するのが当たり前になった現在ですが、本当の意味でのソフトウェアによるインフラの定義ってなんだろと最近考えています。aws-sdk や fog などを使ったネイティブな言語でインフラを定義することの意味もあるように感じているからです。某サービスプロバイダのエンジニアはこうした言語によるインフラの定義の一番大きなメリットとして “再利用性” をあげていました。こうしたソフトウェアによるインフラの定義や構成を行う上で監視についてもコード化できるのでは?と考えて今回の記事に至りました。 使うモノ https://github.com/influxdata/influxdb/tree/master/client 公式の InfluxDB Go Client です。InfluxDB 自体が Go 言語で書かれていますがクライアントも Go 言語で記述することができます。ここにあるサンプルコードをすこしいじって、今回の記事を書こうと思います。 https://github.com/shirou/gopsutil @shirou さんが作られた psutil の Go 言語版です。CPU, Mem などリソースをモニタするのに便利なので利用します。 環境構築 環境を作っていきます。InfluxDB と Chronograf を構築するのですが Docker で構築するのが簡単なのでこれを利用します。Chronograf は InfluxDB 内のデータを可視化するためのソフトウェアです。 InfluxDB の起動 InfluxDB のコンテナを起動します。 docker run -p 8083:8083 -p 8086:8086 \ -v $PWD:/var/lib/influxdb \ influxdb Chronograf の起動 Chronograf のコンテナを起動します。 docker run -p 10000:10000 chronograf この時点で http://${DOCKER_HOST}:10000/ にアクセスすると Chronograf の UI を確認できます。...