iChain’s Engineer Blog

iChain株式会社の開発チームによるブログです

Kubernetesの概要

はじめまして。インフラエンジニアとして、業務システムの環境構築を担当しております。まだwebエンジニアからインフラエンジニアへ転身してからは3ヶ月程度で、日々勉強量が多くて大変です。完全クラウド環境かつAWSのサービスを数多くつかっているので、その各サービスでできることとiChainの環境でやっていることを学ぶのが大変です。また、ネットワーク関連の知識も必要なので、この辺りは苦戦しています。。。修行中の身ですが、頑張っていきたいと思います。

今回はKubernetesについてお話ししたいと思います。今回はざっくりした概要を説明できればと思います。
ちなみに、弊社でAWSをベースにして環境を構築していることは先の記事の通りで、実際に使っているサービスはAmazon EKSです。

コンテナ運用・管理ツール

KubernetesはもともとはGoogle社内の運用システムBorgが出発点で、2018年頃にかけてAWS、Azure、IBMなどで本格的なサービスが開始し、コンテナオーケストレーションエンジンのなかでは77%のシェアを占めています。
コンテナオーケストレーションツールとは、コンテナ化されたアプリケーションの運用、管理、監視、デプロイ等の自動化をする為のオープンソースソフトウェアになります。コンテナの詳細は省略しますが、弊社ではDockerを使用しています。

コンテナのメリットは一言で言えば、環境構築を早く簡単にする、ということです。必要な資材を一つのパッケージにして別環境に適用することができるためですが、これは同時に運用保守を軽量化することにもつながります。 iChainではマイクロサービス化を進めていることは先の記事にありますが、少人数で2つの自社サービスを開発・提供するためには開発効率・運用効率を極限まで高める必要があります。また、特に業務システムであるiChainBaseは開発規模が大きいため、コンテナ管理も最適化する必要があり、Kubernetesを導入しました。やはりサービスの立ち上げ段階からKubernetesに精通していたエンジニアがいたことは幸運だったと思いますし、そのような環境で仕事ができることは恵まれていると感じています。

Kubernetesのメリット

Kubernetesにより、下記が実現できます。

  • 複数コンテナの共存
    :1つの管理単位に複数のコンテナを組み合わせることでき、複雑な機能を持つアプリケーションを簡単に構築できます。
  • オートスケール
    :負荷に合わせてコンテナを自動的に増減できるので、サーバーダウンを回避するとともに、ランニングコストを低減できます。
  • セルフヒーリング :障害発生時に自動的に復旧を試みる機能により、ダウンタイムを最小化できます。
  • ローリングアップデート :ダウンタイムなしでデプロイを実行できます。

SaaSサービスをやる上で、ダウンタイムを極小化することでは重要な要素です。また、サービスの立ち上がり段階では開発とアップデートが頻繁にあるでしょうし、ユーザー数の増加が予測できないのでサーバリソースの管理とコスト管理を手動で行うのは困難でしょう。逆にいうと、この辺りの必要性はサービス特性に依存する部分なので、必ずしも必須ではないこともあるでしょうね。

パイプライン構成

iChainではargoCDを利用してパイプラインを構築しています。構図としてはGitLab-argoCD-Kubernetesになります。
argoCDはGitOpsを実現するツールですが、要はgitを起点としてコードの変更を、アプリケーションとインフラの両方への適用(デリバリー)を自動化するものです。コードの変更は日に何度も行うので、デリバリーを自動化することで、単純に開発スピードの向上、省力化、ミスの削減が期待できます。業務の自動化はiChainでは徹底するようにいわれているので、極力マンパワーが介在しない業務環境の構築を心がけています。
CI/CDも導入していますが、これは既存サービスを使わず、GitLabの機能を利用しながら自社で構築しています。構築したこともですが、自分たちで作ろうと決めたことがすごいですよね。。

インフラではGitLab-Terraform-AWSのパイプラインもあり、開発スピードをあげています。このあたりの構成や構築についてはまた別の機会に触れていければと思います。

※ iChainでは一緒に働く仲間を募集しています。よかったらHPとかwantedlyとかみて、是非応募ください!