折角 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パッケージで配布されていますので、他のディストリでも問題なく動くはず…です。
- Ubuntu Server 24.04
- MicroK8s 1.30.1
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を使いました。
このような画面になりますので、上の画面にあるトークンをコピペして、
サインインを押します。
これがダッシュボードの画面です。
パブリッククラウドではこのダッシュボードは使われていないと思いますが、オンプレではこれを使うことになるんじゃないでしょうか。
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年くらいはブームがちょっと落ち着いてしまって、以前はバラバラと出ていたのですが、元気が無くなっているように感じます。