RancherをMicroK8s(Kubernetes 1.17.0)で動かす


毎度、ググっても出てこない小ネタを取り扱っております。
本記事は個人的な見解であり、筆者の所属するいかなる団体にも関係ございません。

スタイルズアドベントカレンダーの23日目です。

Stylez Advent Calendar 2019 - Qiita
https://qiita.com/advent-calendar/2019/stylez

0. RancherをKubernetesで動かしたいけど、1サーバーで完結したいのでMicroK8s上で動かしたかった

章題のとおりでございます。

Rancherと言えば、シングル構成で動かすにはDockerで動かしてKubernetesを別途RKE等で起動してからインポートしたりすることをよくすると思います。
しかし、その場合
1. Rancherを動かすサーバー
2. Kubernetesを動かすサーバー
の最低2台が必要になります。

Dockerを入れたサーバーにKubernetesを入れてRancher入れればいいじゃん?と思いますが、KubernetesとDockerがcontainerdを取り合っちゃったりするので動くのかもしれませんが、私の所では動いた試しがありません。

そこで、どこかのサーバー(今回はAWS EC2)にMicroK8sを入れて、その上にRancherを動かせばよいのではないかと考えました。

1. MicroK8sを入れる

1-1. Ubuntuを動かす

MicroK8sを入れる前にUbuntuを必要とするのですが、AWSであればUbuntu公式のAMIイメージがあるので楽々動かすことができます。
t3aとかのインスタンスで動かしみましょう

aws ec2 run-instances \
  --image-id ami-0f6b4f4104d26f399 \
  --count 1 \
  --instance-type t3a.medium \
  --key-name Test-Key \
  --security-group-ids sg-Test.key \
  --subnet-id subnet-xxxxxxxxxxxxxxx \
  --private-ip-address=10.x.y.z \
  --block-device-mappings 'DeviceName=/dev/sda1,Ebs={DeleteOnTermination=true,VolumeType=gp2,VolumeSize=50}' \
  --tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=MicroK8s},{Key=owner,Value=hogehoge}]' \
  --credit-specification "CpuCredits=standard"

1-2. アップデート

アップデートしておきます。

sudo apt update && sudo apt upgrade

1-3. snapをインストール

SNAPをインストールします。

sudo apt install -y snap

1-4. microk8sをインストール

MicroK8sをインストールしてログインユーザーをMicroK8sのグループに追加します

sudo snap install microk8s --classic
sudo usermod -a -G microk8s <ログインID>

一旦ログインし直す

インストールされて動いているか確認とプラグインを有効にする

microk8s.status
microk8s.enable dns dashboard storage ingress helm

インストールされたKubernetesのバージョンは、v1.17.0
snap infoで確認する

$ snap info microk8s
name:      microk8s
summary:   Kubernetes for workstations and appliances
publisher: Canonical✓
contact:   https://github.com/ubuntu/microk8s
license:   unset
description: |
  MicroK8s is a small, fast, secure, single node Kubernetes that installs on just about any Linux
  box. Use it for offline development, prototyping, testing, or use it on a VM as a small, cheap,
  reliable k8s for CI/CD. It's also a great k8s for appliances - develop your IoT apps for k8s and
  deploy them to MicroK8s on your boxes.
commands:
  - microk8s.add-node
  - microk8s.cilium
  - microk8s.config
  - microk8s.ctr
  - microk8s.disable
  - microk8s.enable
  - microk8s.helm
  - microk8s.inspect
  - microk8s.istioctl
  - microk8s.join
  - microk8s.juju
  - microk8s.kubectl
  - microk8s.leave
  - microk8s.linkerd
  - microk8s.remove-node
  - microk8s.reset
  - microk8s.start
  - microk8s.status
  - microk8s.stop
services:
  microk8s.daemon-apiserver:          simple, enabled, active
  microk8s.daemon-apiserver-kicker:   simple, enabled, active
  microk8s.daemon-cluster-agent:      simple, enabled, active
  microk8s.daemon-containerd:         simple, enabled, active
  microk8s.daemon-controller-manager: simple, enabled, active
  microk8s.daemon-etcd:               simple, enabled, active
  microk8s.daemon-flanneld:           simple, enabled, active
  microk8s.daemon-kubelet:            simple, enabled, active
  microk8s.daemon-proxy:              simple, enabled, active
  microk8s.daemon-scheduler:          simple, enabled, active
snap-id:      EaXqgt1lyCaxKaQCU349mlodBkDCXRcg
tracking:     stable
refresh-date: today at 07:56 UTC
installed:          v1.17.0             (1107) 179MB classic

1-5. kube-apiserverにallow-privilegedを追加

cattle-node-agentがPrivilegeを必要とするので、kube-apiserverに追加して再起動する

sudo sh -c 'echo "--allow-privileged=true" >> /var/snap/microk8s/current/args/kube-apiserver'
sudo systemctl restart snap.microk8s.daemon-apiserver.service

1-6. Helmをセットアップする

RancherをHelmでインストールするので、Helmをセットアップします。

sudo microk8s.kubectl create serviceaccount tiller --namespace kube-system
sudo microk8s.kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
sudo microk8s.helm init --service-account=tiller

1-7. CertManagerをインストールする

sudo microk8s.helm repo add jetstack https://charts.jetstack.io
sudo microk8s.kubectl apply -f https://raw.githubusercontent.com/jetstack/cert-manager/release-0.9/deploy/manifests/00-crds.yaml
sudo microk8s.kubectl create namespace cert-manager
sudo microk8s.kubectl label namespace cert-manager certmanager.k8s.io/disable-validation=true
sudo microk8s.helm install --name cert-manager --namespace cert-manager --version v0.9.1 jetstack/cert-manager

1-8. /etc/hostsに外部参照のホスト名を入れる

sudo vi /etc/hosts
/etc/hosts
127.0.0.1 localhost ecx-x-x-x-x.ap-northeast-1.compute.amazonaws.com

1-9. Rancherをインストールする

RancherをHelmでインストールしますが、--set hostname=は外部から参照できる1-8で指定したホスト名にする

sudo microk8s.helm repo add rancher-latest https://releases.rancher.com/server-charts/latest
sudo microk8s.helm install rancher-latest/rancher --name rancher --namespace cattle-system  --set replicas=1 --set hostname=ecx-x-x-x-x.ap-northeast-1.compute.amazonaws.com

1-10. Rancherインストールが終わるまで待つ

kubectl -n cattle-system rollout status deploy/rancher

2. ブラウザーでRancherにアクセスする

パスワード設定画面が出るはずなので、パスワードをセットする

インストールされたRancherのバージョンは、v2.3.3

3. 参考

5-minute home server with microk8s and Rancher
https://suda.pl/5-minute-home-server-with/

Install Rancher
https://rancher.com/docs/rancher/v2.x/en/installation/ha/helm-rancher/

4. 付録というか備忘

microk8s.kubectlとmicrok8s.helmのaliasを作っておく(やり方をよく忘れるので備忘で書いておく)

sudo snap alias microk8s.kubectl kubectl
sudo snap alias microk8s.helm helm