お金をかけずにサーバーの勉強をしよう

MicroK8sでKubernetesのお勉強

2024年7月28日

メニューへ戻る

折角 Ubuntuつかってんだから MicroK8sでお手軽に Kubernetesしようぜ!

ここを読むような皆さんであれば、Kubernetesをご存知のことと思います。

Dockerなどのコンテナ環境のオーケストレーションツールと言えば良いのでしょうか、複数のコンテナで構成するサービスを提供する場合に威力を発揮します。

Kubernetesの本家サイトはこちら。
Kubernetes

現在はパブリッククラウドが Kubernetesをホスティングしたサービスを提供していますが、これが世に出た頃はこんなに早く出回るとは思いもしませんでした。

そのせいでクラウドに特化したサービスと勘違いしている人もいるかも知れませんが、もともとの出自はクラウドではありませんし、今でもオンプレ環境にちゃんと構築することができます。

では早速 Kubernetes環境を作ってみましょ〜

と軽く行きたい所ですが、ちゃんと作ろうとすると結構骨なのです。

Kubernetesは複数のノードにコンテナを分散配置して、サービスとしての冗長性確保や負荷分散をするのが得意なツールなのです。

ですので Kuberneteならではの環境を作るとなるとノードが最低 3つ必要になります。

お勉強のためだからチョロい環境で良いとは言っても、仮想環境ですと [ホストOS + ゲストOS x3] となり、メモリが 8GBのチョイ古ノートPCなどでは苦しい。

今回は Kubernetesらしい冗長性などは無視して、環境の構築とコンテナ配備の手順程度に限定しておきます。

素の Kubernetesを作るのは大変良い勉強になるのですが、せっかく Ubuntuを使っているので、Canonical謹製の MicroK8sを使おうと思います。

MicroK8sのサイトはこちら。
(K8sは Kubernetesのことです。長いから略されてしまっています。)
The lightweight Kubernetes

MicroK8sは Ubuntuを制作している Canonicalが作った Kubernetes環境です。
元々は Kubernetesの簡易版という位置付けでスタートしたものですが、いつの間にやら Production Readyというレベルにまで昇華され、今ではその使い勝手の良さからオンプレ界隈では人気を博しているようです。

早速インストールしたいところですが、上にも書いた通りで、ある程度のメモリがあった方が良いです。

このネタを書くために、一度は 2GBのメモリを持つ仮想マシンにインストールしたんですが、反応が悪くて使い物にならなそうでしたので、4GBの仮想マシンでやり直しています。


1.環境

MicroK8sは Canonicalのブツですので、OSは Ubuntu Serverにしますが、snapパッケージで配布されていますので、他のディストリでも問題なく動くはず…です。

2024年7月28日での最新バージョンです。

Ubuntu Server 24.04のインストールについては「Ubuntu 24.04 Server インストール」に書いていまして、これができた所からのスタートになります。


2.インストール

インストール方法は以下にありますので、これに沿ってやっていきます。
Install MicroK8s

では、インストールをば。

subro@UbuntuServer2404-1:~$ sudo snap install microk8s --classic
microk8s (1.30/stable) v1.30.1 from Canonical✓ installed

インストールできました。

それにしても Kubernetes環境の構築としては驚異的な簡単さです。
昔「あ〜でもないこ〜でもない」と苦心して環境構築してた頃からすると信じ難い…。

MicroK8sの状態を確認します。
microk8sという独自コマンドを使うんですね。

subro@UbuntuServer2404-1:~$ sudo microk8s status --wait-ready
microk8s is running
high-availability: no
  datastore master nodes: 127.0.0.1:19001
  datastore standby nodes: none
addons:
  enabled:
    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
  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
    gpu                  # (core) Alias to nvidia add-on
    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
    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
    rbac                 # (core) Role-Based Access Control for authorisation
    registry             # (core) Private image registry exposed on localhost:32000
    rook-ceph            # (core) Distributed Ceph storage using Rook
    storage              # (core) Alias to hostpath-storage add-on, deprecated

ここに並んでいるサービスは、よく使われるサービスを MicroK8sがデフォルトインストールの状態で持って持っているのでしょう。
[ha-cluster] が有効になっていますが、ここでは 1ノードでやっているので使われません。

この状態でMicroK8sに関係すると思われるプロセスはこんな感じです。

