サーバプログラマのオカダです。
現在関わっているプロジェクトでKubernetesを使う事になりそうなので、その辺のところをお話します。
https://www.redhat.com/ja/topics/containers/what-is-kubernetes
「Kubernetesとは、Linuxコンテナの操作を自動化するオープンソース・プラットフォームのことです。」
そして、Linuxコンテナとは、システムの他の部分とは分離された一連のプロセスです。
https://www.redhat.com/ja/topics/containers/whats-a-linux-container
と、あります。訳が分からないですね。
さて、プログラムというのが何か、というと要するにデータを加工するものです。
その考えでいくとプログラムの簡単なモデルというのはこんな感じですね。

しかし、これだけだと中でだけ完結してしまって何の役にも立たないから入出力を付ける訳です。
キーボードなりマウスなり、更にはディスクなりから入力されたデータを、
プログラムを通してディスプレイなりに出力する。
しかし、キーボードやマウスなどは付け替えることができますね?
別の機器に付け替えても問題なく使える、という部分は、簡単に言うと
WindowsなどのOSが受け持っているのです。
そして、複雑なプログラムなんかだと複数のプログラムが組み合わさって動作しているので、こんな感じですね。

では、このプログラムの言うなれば「塊」をまとめて扱えるようにしたらどうなるか?
ここで、Linuxコンテナの話が出てきます。
イメージとしてはこんな感じでしょうか?

この例に出てくる「入出力を管理するプログラム」はつまり、プログラムとOSの間に挟まって管理する事で、自身の上で動いているプログラム全体を管理する訳です。
入出力を握られると、中のプログラムにとっては一つのサーバマシン環境のように見えるので、ホスト側からはこの全体(1つのサーバ環境)自体を一つのプログラムのように扱えます。
つまり、「プログラムを一つ立ち上げるように」サーバを立ち上げる事が出来るようになるのです。
Kubernetesは、以上の技術を応用して、主にサーバプログラムを管理するものとなります。
Kubernetesのカバー範囲が広いので全てを1つの記事で説明する事は困難ですが
例えば、オンラインゲームを運用していると
期間限定イベントの開催などでアクセスが集中するような事があります。
アクセスが集中しても問題ないようにイベント期間中はサーバを増やしたい、
そのような時にKubernetesを使用していれば以下のようなマニフェストを発行します。
--------------------------------------------------------
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 30
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
--------------------------------------------------------
replica: 30という行がありますが、
この行は「同様のサーバを30個建てる」というような意味合いになります。
その上、それぞれのサーバを監視して落ちた場合には
マニフェスト通りに30のサーバが再度立ち上がるように管理してくれるのです。
イベントが終了したら、replica: 3とでも修正して適用すれば
アクセスが無くなったサーバから落としていって3つだけサーバが立ち上がった状態、
つまりイベント期間外である通常の状態に戻してくれます。
このように数字を設定するだけで管理はKubernetesが自動で行ってくるので
容易にサービスを拡縮することができます。
この管理というのは、前述のようなサーバ監視部分であったり、
サーバを複数立ち上げようとした際のポートの管理であったりと実に様々なことが考えられます。
本来であればそういった点は自力でケアする必要がありますが
Kubernetesを導入していればある程度カバーしてくれるので
柔軟で堅牢なサーバ環境を構築できるのです。
以上Kubernetesについて一部紹介しました。
弊社ではまだ検証中のところはありますが既に様々な企業や分野で導入されています。
サーバプログラマを目指している方は知っておいて損することは無いのではないでしょうか。
それでは。