はじめに
この記事は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と異なり、マルチノード構成での本番運用も見据えたディストリビューションです。試して終わりにせず、今後の運用についても報告していきたいと考えています。
なお、本記事のスクリプトではセキュリティは考慮していないので、必要に応じて設定するようにしてください。