subro@UbuntuServer2404-1:~$ ps -ef | grep microk8s
root        2957       1  6 08:35 ?        00:00:26 /snap/microk8s/6876/bin/containerd --config /var/snap/microk8s/6876/args/containerd.toml --root /var/snap/microk8s/common/var/lib/containerd --state /var/snap/microk8s/common/run/containerd --address /var/snap/microk8s/common/run/containerd.sock
root        3176       1  0 08:35 ?        00:00:00 bash /snap/microk8s/6876/run-cluster-agent-with-args
root        3183       1  0 08:35 ?        00:00:00 bash /snap/microk8s/6876/apiservice-kicker
root        3196       1  4 08:35 ?        00:00:17 /snap/microk8s/6876/bin/k8s-dqlite --storage-dir=/var/snap/microk8s/6876/var/kubernetes/backend/ --listen=unix:///var/snap/microk8s/6876/var/kubernetes/backend/kine.sock:12379
root        3229    3176  0 08:35 ?        00:00:00 /snap/microk8s/6876/bin/cluster-agent cluster-agent --bind 0.0.0.0:25000 --keyfile /var/snap/microk8s/6876/certs/server.key --certfile /var/snap/microk8s/6876/certs/server.crt --timeout 240
root        3237       1 12 08:35 ?        00:00:49 /snap/microk8s/6876/kubelite --scheduler-args-file=/var/snap/microk8s/6876/args/kube-scheduler --controller-manager-args-file=/var/snap/microk8s/6876/args/kube-controller-manager --proxy-args-file=/var/snap/microk8s/6876/args/kube-proxy --kubelet-args-file=/var/snap/microk8s/6876/args/kubelet --apiserver-args-file=/var/snap/microk8s/6876/args/kube-apiserver --kubeconfig-file=/var/snap/microk8s/6876/credentials/client.config --start-control-plane=true
root        4495       1  0 08:35 ?        00:00:01 /snap/microk8s/6876/bin/containerd-shim-runc-v2 -namespace k8s.io -id 3de72a4278a05f4483ce554f282ed9855ea6b29f4c06db7a5b1001629fb693a5 -address /var/snap/microk8s/common/run/containerd.sock
root        5964       1  0 08:36 ?        00:00:00 /snap/microk8s/6876/bin/containerd-shim-runc-v2 -namespace k8s.io -id 15965ef4be3328f96b08646d65ed612b4babe60d5cdcb90e56bb0b5bd7225d60 -address /var/snap/microk8s/common/run/containerd.sock
root        6122       1  0 08:36 ?        00:00:00 /snap/microk8s/6876/bin/containerd-shim-runc-v2 -namespace k8s.io -id 0fa87c8a194124227ac9828a69e90d8491d414c1aa7ce1a174466ef65af12456 -address /var/snap/microk8s/common/run/containerd.sock
subro      14810    1264  0 08:41 pts/0    00:00:00 grep --color=auto microk8s

[containerd] という常駐プロセスが動いていまして、これがコンテナのプログラムです。

contaierdについては株式会社デージーネットさんのサイトの説明が一番わかりやすかったので勉強させてもらいました。
containerdとは

手順に沿って進めますと、次は dashboard・dns・registry・istio を有効化するようです。

subro@UbuntuServer2404-1:~$ sudo microk8s enable dashboard dns registry istio
Infer repository core for addon dashboard
Enabling Kubernetes Dashboard
Infer repository core for addon metrics-server
Enabling Metrics-Server
serviceaccount/metrics-server created
clusterrole.rbac.authorization.k8s.io/system:aggregated-metrics-reader created
clusterrole.rbac.authorization.k8s.io/system:metrics-server created
rolebinding.rbac.authorization.k8s.io/metrics-server-auth-reader created
clusterrolebinding.rbac.authorization.k8s.io/metrics-server:system:auth-delegator created
clusterrolebinding.rbac.authorization.k8s.io/system:metrics-server created
service/metrics-server created
deployment.apps/metrics-server created
apiservice.apiregistration.k8s.io/v1beta1.metrics.k8s.io created
clusterrolebinding.rbac.authorization.k8s.io/microk8s-admin created
Metrics-Server is enabled
Applying manifest
serviceaccount/kubernetes-dashboard created
service/kubernetes-dashboard created
secret/kubernetes-dashboard-certs created
secret/kubernetes-dashboard-csrf created
secret/kubernetes-dashboard-key-holder created
configmap/kubernetes-dashboard-settings created
role.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrole.rbac.authorization.k8s.io/kubernetes-dashboard created
rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
deployment.apps/kubernetes-dashboard created
service/dashboard-metrics-scraper created
deployment.apps/dashboard-metrics-scraper created
secret/microk8s-dashboard-token created

