前提条件

概要

特筆して書くことはありませんが、これでmicrok8s関連が使用可能になります。

手順

https://microk8s.io/docs/getting-started を参考にインストールを進めます。

$ sudo snap install microk8s --classic --channel=1.32
$ set myuser (id -un)
$ sudo usermod -a -G microk8s $myuser
$ microk8s start
$ microk8s status
microk8s is running
high-availability: no
  datastore master nodes: 127.0.0.1:19001
  datastore standby nodes: none
addons:
  enabled:
    ha-cluster           # (core) Configure high availability on the current node
    helm                 # (core) Helm - the package manager for Kubernetes
    helm3                # (core) Helm 3 - the package manager for Kubernetes
  disabled:
    cert-manager         # (core) Cloud native certificate management
    cis-hardening        # (core) Apply CIS K8s hardening
    community            # (core) The community addons repository
    dashboard            # (core) The Kubernetes dashboard
    dns                  # (core) CoreDNS
    gpu                  # (core) Alias to nvidia add-on
    ingress              # (core) Ingress controller for external access
    host-access          # (core) Allow Pods connecting to Host services smoothly
    hostpath-storage     # (core) Storage class; allocates storage from host directory
    kube-ovn             # (core) An advanced network fabric for Kubernetes
    mayastor             # (core) OpenEBS MayaStor
    metallb              # (core) Loadbalancer for your Kubernetes cluster
    metrics-server       # (core) K8s Metrics Server for API access to service metrics
    minio                # (core) MinIO object storage
    nvidia               # (core) NVIDIA hardware (GPU and network) support
    observability        # (core) A lightweight observability stack for logs, traces and metrics
    prometheus           # (core) Prometheus operator for monitoring and logging
    registry             # (core) Private image registry exposed on localhost:32000
    rbac                 # (core) Role-Based Access Control for authorisation
    rook-ceph            # (core) Distributed Ceph storage using Rook
    storage              # (core) Alias to hostpath-storage add-on, deprecated

$ set IPADDR (ip a show wlp3s0 | grep inet | grep -v inet6 | head -1 | awk '{print $2}' | cut -f1 -d/)
$ sudo sed -i.bak "s/#MOREIPS/IP.3 = "$IPADDR"\\nDNS.6 = localhost\\n/g" /var/snap/microk8s/current/certs/csr.conf.template
$ echo "--advertise-address "$IPADDR"" | sudo tee -a /var/snap/microk8s/current/args/kube-apiserver
$ echo "--node-ip $IPADDR" | sudo tee -a /var/snap/microk8s/current/args/kubelet
# $ sudo vim /var/snap/microk8s/current/certs/csr.conf.template で CN = 192.168.8.101 に変更している
# $ sudo vim /var/snap/microk8s/current/args/kubelet で --bind-adderssがあれば削除
$ sudo microk8s refresh-certs --cert ca.crt
$ sudo snap restart microk8s
$ microk8s kubectl config view --raw > .kube/config
$ microk8s stop
$ microk8s start
$ set N 1
$ set base (echo $IPADDR | awk -F '.' '{print $1 "." $2 "." $3}')
$ set start (math $N "*" 10 "+" 210)
$ set end   (math $N "*" 10 "+" 219)
$ microk8s enable rbac
$ microk8s enable dns
$ microk8s enable hostpath-storage
$ microk8s enable dashboard
$ microk8s enable metallb:$base.$start-$base.$end
$ microk8s status
microk8s is running
high-availability: no
  datastore master nodes: 127.0.0.1:19001
  datastore standby nodes: none
addons:
  enabled:
    dashboard            # (core) The Kubernetes dashboard
    dns                  # (core) CoreDNS
    ha-cluster           # (core) Configure high availability on the current node
    helm                 # (core) Helm - the package manager for Kubernetes
    helm3                # (core) Helm 3 - the package manager for Kubernetes
    host-access          # (core) Allow Pods connecting to Host services smoothly
    hostpath-storage     # (core) Storage class; allocates storage from host directory
    ingress              # (core) Ingress controller for external access
    metallb              # (core) Loadbalancer for your Kubernetes cluster
    rbac                 # (core) Role-Based Access Control for authorisation
    storage              # (core) Alias to hostpath-storage add-on, deprecated
  disabled:
    cert-manager         # (core) Cloud native certificate management
    cis-hardening        # (core) Apply CIS K8s hardening
    community            # (core) The community addons repository
    gpu                  # (core) Alias to nvidia add-on
    kube-ovn             # (core) An advanced network fabric for Kubernetes
    mayastor             # (core) OpenEBS MayaStor
    metrics-server       # (core) K8s Metrics Server for API access to service metrics
    minio                # (core) MinIO object storage
    nvidia               # (core) NVIDIA hardware (GPU and network) support
    observability        # (core) A lightweight observability stack for logs, traces and metrics
    prometheus           # (core) Prometheus operator for monitoring and logging
    registry             # (core) Private image registry exposed on localhost:32000
    rook-ceph            # (core) Distributed Ceph storage using Rook

これで起動完了です。他に必要なAddOnがあれば同様にOnにしていけばOKです。このmicrok8sを使用した場合、kubectl単独で使うことができなくなります。(cniとの通信がエラーになるため)

microk8sを停止する

以下の方法でmicrok8sを停止することが可能です。

$ microk8s stop

microk8sのリセット

以下の方法でmicrok8sをリセットすることが可能です。

$ microk8s reset

リセット後は microk8s start からやり直せばOKです。

microk8sのディレクトリ

microk8sでは以下のディレクトリが使用されてるようで、永続化しているボリュームもこの中に作成されます。また、sudoをつけて起動している場合は内部ディレクトリの権限がroot:rootとなっている場合があるようなので、適宜 chown -R root:microk8s を付与すると良いです。