毎度、ググっても出てこない小ネタを取り扱っております。
本記事は個人的な見解であり、筆者の所属するいかなる団体にも関係ございません。
スタイルズアドベントカレンダーの23日目です。
Stylez Advent Calendar 2019 - Qiita
https://qiita.com/advent-calendar/2019/stylez
0. RancherをKubernetesで動かしたいけど、1サーバーで完結したいのでMicroK8s上で動かしたかった
章題のとおりでございます。
Rancherと言えば、シングル構成で動かすにはDockerで動かしてKubernetesを別途RKE等で起動してからインポートしたりすることをよくすると思います。
しかし、その場合
- Rancherを動かすサーバー
- 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
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