If RBAC is not enabled access the dashboard using the token retrieved with:

microk8s kubectl describe secret -n kube-system microk8s-dashboard-token

Use this token in the https login UI of the kubernetes-dashboard service.

In an RBAC enabled setup (microk8s enable RBAC) you need to create a user with restricted
permissions as shown in:
https://github.com/kubernetes/dashboard/blob/master/docs/user/access-control/creating-sample-user.md

istio(イスティオ)は上のリストにありませんし、私も初めて見るものです。

本家サイトがこちらです。
Istio

これはコンテナ同士の通信を仲介することで、コンテナからコンテナ同士の通信に関係する面倒を取り去ってやる効果があります。

これによりコンテナ内で動かしているプログラムの開発者は他のコンテナとの連携から開放されるとか、マイクロサービスを多数抱える Kubernetesクラスタではこの観念がないと管理しきれなくなる、などなどいくつかの効果がありますが、初心者がすぐに理解できる説明をしているサイトは見つけられませんでした。

実運用では結構重要な仕組みになりますが、コンテナ同士の通信をフックして透過的に使われているようなので、とりあえずは放っておいて良さげです。

Istioの存在意義というか効能の理解には、少し運用での苦労の経験が必要かも知れません。

手順の続きで MicroK8sの状態を取得します。

素の Kubernetesの管理コマンドである kubectlコマンドが MicroK8sでは microk8sコマンドのサブコマンドになっています。
手順には「『mkctl』としてエイリアスを切って『microk8s kubectl』を呼び出せるようにすると楽よ」と書いてありました。

alias mkctl="microk8s kubectl"

現時点での MicroK8sの状態を取得します。

subro@UbuntuServer2404-1:~$ sudo microk8s kubectl get all --all-namespaces
NAMESPACE     NAME                                             READY   STATUS    RESTARTS   AGE
kube-system   pod/calico-kube-controllers-796fb75cc-mklvd      1/1     Running   0          20m
kube-system   pod/calico-node-pfkxz                            1/1     Running   0          20m
kube-system   pod/coredns-5986966c54-wgvtm                     1/1     Running   0          20m
kube-system   pod/dashboard-metrics-scraper-795895d745-6nwtv   1/1     Running   0          9m55s
kube-system   pod/kubernetes-dashboard-6796797fb5-j87bg        1/1     Running   0          9m55s
kube-system   pod/metrics-server-7cff7889bd-vnfdf              1/1     Running   0          9m56s

NAMESPACE     NAME                                TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                  AGE
default       service/kubernetes                  ClusterIP   10.152.183.1                   443/TCP                  20m
kube-system   service/dashboard-metrics-scraper   ClusterIP   10.152.183.208                 8000/TCP                 9m55s
kube-system   service/kube-dns                    ClusterIP   10.152.183.10                  53/UDP,53/TCP,9153/TCP   20m
kube-system   service/kubernetes-dashboard        ClusterIP   10.152.183.73    <none>        443/TCP                  9m55s
kube-system   service/metrics-server              ClusterIP   10.152.183.179                 443/TCP                  9m56s

NAMESPACE     NAME                         DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
kube-system   daemonset.apps/calico-node   1         1         1       1            1           kubernetes.io/os=linux   20m

NAMESPACE     NAME                                        READY   UP-TO-DATE   AVAILABLE   AGE
kube-system   deployment.apps/calico-kube-controllers     1/1     1            1           20m
kube-system   deployment.apps/coredns                     1/1     1            1           20m
kube-system   deployment.apps/dashboard-metrics-scraper   1/1     1            1           9m55s
kube-system   deployment.apps/kubernetes-dashboard        1/1     1            1           9m55s
kube-system   deployment.apps/metrics-server              1/1     1            1           9m56s

NAMESPACE     NAME                                                   DESIRED   CURRENT   READY   AGE
kube-system   replicaset.apps/calico-kube-controllers-796fb75cc      1         1         1       20m
kube-system   replicaset.apps/coredns-5986966c54                     1         1         1       20m
kube-system   replicaset.apps/dashboard-metrics-scraper-795895d745   1         1         1       9m55s
kube-system   replicaset.apps/kubernetes-dashboard-6796797fb5        1         1         1       9m55s
kube-system   replicaset.apps/metrics-server-7cff7889bd              1         1         1       9m56s

Kubernetesクラスターが持つ内部(仮想)ネットワークには Calico が使われていることが分かりました。

