Kubernetesの自宅環境へのインストールは下記記事のように何かと面倒だったのですが
クラウド環境の勉強と開発環境のセットアップを兼ねてKubernetesをインストール&セットアップします。 dockerをコンテナに使った情報ばかり出回ってますが、この記事では次世代を担うと思われる(個人的に)CRI-Oをコンテナ:Kubernetes + CRI-O インストール
Ubuntuがmicrok8sというパッケージを作ってさらにawsがそれに乗っかってeks-distroなんてものを作ったりして、簡単に環境を作成できるようになりました(そのかわりに、いろいろな部分が決め打ちの構成になっています。)
minikubeは使ったこと無いですが、きっとそれより簡単で最新です。使ってみましょう!
基本的な情報は以下のサイトに丁寧に書かれています。
web Install a local Kubernetes with MicroK8s Ubuntu
じゃぁ、この記事の存在意義は?笑
用意する環境
microk8sはlinuxマシン1台あればインストールできます。
今回は2台用意して、片方をworkerノードとして登録して使おうと思います。
インストール
snap
コマンドでインストールしていきます。
worker1:~$ sudo snap install microk8s --classic --channel=latest/stable
microk8s v1.20.1 from Canonical✓ installed
簡単すぎる
お前にはちょうどいいよ笑
さらに現在のユーザーで操作できるようにgroupに追加しておきます。
これを行っておかないと権限が無いというエラーがでて面倒です。
エラーメッセージ例(heisakuというのが僕のユーザ名):
Insufficient permissions to access MicroK8s.
You can either try again with sudo or add the user heisaku to the 'microk8s' group:
グループへの追加は以下のコマンドです。
worker1:~$ sudo usermod -a -G microk8s heisaku
worker1:~$ sudo chown -f -R heisaku ~/.kube
設定後再ログインして有効化してください。
複数ノード(マスター+Worker)構成にする時は、ここまでの作業をworker側でも行っておきます。
ついでにアドオン(add-on)機能も用意されているのでいくつか入れましょう。
worker1:~$ microk8s enable dns dashboard storage registry
add-onの種類はたくさんあります。以下のコマンドで現在使用しているadd-on、使用していないadd-onのリストをみることができます。
worker1:~$ microk8s status
microk8s is running
:
:
addons:
enabled:
dashboard # The Kubernetes dashboard
dns # CoreDNS
ha-cluster # Configure high availability on the current node
metrics-server # K8s Metrics Server for API access to service metrics
registry # Private image registry exposed on localhost:32000
storage # Storage class; allocates storage from host directory
disabled:
ambassador # Ambassador API Gateway and Ingress
cilium # SDN, fast with full network policy
fluentd # Elasticsearch-Fluentd-Kibana logging and monitoring
gpu # Automatic enablement of Nvidia CUDA
helm # Helm 2 - the package manager for Kubernetes
helm3 # Helm 3 - Kubernetes package manager
host-access # Allow Pods connecting to Host services smoothly
ingress # Ingress controller for external access
istio # Core Istio service mesh services
jaeger # Kubernetes Jaeger operator with its simple config
keda # Kubernetes-based Event Driven Autoscaling
knative # The Knative framework on Kubernetes.
kubeflow # Kubeflow for easy ML deployments
linkerd # Linkerd is a service mesh for Kubernetes and other frameworks
metallb # Loadbalancer for your Kubernetes cluster
multus # Multus CNI enables attaching multiple network interfaces to pods
portainer # Portainer UI for your Kubernetes cluster
prometheus # Prometheus operator for monitoring and logging
rbac # Role-Based Access Control for authorisation
traefik # traefik Ingress controller for external access
動作確認
本当に動いているか確認しましょう。
microk8sではkubectlの前にmicrok8sと打たないといけないので少々面倒です。
worker1:~$ microk8s kubectl get nodes
NAME STATUS ROLES AGE VERSION
worker1 Ready <none> 11m v1.20.1-34+e7db93d188d0d1
そこで、.bash_aliases
にmicrok8sと入力しなくて良いように設定しておきます。
#.bash_alases
alias kubectl='microk8s kubectl'
再ログインして反映させます。
heisaku@worker1:~$ kubectl get all -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system pod/calico-kube-controllers-847c8c99d-w9w27 1/1 Running 0 17m
kube-system pod/metrics-server-8bbfb4bdb-5kk6t 1/1 Running 0 7m43s
kube-system pod/coredns-86f78bb79c-sqgrn 1/1 Running 0 8m1s
:
:
worker node追加
worker1と同様にworker2にもmicrok8sをインストールします。(addonは入れませんでした)
worker2:~$ sudo snap install microk8s --classic --channel=latest/stable
microk8s v1.20.1 from Canonical✓ installed
worker2:~$ sudo usermod -a -G microk8s heisaku
worker2:~$ sudo chown -f -R heisaku ~/.kube
worker1(マスター)でadd-nodeコマンドで追加のためのインストラクションを表示させます。
worker1:~$ microk8s add-node
From the node you wish to join to this cluster, run the following:
microk8s join 192.168.0.xx:25000/76b492db3f3......
:
worker2側で、表示されたコマンドを実行してjoinします。
worker2:~$ microk8s join 192.168.0.xx:25000/76b492db3f3......
Contacting cluster at 192.168.0.xx
Waiting for this node to finish joining the cluster. ..
worker1から見えるようになったか確認しましょう。
heisaku@worker1:~$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
worker1 Ready <none> 4h v1.20.1-34+e7db93d188d0d1
worker2 Ready <none> 50s v1.20.1-34+e7db93d188d0d1
できました!
まとめ
たったこれだけでkubernetes環境が手に入ってしまいます。簡単ですね。
インストールに時間を取られるより、開発に時間をかけたいですからこういうのは大歓迎ですね。
enjoy!