Kubernetesの中にLinuxデスクトップ環境を作る

# Kubernetesの中にLinuxデスクトップ環境を作る

せっかくのアドベントカレンダー。ここはちょっと変わったことを試してみようと思い、Linuxデスクトップ環境を動かしてみることにしました。
普段私はWindowsがインストールされたノートパソコンを使って作業をしているのですが、たまにLinux環境が欲しくなることがあります。
そんな時は普段はVMを作ったり、VPSを利用したりするわけですが、ふと「Kubernetesでもできるのでは？」と思い立ちました。

## 調査

思い立ったが吉日です。早速調べてみました。
要はDockerでLinuxデスクトップを構築している事例があれば良いわけです。
そういった試みは案外すぐに見つかりました。

https://github.com/fcwu/docker-ubuntu-vnc-desktop
これがまさにDockerを使ってLinuxのデスクトップ環境を作るというプロジェクトでした。

しかも都合が良いことに、このコンテナイメージはHTML5で動くVNCサーバを同梱しており、Webブラウザを通じてDockerで作成したLinuxデスクトップ環境にアクセスができるのです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100375/8be5d15d-cf0b-b9fe-9d46-acd41c9e8731.png)


## Kubernetesで動かしてみる

Dockerで動いているのだから、Kubernetesでも簡単に動くだろう。ということでマニフェストをちょちょいと書きます。

```yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    run: desktop
  name: desktop
spec:
  replicas: 1
  selector:
    matchLabels:
      run: desktop
  template:
    metadata:
      labels:
        run: desktop
    spec:
      containers:
      - image: dorowu/ubuntu-desktop-lxde-vnc
        name: desktop
```

で、デプロイして、とりあえずkubectl port-forwardで接続してみます。

```bash
$ kubectl get pods
NAME                       READY   STATUS    RESTARTS   AGE
desktop-646999d485-nrnbf   1/1     Running   0          67m

$ kubectl port-forward desktop-646999d485-nrnbf 80
```

で、`http://localhost` にブラウザでアクセスします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100375/229ea9a9-bf69-9e9e-2bef-48e1a8a8f448.png)

特に問題なく動作しました。
もっと動作が遅いかな、と思っていたのですが、思いのほか快適に動作しています。


## 活用法を考えてみる
さて、ここまで勢いで来てしまいましたが、これ役に立つんでしょうか？
ちょっと無理やり活用方法を考えてみることにします。

**Kubernetes内のデバッグ**
このLinuxデスクトップ環境はKubernetesの上で動いているので、ここから疎通テストなどをすることで、Podのテストなどができます。
まぁGUIである必要はないのですが、もしかしたら初心者にはとっつきやすいかもしれません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100375/bd971b27-2365-260f-f552-f521163f2be7.png)


当然ポートフォワードせずにブラウザからwebサービスの動作を確認することも可能です。(ブラウザ内ブラウザ！)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100375/ed4edd9b-3e4b-5cd3-097a-1a3b98243799.png)

**手軽なLinux環境**

私のように手元のマシンがWindowsやmacOSの場合は、手軽にLinux環境を試すという目的でも利用できそうです。
特にGUIのアプリケーションを試してみたい場合は、VMよりも手軽に利用でき、さらにほかに人にも同じ環境を試してもらうことが簡単にできます。

**プレゼン資料の共有**
この方法で作ったLinux環境はWebブラウザからアクセスすることができます。
しかも複数人でアクセスしても同じデスクトップを見ることができるので、人に作業を見せるということができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100375/47f0375e-94f4-0723-196a-353638e55cb3.png)
↑2窓で内容が同期している図です。

これを応用すると発表中のプレゼン資料をスマートフォンなど手元で見てもらうこともできそうです。
ただし、この場合誰もがGUIを操作できてしまうので、いたずらされるかもしれないというのがネックですが・・（VNCクライアントの設定を頑張ればView Onlyというのはできそうでした）

**Linuxアプリケーション as a Service**

今SaaSといえば当然Webアプリケーションを指しますが、この方法を使うとLinuxアプリケーションを提供することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100375/34cd38a2-9cf0-88f7-0d3c-9c9cbbca3c9a.png)
↑ Blenderも動いてびっくりした図

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100375/c0f234c8-6adf-dd17-d049-a7990f9b6bee.png)
↑ ゲームも動くよ！（速度に問題あり・・）

Google SpreadsheetのようにLibreOffice Calcを利用することができるわけです。
なんだか一周回って帰ってきた感がありますが、選択肢が増えることは良いことです。そういえばWebOSなんてものもありましたね。


## まとめ
活用法を無理やり考えてみましたが、まぁ正直なところ微妙なものしかありませんでした。
しかし、こういう知識の積み重ねが、何かのタイミングで役に立つ！といったこともあるかもしれません。
アドベントカレンダーは強制的にトピックを考えて調査をする良い機会なので、こういう「誰得？」的な調査を頑張ってみるのもたまには面白いものだな、と思いました。