ダッシュボードが動いているのですが、内部ネットワークの [10.152.183.73:443] で待ち受けていています。
Kubernetesの内部ネットワークは外のネットワークとは繋がっていませんので、次の作業でダッシュボードだけは外から見られるようにします。

subro@UbuntuServer2404-1:~$ sudo microk8s dashboard-proxy
Checking if Dashboard is running.
Infer repository core for addon dashboard
Waiting for Dashboard to come up.
Trying to get token from microk8s-dashboard-token
Waiting for secret token (attempt 0)
Dashboard will be available at https://127.0.0.1:10443
Use the following token to login:
eyJhbGciOiJSUzI1NiIs 〜〜〜以下省略〜〜〜 ←これがトークン

[https://127.0.0.1:10443] がダッシュボードの URLと言っていますが、実際は [0.0.0.0:10443] で動いていますので、インストールした Ubuntu Serverとは別のクライアントから WEBアクセスしてみます。
我が家では [https://UbuntuServer2204-1:10443] となります。

Lubuntu 24.04の Firefoxを使いました。

このような画面になりますので、上の画面にあるトークンをコピペして、
サインインを押します。
MicroK8s画面 1

これがダッシュボードの画面です。
MicroK8s画面 2
パブリッククラウドではこのダッシュボードは使われていないと思いますが、オンプレではこれを使うことになるんじゃないでしょうか。


3.確認など

これで一応の Kubernetes環境はできましたので、何かコンテナ(Pod)を作ってみたいのですが、MicroK8sの APIってどうなってんだろ?と思いましたので確認します。

kubectlコマンドの前に microk8s と入れてやれば、素の Kubernetesの時と同じようにできそうです。

subro@UbuntuServer2404-1:~$ sudo microk8s kubectl api-resources
NAME                                SHORTNAMES   APIVERSION                        NAMESPACED   KIND
bindings                                         v1                                true         Binding
componentstatuses                   cs           v1                                false        ComponentStatus
configmaps                          cm           v1                                true         ConfigMap
endpoints                           ep           v1                                true         Endpoints
events                              ev           v1                                true         Event
limitranges                         limits       v1                                true         LimitRange
namespaces                          ns           v1                                false        Namespace
nodes                               no           v1                                false        Node
persistentvolumeclaims              pvc          v1                                true         PersistentVolumeClaim
persistentvolumes                   pv           v1                                false        PersistentVolume
pods                                po           v1                                true         Pod
podtemplates                                     v1                                true         PodTemplate
replicationcontrollers              rc           v1                                true         ReplicationController
resourcequotas                      quota        v1                                true         ResourceQuota
secrets                                          v1                                true         Secret
serviceaccounts                     sa           v1                                true         ServiceAccount
services                            svc          v1                                true         Service
mutatingwebhookconfigurations                    admissionregistration.k8s.io/v1   false        MutatingWebhookConfiguration
validatingadmissionpolicies                      admissionregistration.k8s.io/v1   false        ValidatingAdmissionPolicy
validatingadmissionpolicybindings                admissionregistration.k8s.io/v1   false        ValidatingAdmissionPolicyBinding
validatingwebhookconfigurations                  admissionregistration.k8s.io/v1   false        ValidatingWebhookConfiguration
customresourcedefinitions           crd,crds     apiextensions.k8s.io/v1           false        CustomResourceDefinition
apiservices                                      apiregistration.k8s.io/v1         false        APIService
controllerrevisions                              apps/v1                           true         ControllerRevision
daemonsets                          ds           apps/v1                           true         DaemonSet
deployments                         deploy       apps/v1                           true         Deployment
replicasets                         rs           apps/v1                           true         ReplicaSet
statefulsets                        sts          apps/v1                           true         StatefulSet
selfsubjectreviews                               authentication.k8s.io/v1          false        SelfSubjectReview
tokenreviews                                     authentication.k8s.io/v1          false        TokenReview
localsubjectaccessreviews                        authorization.k8s.io/v1           true         LocalSubjectAccessReview
selfsubjectaccessreviews                         authorization.k8s.io/v1           false        SelfSubjectAccessReview
selfsubjectrulesreviews                          authorization.k8s.io/v1           false        SelfSubjectRulesReview
subjectaccessreviews                             authorization.k8s.io/v1           false        SubjectAccessReview
horizontalpodautoscalers            hpa          autoscaling/v2                    true         HorizontalPodAutoscaler
cronjobs                            cj           batch/v1                          true         CronJob
jobs                                             batch/v1                          true         Job
certificatesigningrequests          csr          certificates.k8s.io/v1            false        CertificateSigningRequest
leases                                           coordination.k8s.io/v1            true         Lease
bgpconfigurations                                crd.projectcalico.org/v1          false        BGPConfiguration
bgppeers                                         crd.projectcalico.org/v1          false        BGPPeer
blockaffinities                                  crd.projectcalico.org/v1          false        BlockAffinity
caliconodestatuses                               crd.projectcalico.org/v1          false        CalicoNodeStatus
clusterinformations                              crd.projectcalico.org/v1          false        ClusterInformation
felixconfigurations                              crd.projectcalico.org/v1          false        FelixConfiguration
globalnetworkpolicies                            crd.projectcalico.org/v1          false        GlobalNetworkPolicy
globalnetworksets                                crd.projectcalico.org/v1          false        GlobalNetworkSet
hostendpoints                                    crd.projectcalico.org/v1          false        HostEndpoint
ipamblocks                                       crd.projectcalico.org/v1          false        IPAMBlock
ipamconfigs                                      crd.projectcalico.org/v1          false        IPAMConfig
ipamhandles                                      crd.projectcalico.org/v1          false        IPAMHandle
ippools                                          crd.projectcalico.org/v1          false        IPPool
ipreservations                                   crd.projectcalico.org/v1          false        IPReservation
kubecontrollersconfigurations                    crd.projectcalico.org/v1          false        KubeControllersConfiguration
networkpolicies                                  crd.projectcalico.org/v1          true         NetworkPolicy
networksets                                      crd.projectcalico.org/v1          true         NetworkSet
endpointslices                                   discovery.k8s.io/v1               true         EndpointSlice
events                              ev           events.k8s.io/v1                  true         Event
flowschemas                                      flowcontrol.apiserver.k8s.io/v1   false        FlowSchema
prioritylevelconfigurations                      flowcontrol.apiserver.k8s.io/v1   false        PriorityLevelConfiguration
nodes                                            metrics.k8s.io/v1beta1            false        NodeMetrics
pods                                             metrics.k8s.io/v1beta1            true         PodMetrics
ingressclasses                                   networking.k8s.io/v1              false        IngressClass
ingresses                           ing          networking.k8s.io/v1              true         Ingress
networkpolicies                     netpol       networking.k8s.io/v1              true         NetworkPolicy
runtimeclasses                                   node.k8s.io/v1                    false        RuntimeClass
poddisruptionbudgets                pdb          policy/v1                         true         PodDisruptionBudget
clusterrolebindings                              rbac.authorization.k8s.io/v1      false        ClusterRoleBinding
clusterroles                                     rbac.authorization.k8s.io/v1      false        ClusterRole
rolebindings                                     rbac.authorization.k8s.io/v1      true         RoleBinding
roles                                            rbac.authorization.k8s.io/v1      true         Role
priorityclasses                     pc           scheduling.k8s.io/v1              false        PriorityClass
csidrivers                                       storage.k8s.io/v1                 false        CSIDriver
csinodes                                         storage.k8s.io/v1                 false        CSINode
csistoragecapacities                             storage.k8s.io/v1                 true         CSIStorageCapacity
storageclasses                      sc           storage.k8s.io/v1                 false        StorageClass
volumeattachments                                storage.k8s.io/v1                 false        VolumeAttachment

どうやら deployments のAPIバージョンは apps/v1 のようです。

とりあえずお約束の NGiNXでも動かしてみようと、Kubernetesのサイトにある yamlファイルをパクってきます。
Kubernetesオブジェクトを記述する

[nginx.yaml] ファイルとしてこんなのを作りました。

apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2 # tells deployment to run 2 pods matching the template
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

このファイルで 2つの NGiNXが動いている Pod(=コンテナ)ができるはずです。

配備(deploy)します。

subro@UbuntuServer2404-1:~$ sudo microk8s kubectl apply -f nginx.yaml
deployment.apps/nginx-deployment created

エラーにはなりませんでした。

再度 Kubernetesクラスターの状態を取得します。

subro@UbuntuServer2404-1:~$ sudo microk8s kubectl get all --all-namespaces
NAMESPACE     NAME                                             READY   STATUS    RESTARTS   AGE
default       pod/nginx-deployment-77d8468669-5cld5            1/1     Running   0          41s
default       pod/nginx-deployment-77d8468669-px4rl            1/1     Running   0          41s
kube-system   pod/calico-kube-controllers-796fb75cc-mklvd      1/1     Running   0          45m
kube-system   pod/calico-node-pfkxz                            1/1     Running   0          45m
kube-system   pod/coredns-5986966c54-wgvtm                     1/1     Running   0          45m
kube-system   pod/dashboard-metrics-scraper-795895d745-6nwtv   1/1     Running   0          34m
kube-system   pod/kubernetes-dashboard-6796797fb5-j87bg        1/1     Running   0          34m
kube-system   pod/metrics-server-7cff7889bd-vnfdf              1/1     Running   0          34m

NAMESPACE     NAME                                TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                  AGE
default       service/kubernetes                  ClusterIP   10.152.183.1             443/TCP                  45m
kube-system   service/dashboard-metrics-scraper   ClusterIP   10.152.183.208           8000/TCP                 34m
kube-system   service/kube-dns                    ClusterIP   10.152.183.10            53/UDP,53/TCP,9153/TCP   45m
kube-system   service/kubernetes-dashboard        ClusterIP   10.152.183.73            443/TCP                  34m
kube-system   service/metrics-server              ClusterIP   10.152.183.179           443/TCP                  34m

NAMESPACE     NAME                         DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
kube-system   daemonset.apps/calico-node   1         1         1       1            1           kubernetes.io/os=linux   45m

NAMESPACE     NAME                                        READY   UP-TO-DATE   AVAILABLE   AGE
default       deployment.apps/nginx-deployment            2/2     2            2           41s
kube-system   deployment.apps/calico-kube-controllers     1/1     1            1           45m
kube-system   deployment.apps/coredns                     1/1     1            1           45m
kube-system   deployment.apps/dashboard-metrics-scraper   1/1     1            1           34m
kube-system   deployment.apps/kubernetes-dashboard        1/1     1            1           34m
kube-system   deployment.apps/metrics-server              1/1     1            1           34m

NAMESPACE     NAME                                                   DESIRED   CURRENT   READY   AGE
default       replicaset.apps/nginx-deployment-77d8468669            2         2         2       41s
kube-system   replicaset.apps/calico-kube-controllers-796fb75cc      1         1         1       45m
kube-system   replicaset.apps/coredns-5986966c54                     1         1         1       45m
kube-system   replicaset.apps/dashboard-metrics-scraper-795895d745   1         1         1       34m
kube-system   replicaset.apps/kubernetes-dashboard-6796797fb5        1         1         1       34m
kube-system   replicaset.apps/metrics-server-7cff7889bd              1         1         1       34m

想定通り NGiNXの Podが 2つばかり増えています。

Podの IPが何か確認します。

subro@UbuntuServer2404-1:~$ sudo microk8s kubectl get pods -l app=nginx -o wide
NAME                                READY   STATUS    RESTARTS   AGE    IP          NODE                 NOMINATED NODE   READINESS GATES
nginx-deployment-77d8468669-5cld5   1/1     Running   0          4m6s   10.1.78.7   ubuntuserver2404-1              
nginx-deployment-77d8468669-px4rl   1/1     Running   0          4m6s   10.1.78.6   ubuntuserver2404-1              

[10.1.87.6] [10.1.87.7] ですね。

「いよいよ WEBブラウザでアクセスすると NGiNXの初期画面が!」 となるかと思いきや、そうは行かないのが Kubernetes。

ですが、MicroK8sの導入はここまで。

何だそりゃ!!と言うなかれ。

オンプレ Kubernetes環境に LoadBalancerサービスを」で外部から Kubernetesのサービスにアクセスする話を書いています。

ここから後は Kubernetesの書籍に載っているものが動くはずですから、そちらへ移って頂いても良いでしょう。


==========
snapで入れるもの、ということでちょっと警戒してしまいましたが、流石に Canonicalが Ubuntuで動かないものを出すはずも無かったようです。

今では Kubernetesはクラウドのサービスを使うのが一般的になっていると思われ、Kubernetesをコンテナ利用のインフラとして考え「Pod(コンテナ)が動きゃ良い」と割り切るなら、素の Kubernetesでなくとも MicroK8sで良いのかも知れません。

そうなるとこのインストールの楽さは他に代え難く、コンテナ間で連携が必要なサービスの検証環境としての需要があろうと思いましたね。


Kubernetesは技術的には最も進化が速いものの一つですので、新しい情報を得たいですね。
残念ながら MicroK8sの日本語書籍は皆無のようで、Kubernetesなら比較的新しいのがこれらです。
この 1年くらいはブームがちょっと落ち着いてしまって、以前はバラバラと出ていたのですが、元気が無くなっているように感じます。