9
3

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.

StylezAdvent Calendar 2019

Day 23

RancherをMicroK8s(Kubernetes 1.17.0)で動かす

Last updated at Posted at 2019-12-23

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

スタイルズアドベントカレンダーの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にアクセスする

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

image.png

インストールされた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
9
3
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
9
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?