4
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

はじめに

この記事はConoHa Advent Calendar 2019の12日目の記事です。
ConoHaで安価にKubernetesを始めようという内容です。

きっかけ

普段はOpenShiftをオンプレで運用しています。OpenShiftはKubernetesをベースにしていますが、いろいろお膳立てしてくれるためコンテナ基盤としては比較的とっつき易いです。しかし、OpenShiftには独自の作法があるので、たまに素のKubernetesを試したくなる時があります。そんなとき、マネージドなKubernetesではなく、あえてConoHaを選ぶ人も多いと思います。(このはちゃんかわいいという理由で。)

ConoHa VPSの最安プランはメモリが512MBと控えめで、Kubernetesを動かすには不足です。しかし安さにはかえられません。そこでおすすめしたいのが、軽量KubernetesであるK3sです。先月v1.0.0がリリースされたばかりなので、是非この機会にKubernetesデビューしてみましょう。

環境

Ubuntu 18.04の512MBプランで動作確認していますが、他の環境でも大丈夫だと思います。

インストール

K3sのインストールは非常に簡単で、シングルノード構成であればスタートアップスクリプトだけで完結します。以下の内容をコピペしてください。

#!/bin/sh
curl -sL http://get.k3s.io | sh -

あとはsshかコンソールでログインして、

# kubectl get node
NAME             STATUS   ROLES    AGE   VERSION
hostname     Ready    master  1m   v1.16.3-k3s.2

などとすれば良いです。

以上で終わりなのですが、これだけというのもつまらないので証明書の取得を行います。

DNS認証の自動化

Kubernetesではリバースプロキシを使って複数のWebサービスを公開することが多いです。そこで便利なのがLet's Encryptのワイルドカード証明書で、その取得にはDNS認証が必須です。

最近はドメインの取得からDNSの設定までConoHaだけで済むようになっているので、これを利用するのがベストです。K3sではデフォルトのリバースプロキシとしてTraefikを採用していますが、実はConoHa APIと連携したLet's EncryptのDNS認証が可能です。(この辺りの話は@sekaiさんの去年の記事が詳しいです。というかこの方のおかげ。)

これを利用すれば、スタートアップスクリプトで証明書の取得まで済ませることができます。以下が設定例です。メールアドレスやドメイン名、APIの認証情報は適宜変更してください。(事前にConoHaコントロールパネルでドメインを取得して、DNSにドメインを追加しておく必要があります。仮想マシンの作成後、AレコードにIPアドレスを追加するのを忘れないでください。)

#cloud-config
write_files:
- path: /var/lib/rancher/k3s/server/manifests/traefik.yaml
  content: |
    apiVersion: helm.cattle.io/v1
    kind: HelmChart
    metadata:
      name: traefik
      namespace: kube-system
    spec:
      chart: stable/traefik
      valuesContent: |
        rbac:
          enabled: true
        ssl:
          enabled: true
        acme:
          enabled: true
          email: "root@example.com"
          staging: false
          domains:
            enabled: true
            domainsList:
            - main: "*.example.com"
            - sans:
              - "example.com"
          challengeType: dns-01
          dnsProvider:
            name: conoha
            conoha:
              CONOHA_API_USERNAME: ""
              CONOHA_API_PASSWORD: ""
              CONOHA_TENANT_ID: ""
              CONOHA_REGION: ""
runcmd:
- curl -sL http://get.k3s.io | INSTALL_K3S_EXEC="--no-deploy=traefik" sh -

TraefikのHelm Chartの詳細な設定はここを参照してください。

まとめ

K3sクラスタを一発で作成するコマンドラインツールを作るつもりだったのが、スタートアップスクリプトで充分じゃないかと思い直し、今回の内容になりました。コントロールパネルを使った方がこのはちゃんかわいいというメリットもあります。

K3sはMicroK8sと異なり、マルチノード構成での本番運用も見据えたディストリビューションです。試して終わりにせず、今後の運用についても報告していきたいと考えています。

なお、本記事のスクリプトではセキュリティは考慮していないので、必要に応じて設定するようにしてください。

4
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?