Serverless on Kubernetes : Fission を使ってみた

こんにちは。 @jedipunkz です。 今日は Kubernetes を使って Serverless を実現するソフトウェア Fission を紹介します。 AWS の Lambda とよく似た動きをします。Lambda も内部では各言語に特化したコンテナが起動してユーザが開発した Lambda Function を実行してくれるのですが、Fission も各言語がインストールされた Docker コンテナを起動しユーザが開発したコードを実行し応答を返してくれます。 それでは早速なのですが、Fission を動かしてみましょう。 動作させるための環境 macOS か Linux を前提として下記の環境を用意する必要があります。また Kubernetes 環境は minikube が手っ取り早いので用いますが、もちろん minikube 以外の kubernetes 環境でも動作します。 macOS or Linux minikube or kubernetes kubectl fission ソフトウェアのインストール方法 簡単にですが、ソフトウェアのインストール方法を書きます。 OS 私は Linux で動作させましたが筆者の方は macOS を使っている方が多数だと思いますので、この手順では macOS を使った利用方法を書いていきます。 minikube ここでは簡単な手順で kubernetes 環境を構築できる minikube をインストールします。 curl -Lo minikube https://storage.googleapis.com/minikube/releases/v0.16.0/minikube-darwin-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/fission kubectl 直接必要ではありませんが、kubectl があると minikube で構築した kubernetes 環境を操作できますのでインストールしておきます。 ...

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 作業準備 下記のレポジトリをクローンします。 $ git clone https://github.com/coreos/etcd-operator.git Operator のデプロイ 下記のような内容のファイルが記さているファイルを利用します。中身を確認しましょう。 ...

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 の一覧を見てみましょう。 $ helm search NAME VERSION DESCRIPTION stable/drupal 0.3.7 One of the most versatile open source content m... stable/factorio 0.1.1 Factorio dedicated server. stable/ghost 0.4.0 A simple, powerful publishing platform that all... stable/jenkins 0.1.1 A Jenkins Helm chart for Kubernetes. stable/joomla 0.4.0 PHP content management system (CMS) for publish... stable/mariadb 0.5.3 Chart for MariaDB stable/mediawiki 0.4.0 Extremely powerful, scalable software and a fea... stable/memcached 0.4.0 Chart for Memcached stable/minecraft 0.1.0 Minecraft server stable/mysql 0.2.1 Chart for MySQL stable/phpbb 0.4.0 Community forum that supports the notion of use... stable/postgresql 0.2.0 Chart for PostgreSQL stable/prometheus 1.3.1 A Prometheus Helm chart for Kubernetes. Prometh... stable/redis 0.4.1 Chart for Redis stable/redmine 0.3.5 A flexible project management web application. stable/spark 0.1.1 A Apache Spark Helm chart for Kubernetes. Apach... stable/spartakus 1.0.0 A Spartakus Helm chart for Kubernetes. Spartaku... stable/testlink 0.4.0 Web-based test management system that facilitat... stable/traefik 1.1.0-rc3-a A Traefik based Kubernetes ingress controller w... stable/uchiwa 0.1.0 Dashboard for the Sensu monitoring framework stable/wordpress 0.3.2 Web publishing platform for building blogs and ... 各アプリケーションの名前で Charts が管理されていることが分かります。 ここでは stable/mysql を使って kubernetes の中に MySQL 環境を作ってみます。まず stable/mysql に設定できるパラメータ一覧を取得します。 ...

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 一式も立ち上がります。 ...