JPOUG Advent Calendar 2024 の 7日目の投稿です。
6日目は s4r_agent さんの クラウド・シェルでJava21を使いたい(csruntimectlを調べる) でした。
今日は、Oracle Linux 9.5 で Oracle Cloud Native Environment 2.0 の Kubernetes クラスタを構築してみます。そしてついでに、OCNE Application として KubeVirt をインストールしてみます。
ドキュメントでは、下記のあたりが参考になります。
Oracle Cloud Native Environment
- Quick Start for Release 2.0
- KubeVirt Module for Release 1.9 ※現状では 2.0 のドキュメントがなさそう。
今回の環境
Oracle Linux 9.5 の KVM ホストに、OCNE の Kubernetes クラスタを作成します。
マシンのリソースは、次のとおりです。
- CPU:2コア
- メモリ:8GB
- ディスク:30GB
今回の、Oracle Linux です。
[root@lab-ol9-kvm-01 ~]# cat /etc/oracle-release Oracle Linux Server release 9.5 [root@lab-ol9-kvm-01 ~]# uname -a Linux lab-ol9-kvm-01 5.15.0-302.167.6.1.el9uek.x86_64 #2 SMP Thu Nov 21 21:48:29 PST 2024 x86_64 x86_64 x86_64 GNU/Linux
1. 事前準備 / KVM ホストの構築
ol9_kvm_utils の Yum リポジトリを有効化して、「Virtualization Host」グループをインストールします。
[root@lab-ol9-kvm-01 ~]# dnf config-manager --enable ol9_kvm_utils [root@lab-ol9-kvm-01 ~]# dnf group install "Virtualization Host" -y
Systemd の Unit を有効化しておきます。
for n in qemu network nodedev nwfilter secret storage interface proxy do systemctl enable virt${n}d.service systemctl enable virt${n}d{,-ro,-admin}.socket done
OS を再起動しておきます。
[root@lab-ol9-kvm-01 ~]# reboot
KVM が利用可能になったことを確認しておきます。(枠からあふれた表示は、とりあえずそのまま・・・)
[root@lab-ol9-kvm-01 ~]# LANG=C virt-host-validate qemu QEMU: Checking for hardware virtualization : PASS QEMU: Checking if device /dev/kvm exists : PASS QEMU: Checking if device /dev/kvm is accessible : PASS QEMU: Checking if device /dev/vhost-net exists : PASS QEMU: Checking if device /dev/net/tun exists : PASS QEMU: Checking for cgroup 'cpu' controller support : PASS QEMU: Checking for cgroup 'cpuacct' controller support : PASS QEMU: Checking for cgroup 'cpuset' controller support : PASS QEMU: Checking for cgroup 'memory' controller support : PASS QEMU: Checking for cgroup 'devices' controller support : PASS QEMU: Checking for cgroup 'blkio' controller support : PASS QEMU: Checking for device assignment IOMMU support : WARN (No ACPI DMAR table found, IOMMU either disabled in BIOS or not supported by this hardware platform) QEMU: Checking for secure guest support : WARN (Unknown if this platform has Secure Guest support)
2. Oracle Cloud Native Environment 2.0 のインストール
OCNE(OLCNE)では、1.9 までは Kubernetes のプロビジョニングなどで、olcnectl コマンドを使用していました。しかし Kubernetes をインストールする Oracle Linux は、事前に用意していました。
2.0 からは ocne コマンドが提供されて、libvirt を使用して、Kubernetes クラスタを作成する前段の、KVM 上の仮想マシンもプロビジョニング対象になりました。そこで今回は、ocne コマンドで Kubernetes クラスタを作成してみます。
まずは、olcne の RPM をインストールします。
OCNE の .repo ファイルをインストールして、Yum リポジトリを有効化します。
[root@lab-ol9-kvm-01 ~]# dnf install oracle-ocne-release-el9 -y [root@lab-ol9-kvm-01 ~]# dnf config-manager --enable ol9_ocne
[root@lab-ol9-kvm-01 ~]# dnf list --repo ol9_ocne --available メタデータの期限切れの最終確認: 0:00:13 前の 2024年12月07日 15時01分51秒 に実施しました。 利用可能なパッケージ kubectl.x86_64 1.30.3-1.el9 ol9_ocne kubernetes.src 1.30.3-1.el9 ol9_ocne ocne.src 2.0.4-2.el9 ol9_ocne ocne.x86_64 2.0.4-2.el9 ol9_ocne
ocne と kubectl をインストールします。
[root@lab-ol9-kvm-01 ~]# dnf install ocne kubectl -y
3. Kubernetes クラスタの作成(ocne cluster start)
ocne コマンドで、Kubernetes クラスタを作成します。下記のコマンドを実行すると、Kubernetes ノードの仮想マシン イメージ(2.3GB 程度)が自動的にダウロードされて、1ノードの Kubernetes クラスタが作成されます。
[root@lab-ol9-kvm-01 ~]# ocne cluster start
しばらく待つと Kubernetes クラスタが起動されて、下記のように kubeconfig ファイルのパスなどが表示されます。
INFO[2024-12-07T16:58:49+09:00] Installing flannel into kube-flannel: waiting INFO[2024-12-07T16:58:51+09:00] Installing flannel into kube-flannel: waiting.. INFO[2024-12-07T16:58:51+09:00] Installing flannel into kube-flannel: waiting . INFO[2024-12-07T16:58:52+09:00] Installing flannel into kube-flannel: waiting INFO[2024-12-07T16:58:54+09:00] Installing flannel into kube-flannel: waiting.. INFO[2024-12-07T16:58:54+09:00] Installing flannel into kube-flannel: waiting . INFO[2024-12-07T16:58:55+09:00] Installing flannel into kube-flannel: ok
INFO[2024-12-07T16:58:55+09:00] Installing ui into ocne-system: waiting
INFO[2024-12-07T16:59:07+09:00] Installing ui into ocne-system: ok
INFO[2024-12-07T16:59:07+09:00] Installing ocne-catalog into ocne-system: waitinINFO[2024-12-07T16:59:07+09:00] Installing ocne-catalog into ocne-system: waitinINFO[2024-12-07T16:59:08+09:00] Installing ocne-catalog into ocne-system: waitinINFO[2024-12-07T16:59:08+09:00] Installing ocne-catalog into ocne-system: ok
INFO[2024-12-07T16:59:08+09:00] Kubernetes cluster was created successfully
INFO[2024-12-07T17:01:40+09:00] Waiting for the UI to be ready: ok
Run the following command to create an authentication token to access the UI:
KUBECONFIG='/root/.kube/kubeconfig.ocne.local' kubectl create token ui -n ocne-system
Browser window opened, enter 'y' when ready to exit: y ★yを入力してEnter。
INFO[2024-12-07T17:02:28+09:00] Post install information:
To access the cluster from the VM host:
copy /root/.kube/kubeconfig.ocne.vm to that host and run kubectl there
To access the cluster from this system:
use /root/.kube/kubeconfig.ocne.local
To access the UI, first do kubectl port-forward to allow the browser to access the UI.
Run the following command, then access the UI from the browser using via https://localhost:8443
kubectl port-forward -n ocne-system service/ui 8443:443
Run the following command to create an authentication token to access the UI:
kubectl create token ui -n ocne-system
[root@lab-ol9-kvm-01 ~]#
自動生成された kubeconfig ファイルを環境変数に設定して、kubectl get nodes を実行すると、1ノードの Kubernetes クラスタが Ready になっています。
[root@lab-ol9-kvm-01 ~]# export KUBECONFIG='/root/.kube/kubeconfig.ocne.local' [root@lab-ol9-kvm-01 ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION ocne-control-plane-1 Ready control-plane 7m43s v1.30.3+1.el8
この Kubernetes ノードは、KVM の仮想マシンです。
[root@lab-ol9-kvm-01 ~]# virsh list Id 名前 状態 ------------------------------------- 1 ocne-control-plane-1 実行中
下記のように Pod が起動されています。じつは Web UI(ui-~ Pod)も起動されていますが、今回は気にせず進みます。
[root@lab-ol9-kvm-01 ~]# kubectl get pod -A NAMESPACE NAME READY STATUS RESTARTS AGE kube-flannel kube-flannel-ds-msfwt 1/1 Running 1 (6m10s ago) 6m58s kube-system coredns-f7d444b54-bd5hs 1/1 Running 0 6m57s kube-system coredns-f7d444b54-hp4zr 1/1 Running 0 6m57s kube-system etcd-ocne-control-plane-1 1/1 Running 0 8m28s kube-system kube-apiserver-ocne-control-plane-1 1/1 Running 0 8m28s kube-system kube-controller-manager-ocne-control-plane-1 1/1 Running 3 (3m53s ago) 8m28s kube-system kube-proxy-qsj8h 1/1 Running 0 6m58s kube-system kube-scheduler-ocne-control-plane-1 1/1 Running 3 (3m5s ago) 8m28s ocne-system ocne-catalog-578c959566-7bg84 1/1 Running 0 6m57s ocne-system ui-84dd57ff69-5vlmt 1/1 Running 0 6m57s
4. OCNE Application のインストール(KubeVirt)
カタログに登録されている Application の一覧です。
[root@lab-ol9-kvm-01 ~]# ocne catalog search APPLICATION VERSION bootstrap-capi 1.7.1 cert-manager 1.9.1 cert-manager 1.14.5 cert-manager-webhook-oci 1.1.0 control-plane-capi 1.7.1 core-capi 1.7.1 dex 2.39.1 externalip-webhook 1.0.0 flannel 0.22.3 fluent-operator 3.2.0 fluentd 1.14.5 grafana 7.5.17 ingress-nginx 1.9.6 istio-base 1.19.9 istio-base 1.20.5 istio-egress 1.20.5 istio-egress 1.19.9 istio-ingress 1.20.5 istio-ingress 1.19.9 istiod 1.20.5 istiod 1.19.9 kube-prometheus-stack 45.25.0 kube-state-metrics 2.8.2 kubevirt 0.58.0 kubevirt 1.1.1 kubevirt 1.0.1 kubevirt 0.59.0 metallb 0.13.10 metallb 0.12.1 multus 4.0.2 oci-capi 0.15.0 oci-ccm 1.27.2 oci-ccm 1.28.0 ocne-catalog 2.0.0 prometheus 2.31.1 prometheus-adapter 0.10.0 prometheus-node-exporter 1.6.1 rook 1.12.3 rook 1.11.6 rook 1.10.9 tigera-operator 1.29.3 tigera-operator 1.32.4 ui 2.0.0
OCNE では、下記のような Web UI でも Application をインストールできます。
しかし今回は、ocne CLI から kubevirt 1.1.1 をインストールしてみます。
[root@lab-ol9-kvm-01 ~]# kubectl create ns kubevirt namespace/kubevirt created [root@lab-ol9-kvm-01 ~]# ocne application install -N kubevirt -r kubevirt -v 1.1.1 -n kubevirt INFO[2024-12-07T17:10:27+09:00] Application installed successfully
OCNE の Application として、kubevirt がインストールされました。
[root@lab-ol9-kvm-01 ~]# ocne application list Releases NAME NAMESPACE CHART STATUS REVISION APPVERSION [root@lab-ol9-kvm-01 ~]# ocne application list -A Releases NAME NAMESPACE CHART STATUS REVISION APPVERSION flannel kube-flannel flannel deployed 1 0.22.3 kubevirt kubevirt kubevirt deployed 1 1.1.1 ocne-catalog ocne-system ocne-catalog deployed 1 2.0.0 ui ocne-system ui deployed 1 2.0.0
カスタム リソースが追加され、Kubernetes で VirtualMachine などが作成できるようになりました。
[root@lab-ol9-kvm-01 ~]# kubectl api-resources | grep kubevirt virtualmachineclones vmclone,vmclones clone.kubevirt.io/v1alpha1 true VirtualMachineClone virtualmachineexports vmexport,vmexports export.kubevirt.io/v1alpha1 true VirtualMachineExport virtualmachineclusterinstancetypes vmclusterinstancetype,vmclusterinstancetypes,vmcf,vmcfs instancetype.kubevirt.io/v1beta1 false VirtualMachineClusterInstancetype virtualmachineclusterpreferences vmcp,vmcps instancetype.kubevirt.io/v1beta1 false VirtualMachineClusterPreference virtualmachineinstancetypes vminstancetype,vminstancetypes,vmf,vmfs instancetype.kubevirt.io/v1beta1 true VirtualMachineInstancetype virtualmachinepreferences vmpref,vmprefs,vmp,vmps instancetype.kubevirt.io/v1beta1 true VirtualMachinePreference kubevirts kv,kvs kubevirt.io/v1 true KubeVirt virtualmachineinstancemigrations vmim,vmims kubevirt.io/v1 true VirtualMachineInstanceMigration virtualmachineinstancepresets vmipreset,vmipresets kubevirt.io/v1 true VirtualMachineInstancePreset virtualmachineinstancereplicasets vmirs,vmirss kubevirt.io/v1 true VirtualMachineInstanceReplicaSet virtualmachineinstances vmi,vmis kubevirt.io/v1 true VirtualMachineInstance virtualmachines vm,vms kubevirt.io/v1 true VirtualMachine migrationpolicies migrations.kubevirt.io/v1alpha1 false MigrationPolicy virtualmachinepools vmpool,vmpools pool.kubevirt.io/v1alpha1 true VirtualMachinePool virtualmachinerestores vmrestore,vmrestores snapshot.kubevirt.io/v1alpha1 true VirtualMachineRestore virtualmachinesnapshotcontents vmsnapshotcontent,vmsnapshotcontents snapshot.kubevirt.io/v1alpha1 true VirtualMachineSnapshotContent virtualmachinesnapshots vmsnapshot,vmsnapshots snapshot.kubevirt.io/v1alpha1 true VirtualMachineSnapshot
KubeVirt 関連の Pod が起動されたことを確認しておきます。
[root@lab-ol9-kvm-01 ~]# kubectl get all -n kubevirt Warning: kubevirt.io/v1 VirtualMachineInstancePresets is now deprecated and will be removed in v2. NAME READY STATUS RESTARTS AGE pod/virt-api-5d77f885dc-6cwjj 1/1 Running 0 4m16s pod/virt-controller-77b8465986-c9grl 1/1 Running 0 3m40s pod/virt-controller-77b8465986-rhfxx 1/1 Running 0 3m40s pod/virt-handler-tctdm 1/1 Running 0 3m40s pod/virt-operator-6f97b58c97-cjjnz 1/1 Running 0 5m43s pod/virt-operator-6f97b58c97-n2wsc 1/1 Running 0 5m43s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubevirt-operator-webhook ClusterIP 10.101.188.143 <none> 443/TCP 4m19s service/kubevirt-prometheus-metrics ClusterIP None <none> 443/TCP 4m20s service/virt-api ClusterIP 10.106.42.10 <none> 443/TCP 4m19s service/virt-exportproxy ClusterIP 10.98.84.124 <none> 443/TCP 4m19s NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE daemonset.apps/virt-handler 1 1 1 1 1 kubernetes.io/os=linux 3m40s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/virt-api 1/1 1 1 4m16s deployment.apps/virt-controller 2/2 2 2 3m41s deployment.apps/virt-operator 2/2 2 2 5m43s NAME DESIRED CURRENT READY AGE replicaset.apps/virt-api-5d77f885dc 1 1 1 4m16s replicaset.apps/virt-controller-77b8465986 2 2 2 3m40s replicaset.apps/virt-operator-6f97b58c97 2 2 2 5m43s NAME AGE PHASE kubevirt.kubevirt.io/kubevirt 5m43s Deployed
KubeVirt で、仮想マシンを作成してみます。今回は、下記のような YAML ファイル(vm01-ol95.yml)を用意しました。
[root@lab-ol9-kvm-01 ~]# cat vm01-ol95.yml --- apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: vm01 labels: kubevirt.io/vm: vm01 spec: runStrategy: Always template: metadata: labels: kubevirt.io/vm: vm01 spec: domain: devices: disks: - disk: bus: virtio name: containerdisk - disk: bus: virtio name: cloudinitdisk resources: requests: memory: 512M terminationGracePeriodSeconds: 0 volumes: - name: containerdisk containerDisk: image: ghcr.io/gowatana/kubevirt-oraclelinux:9.5 - name: cloudinitdisk cloudInitNoCloud: userDataBase64: | I2Nsb3VkLWNvbmZpZwp1c2VyczoKICAtIG5hbWU6IHNjb3R0CiAgICBzaGVsbDogL2Jpbi9iYXNo CiAgICBzdWRvOiBBTEw9KEFMTCkgTk9QQVNTV0Q6QUxMCmNocGFzc3dkOgogICAgbGlzdDogfAog ICAgICBzY290dDp0aWdlcgogICAgZXhwaXJlOiBmYWxzZQpzc2hfcHdhdXRoOiB5ZXMKCndyaXRl X2ZpbGVzOgogIC0gcGF0aDogL2V0Yy9tb3RkCiAgICBjb250ZW50OiB8CiAgICAgIH4gICAqCiAg ICAgICAgIHh4eAogICAgICAgIHh4eHh4CiAgICAgICB4eHh4eHh4ICBKUE9VRyBBZHZlbnQgQ2Fs ZW5kYXIgMjAyNAogICAgICBfXyAgbCAgX18gaHR0cHM6Ly9hZHZlbnRhci5vcmcvY2FsZW5kYXJz LzEwMjU4CiAgICBhcHBlbmQ6IGZhbHNlCiAgICBwZXJtaXNzaW9uczogJzA2NDQnCg==
そして、Oracle Linux 9.5 の Cloud Image を、GitHub のコンテナ レジストリにアップロードしてあります。
Kubernetes に、VirtualMachine リソースの YAML を適用します。
[root@lab-ol9-kvm-01 ~]# kubectl apply -f vm01-ol95.yml virtualmachine.kubevirt.io/vm01 created
VirtualMachine(vm)と VirtualMachineInstance(vmi)が作成されました。
[root@lab-ol9-kvm-01 ~]# kubectl get vm NAME AGE STATUS READY vm01 12m Running True [root@lab-ol9-kvm-01 ~]# kubectl get vmi NAME AGE PHASE IP NODENAME READY vm01 12m Running 10.244.0.18 ocne-control-plane-1 True
ここからは、KubeVirt の CLI である、virtctl を使用します。OCNE 2.0 のリポジトリには virtctl がないので、OCNE 1.9 のリポジトリにある RPM をインストールしておきます。
[root@lab-ol9-kvm-01 ~]# dnf install https://yum.oracle.com/repo/OracleLinux/OL9/olcne19/x86_64/getPackage/virtctl-1.1.1-1.el9.x86_64.rpm -y
5分くらい待ってから、SSH で接続してみます。virtctl で、VirtualMachineInstance に SSH 接続するためのサービスを作成します。
[root@lab-ol9-kvm-01 ~]# virtctl expose vmi vm01 --port=22 --name=vm01-ssh --type=NodePort Service vm01-ssh successfully exposed for vmi vm01 [root@lab-ol9-kvm-01 ~]# kubectl get service vm01-ssh NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE vm01-ssh NodePort 10.101.171.243 <none> 22:31132/TCP 10s
NodePort で接続するので、Kubernetes ノードの IP アドレスを確認しておきます。
[root@lab-ol9-kvm-01 ~]# kubectl get nodes -o wide NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME ocne-control-plane-1 Ready control-plane 140m v1.30.3+1.el8 192.168.122.253 <none> Oracle Linux Server 8.10 5.15.0-302.167.6.1.el8uek.x86_64 cri-o://1.30.3
そして、Kubernetes ノードに NodePort で設定されたポート宛に接続すると、Cloud-Init で指定しておいた OS ユーザーで、仮想マシンのゲスト OS にログインできます。仮想マシンの内部では、VirtualMachineInstance の IP アドレスが設定されていることがわかります。
ocne cluster console コマンドで、Kubernetes ノードの仮想マシンに直接ログインすると、Oracle Linux 8.5 が利用されていることがわかります。そしてここからであれば VirtualMachineInstance の 実際の IP アドレスに SSH できます。
[root@lab-ol9-kvm-01 ~]# ocne cluster console --node ocne-control-plane-1 sh-4.4# sh-4.4# sh-4.4# cat /etc/oracle-release Oracle Linux Server release 8.10 sh-4.4# sh-4.4# sh-4.4# ssh scott@10.244.0.18 The authenticity of host '10.244.0.18 (10.244.0.18)' can't be established. ECDSA key fingerprint is SHA256:6s2Tsk1gurLBbIZEz8j8miGbeCQs7LuyDrrUQFlxxKw. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '10.244.0.18' (ECDSA) to the list of known hosts. scott@10.244.0.18's password: ~ * xxx xxxxx xxxxxxx JPOUG Advent Calendar 2024 __ l __ https://adventar.org/calendars/10258 Last login: Sat Dec 7 10:28:03 2024 from 10.244.0.1 [scott@vm01 ~]$
以上、Oracle Linux に最近の OCNE で Kubernetes を構築してみる話でした。
明日の JPOUG Advent Calendar 2024 は asahide さんです。
よろしくお願いします。
0 件のコメント:
コメントを投稿