はじめに
WebでKubernetes関連記事を読み漁っても今ひとつピンとこなかったので、実際にコマンド叩きまくって実践してみるのが早いと判断しました。
私自身Kubernetes/Helmとも初心者であるため、間違いなどあればご指摘いただけると幸いです。
事前準備
Azure/GCPなどのクラウドを使った方がKubernetesクラスタの構築はラクらしいのですが、操作ミスにより無駄な課金が発生するのも嫌だったので、Windows PCのローカル環境にmicrok8sを使って環境を構築しました。
ちなみにローカル環境はminikubeを使って構築することが多いと思うのですが、あえてmicrok8sを理由は以下でした。
- dockerやkubectlも合わせてインストールしてくれる
-
microk8s.reset
コマンドでいつでもKubernetesクラスタをリセットできる
つまり、面倒くさがり屋+初心者の私に優しいと判断したからです(笑)
動作環境
Windows10 Pro: version 1903 (OSビルド 18885.1001)
Vagrant : version 2.2.4
VirtualBox : version 6.0.6
Network : 非Proxy環境
構築手順(microk8s編)
このあたりに記事を参考にさせていただきました。
- Vagrant+VirtualBoxでUbuntu環境構築 - Qiita
- 第560回 microk8sでお手軽Kubernetes環境構築:Ubuntu Weekly Recipe|gihyo.jp … 技術評論社
ひとことで言えば、Windows上にVagrantとVirtualBoxをインストールし、Ubuntu18.04が動作する仮想マシンを作成。
その後Ubuntuの仮想マシンにSSH接続し、microk8sをデプロイしてKubernetesクラスタを構築するというものです。
ちなみにVagrantで構築する仮想マシンはIPアドレスを固定(192.168.33.10)、メモリを2GBに増設しておきます。
また本来microk8sをインストールした環境ではmicrok8s.kubectlやmicrok8s.dockerなど、microk8sプレフィックスを付与してコマンド実行をするのですが、本記事ではキータイプ数を節約するため、以下のコマンドを実行してプレフィックスを付与せずとも実行できる想定で記載しています。
プレフィックスの付与は本物のkubectlやdockerと共存するために分かれているのだと思いますが、どうせ実験用の仮想マシンだし、分離する必然性はないので迷わず以下を実行しちゃいます。
$ sudo snap alias microk8s.kubectl kubectl
$ sudo snap alias microk8s.docker docker
環境構築(helm編)
Ubuntu仮想マシンを作成し、microk8sを構築するまではそのものズバリの記事があったのですが、microk8sに対してhelmを動かすための適当な記事が見当たらなかったので、その部分だけ詳しめに記載します。
Ubuntu上にhelmをインストールする方法は公式サイトの方法 でインストールしてください。
その後helm init
を起動するのですが、その前にmicrok8sで構築したKubernetesクラスタにtillerをデプロイするため、環境変数KUBECONFIGを設定してください。
# microk8sのclient.configファイルを環境変数KUBECONFIGに設定
$ export KUBECONFIG=/snap/microk8s/current/client.config
# helmの初期化を実行
$ helm init
Creating /home/vagrant/.helm
Creating /home/vagrant/.helm/repository
Creating /home/vagrant/.helm/repository/cache
Creating /home/vagrant/.helm/repository/local
Creating /home/vagrant/.helm/plugins
Creating /home/vagrant/.helm/starters
Creating /home/vagrant/.helm/cache/archive
Creating /home/vagrant/.helm/repository/repositories.yaml
Adding stable repo with URL: https://kubernetes-charts.storage.googleapis.com
Adding local repo with URL: http://127.0.0.1:8879/charts
$HELM_HOME has been configured at /home/vagrant/.helm.
Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.
Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.
To prevent this, run `helm init` with the --tiller-tls-verify flag.
For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation
Happy Helming!
helm init
によってhelmの初期化が実行されます。この初期化動作にはmicrok8s上にtillerをデプロイするプロセスが含まれます。
このtillerというのはhelmと連携して動作するエージェントです。KubernetesクラスタにPodとして配備され、helmコマンドからの指示を受けてデプロイ作業を実行します(ここは想像)。
その後helm version
を実行し、ClientとServerの両方にバージョンが正しく表示されればhelmは正しく初期化できています。
ネットワーク速度によってはtillerがインストールされるまでに時間がかかることがあります。
その場合はしばらく待ってからhelm version
を実行してください。
# helmのバージョンチェック
$ helm version
Client: &version.Version{SemVer:"v2.13.1", GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.13.1", GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4", GitTreeState:"clean"}
tillerのPodが正しくデプロイされているかはkubectlからも確認ができます。
helm version
のServerが正しく表示されない場合、以下の出力でREADYが0/1とかになって止まっているので手順やネットワーク環境などをチェックしてください。
例えばインターネットアクセスにプロキシ経由のアクセスが必要な場合、適切にプロキシを設定してからでないとtillerのデプロイに失敗します(仕事場のPCがそれだった)。
$ kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system tiller-deploy-664d6bdc7b-bvjrb 1/1 Running 0 26m
ここまでできれば、すべての環境が整っているはずです。
最後に各ツールのバージョン確認結果を載せておきます。
$ 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.config
- microk8s.disable
- microk8s.docker
- microk8s.enable
- microk8s.inspect
- microk8s.istioctl
- microk8s.kubectl
- microk8s.reset
- microk8s.start
- microk8s.status
- microk8s.stop
services:
microk8s.daemon-apiserver: simple, enabled, active
microk8s.daemon-apiserver-kicker: simple, enabled, active
microk8s.daemon-containerd: simple, enabled, active
microk8s.daemon-controller-manager: simple, enabled, active
microk8s.daemon-docker: simple, enabled, active
microk8s.daemon-etcd: simple, enabled, active
microk8s.daemon-kubelet: simple, enabled, active
microk8s.daemon-proxy: simple, enabled, active
microk8s.daemon-scheduler: simple, enabled, active
snap-id: xxxxxxxxxxxxxxxxxxxxxx
tracking: 1.13/stable
refresh-date: 2 days ago, at 18:03 UTC
channels:
stable: v1.14.1 2019-04-18 (522) 214MB classic
candidate: v1.14.1 2019-04-15 (522) 214MB classic
beta: v1.14.1 2019-04-15 (522) 214MB classic
edge: v1.14.1 2019-04-24 (549) 217MB classic
1.14/stable: v1.14.1 2019-04-18 (521) 214MB classic
1.14/candidate: v1.14.1 2019-04-15 (521) 214MB classic
1.14/beta: v1.14.1 2019-04-15 (521) 214MB classic
1.14/edge: v1.14.1 2019-04-24 (550) 217MB classic
1.13/stable: v1.13.5 2019-04-22 (526) 237MB classic
1.13/candidate: v1.13.5 2019-04-19 (526) 237MB classic
1.13/beta: v1.13.5 2019-04-19 (526) 237MB classic
1.13/edge: v1.13.5 2019-04-19 (526) 237MB classic
1.12/stable: v1.12.7 2019-04-24 (534) 259MB classic
1.12/candidate: v1.12.7 2019-04-19 (534) 259MB classic
1.12/beta: v1.12.7 2019-04-19 (534) 259MB classic
1.12/edge: v1.12.8 2019-04-24 (547) 259MB classic
1.11/stable: v1.11.9 2019-04-23 (545) 258MB classic
1.11/candidate: v1.11.9 2019-04-22 (545) 258MB classic
1.11/beta: v1.11.9 2019-04-22 (545) 258MB classic
1.11/edge: v1.11.9 2019-04-20 (545) 258MB classic
1.10/stable: v1.10.13 2019-04-22 (546) 222MB classic
1.10/candidate: v1.10.13 2019-04-22 (546) 222MB classic
1.10/beta: v1.10.13 2019-04-22 (546) 222MB classic
1.10/edge: v1.10.13 2019-04-22 (546) 222MB classic
installed: v1.13.5 (526) 237MB classic
$ docker version
Client:
Version: 18.09.2
API version: 1.39
Go version: go1.10.4
Git commit: 6247962
Built: Tue Feb 26 23:56:24 2019
OS/Arch: linux/amd64
Experimental: false
Server:
Engine:
Version: 18.09.2
API version: 1.39 (minimum version 1.12)
Go version: go1.10.4
Git commit: 6247962
Built: Tue Feb 12 22:47:29 2019
OS/Arch: linux/amd64
Experimental: false
$ kubectl version
Client Version: version.Info{Major:"1", Minor:"13", GitVersion:"v1.13.5", GitCommit:"2166946f41b36dea2c4626f90a77706f426cdea2", GitTreeState:"clean", BuildDate:"2019-03-25T15:26:52Z", GoVersion:"go1.11.5", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"13", GitVersion:"v1.13.5", GitCommit:"2166946f41b36dea2c4626f90a77706f426cdea2", GitTreeState:"clean", BuildDate:"2019-03-25T15:19:22Z", GoVersion:"go1.11.5", Compiler:"gc", Platform:"linux/amd64"}
$ helm version
Client: &version.Version{SemVer:"v2.13.1", GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.13.1", GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4", GitTreeState:"clean"}
最後に
次回はhelmを使って何かデプロイする手順について記事を書きたいと思いますしたが追加設定の記事を書きました
参考記事
microk8s関連のコマンドに関しては、以下の記事を参考にさせていただきました。