Pada postingan sebelumnya, opsi antarmuka pengguna KubeVirt dijelaskan dan menunjukkan beberapa fitur, kelebihan dan kekurangan penggunaan konsol OKD untuk mengelola penerapan KubeVirt. Posting blog ini akan berfokus pada pemasangan dan pengoperasian konsol web OKD di kluster Kubernetes sehingga dapat memanfaatkan integrasi mendalam antara KubeVirt dan konsol web OKD.

Ada dua opsi untuk menjalankan konsol web OKD untuk mengelola kluster Kubernetes:

Apa itu konsol web OKD?

Konsol web OKD adalah antarmuka pengguna yang dapat diakses dari peramban web. Pengembang dapat menggunakan konsol web untuk memvisualisasikan, menelusuri, dan mengelola konten namespace. Konsol ini juga disebut lebih ramah kubectldalam bentuk aplikasi web satu halaman. Konsol ini terintegrasi dengan layanan lain seperti pemantauan, pengembalian dana, dan Operator Lifecycle Manager atau OLM . Beberapa hal yang terjadi di balik layar meliputi:

  • Proksi API Kubernetes di bawah /api/kubernetes
  • Menyediakan API non-Kubernetes tambahan untuk berinteraksi dengan cluster
  • Melayani semua aset statis frontend
  • Otentikasi Pengguna

Seperti yang dinyatakan dalam repositori resmi GitHub, konsol web OKD berjalan sebagai biner yang mendengarkan di port lokal. Aset statis yang diperlukan untuk menjalankan konsol web dilayani oleh biner itu sendiri. Konsol web dapat disesuaikan menggunakan ekstensi. Ekstensi harus dikomit agar langsung ke sumber konsol.

Saat konsol web diakses dari browser, konsol akan memuat semua aset statis yang dibutuhkan terlebih dahulu. Kemudian, membuat permintaan ke API Kubernetes menggunakan nilai yang ditetapkan sebagai variabel lingkungan di host tempat konsol berjalan. Sebenarnya, ada skrip bernama environment.shyang membantu mengekspor nilai yang tepat untuk variabel lingkungan ini.

Konsol web menggunakan WebSockets untuk mempertahankan koneksi persisten dengan server API dan menerima informasi terbaru segera setelah tersedia. Perhatikan juga bahwa JavaScript harus diaktifkan untuk menggunakan konsol web. Untuk pengalaman terbaik, gunakan browser web yang mendukung WebSockets. Pengembang konsol web OKD menginformasikan bahwa Google Chrome/Chromium versi 76 atau yang lebih baru digunakan dalam pengujian integrasi mereka.

Berbeda dengan yang dijelaskan di repositori resmi , OKD sebenarnya menjalankan konsol web OKD dalam sebuah pod. Oleh karena itu, meskipun tidak disebutkan secara resmi, informasi tentang cara menjalankan konsol web OKD sebagai pod dalam kluster Kubernetes asli akan dijelaskan kemudian.

Instalasi biner

Metode ini disarankan untuk menjadi instalasi pengembangan karena terutama digunakan oleh pengembang konsol web OKD untuk menguji fitur-fitur baru.

Di bagian ini, konsol web OKD akan dikompilasi dari kode sumber dan dijalankan sebagai artefak biner di server CentOS 8 yang tidak termasuk dalam kluster Kubernetes mana pun. Diagram berikut menunjukkan hubungan antara semua komponen: pengguna, konsol web OKD, dan kluster Kubernetes.

Diagram laboratorium

Perhatikan bahwa konsol web OKD dapat dijalankan di master Kubernetes, di node biasa, atau, seperti yang ditunjukkan, di server di luar kluster. Dalam kasus terakhir, server eksternal harus memiliki akses ke API master. Perhatikan juga bahwa konsol web OKD dapat dikonfigurasi dengan pengaturan keamanan dan jaringan yang berbeda atau bahkan sumber daya perangkat keras yang berbeda .

Langkah pertama saat menggunakan instalasi biner adalah mengkloning repositori .

Ketergantungan

Berikut ini adalah rincian dependensi yang diperlukan untuk mengkompilasi artefak konsol web OKD:

  • Sistem Operasi . CentOS 8 dipilih sebagai sistem operasi untuk server yang menjalankan konsol web OKD. Kluster Kubernetes menjalankan CentOS 7 terbaru.
$ cat /etc/redhat-release
CentOS Linux release 8.0.1905 (Core)
  • Kubernetes . Versi terbaru yang tersedia saat ini telah diterapkan: v1.17. Kluster Kubernetes terdiri dari satu simpul induk dan satu simpul biasa dengan CPU yang cukup (4 vCPU) dan memori (16 Gi) untuk menjalankan KubeVirt dan beberapa KubeVirt VirtualMachineInstances. Tidak diperlukan penyimpanan tambahan karena mesin virtual akan berjalan sebagai instans kontainer-disk.
$ kubectl get nodes -o wide
NAME                            STATUS   ROLES    AGE   VERSION   INTERNAL-IP       EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION               CONTAINER-RUNTIME
blog-master-00.kubevirt.local   Ready    master   29h   v1.17.0   192.168.123.250   <none>        CentOS Linux 7 (Core)   3.10.0-957.27.2.el7.x86_64   docker://1.13.1
blog-worker-00.kubevirt.local   Ready    <none>   29h   v1.17.0   192.168.123.232   <none>        CentOS Linux 7 (Core)   3.10.0-957.27.2.el7.x86_64   docker://1.13.1
  • Node.js >= 8. Node.js 10 tersedia sebagai modul AppStream.
$ sudo yum module install nodejs
Installed:
  nodejs-1:10.16.3-2.module_el8.0.0+186+542b25fc.x86_64   npm-1:6.9.0-1.10.16.3.2.module_el8.0.0+186+542b25fc.x86_64

Complete!
  • yarn >= 1.3.2 . Yarn merupakan dependensi Node.js. Dalam kasus ini, repositori yarn resmi harus ditambahkan sebagai repositori lokal.
$ sudo curl --silent --location https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yum.repos.d/yarn.repo
$ sudo rpm --import https://dl.yarnpkg.com/rpm/pubkey.gpg
$ sudo yum install yarn

$ yarn --version
1.21.1
  • pergi >= 1.11+ . Golang tersedia sebagai modul AppStream di CentOS 8:
$ sudo yum module install go-toolset

Installed:
  golang-1.11.6-1.module_el8.0.0+192+8b12aa21.x86_64

  • jq (untuk contrib/environment.sh) . Terakhir, jq diinstal agar dapat bekerja dengan data JSON.
$ yum install jq

Installed:
  jq.x86_64 0:1.5-1.el7

Mengkompilasi konsol web OKD

Setelah semua dependensi terpenuhi, akses direktori kloning dan ekspor variabel yang benar yang akan digunakan selama proses pembangunan. Kemudian, jalankan build.shskrip yang sebenarnya memanggil skrip build-frontend dan build-backend.

$ git clone https://github.com/openshift/console.git
$ cd console/
$ export KUBECONFIG=~/.kube/config
$ source ./contrib/environment.sh
Using https://192.168.123.250:6443

$ ./build.sh
...
Done in 215.91s.

Hasil dari proses ini adalah file biner yang disebut bridge di dalam folder bin. Sebelum menjalankan “bridge” , harus diverifikasi bahwa port tempat konsol web OKD mengharapkan koneksi tidak diblokir.

iptables -A INPUT -p tcp --dport 9000 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT

Kemudian, artefak dapat dieksekusi:

$ ./bin/bridge
2020/01/7 10:21:17 cmd/main: cookies are not secure because base-address is not https!
2020/01/7 10:21:17 cmd/main: running with AUTHENTICATION DISABLED!
2020/01/7 10:21:17 cmd/main: Binding to 0.0.0.0:9000...
2020/01/7 10:21:17 cmd/main: not using TLS

Pada titik ini, koneksi ke konsol web OKD dari jaringan Anda seharusnya berhasil dibuat. Perhatikan bahwa secara default tidak diperlukan autentikasi untuk masuk ke konsol dan koneksi menggunakan protokol HTTP. Ada beberapa variabel dalam berkas environment.shyang dapat mengubah perilaku default ini.

Kemungkinan, masalah berikut akan dihadapi saat menghubungkan ke antarmuka pengguna web: "services is forbidden: User "system:serviceaccount:kube-system:default" cannot list resource "services" in API group "" in the namespace default". Masalahnya adalah akun layanan default tidak memiliki cukup hak istimewa untuk menampilkan semua objek kluster.

OKD ada kesalahan

Ada dua opsi untuk memperbaiki masalah ini: satu adalah memberikan izin admin-kluster ke akun layanan default. Itu tidak direkomendasikan karena akun layanan default, sesuai namanya, adalah akun layanan default untuk semua pod jika tidak dikonfigurasi secara eksplisit. Ini berarti memberikan izin admin-kluster ke beberapa aplikasi yang berjalan di namespace kube-system dan bahkan yang akan datang ketika tidak ada akun layanan yang dikonfigurasi.

Pilihan lainnya adalah membuat akun layanan baru bernama console , memberikan izin cluster-admin padanya dan mengonfigurasi konsol web untuk berjalan dengan akun layanan baru ini:

kubectl create serviceaccount console -n kube-system
kubectl create clusterrolebinding console --clusterrole=cluster-admin --serviceaccount=kube-system:console -n kube-system

Setelah dibuat, modifikasi environment.shfile dan ubah baris yang dimulai dengan secretnameseperti yang ditunjukkan di bawah ini:

vim contrib/environment.sh
secretname=$(kubectl get serviceaccount **console** --namespace=kube-system -o jsonpath='{.secrets[0].name}')

Sekarang, variabel yang dikonfigurasi dalam environment.shberkas harus diekspor lagi dan koneksi ke konsol harus dimuat ulang.

source ./contrib/environment.sh

Terapkan KubeVirt menggunakan Hyperconverged Cluster Operator (HCO)

Untuk memudahkan instalasi KubeVirt, operator terpadu yang disebut HCO akan digunakan. Tujuan dari hyperconverged-cluster-operator (HCO) adalah untuk menyediakan satu titik masuk untuk beberapa operator - kubevirt , cdi , networking , dll… - di mana pengguna dapat menggunakan dan mengonfigurasinya dalam satu objek.

Operator ini terkadang disebut sebagai "meta operator" atau "operator untuk operator". Yang terpenting, operator ini tidak menggantikan atau mengganggu OLM. Operator ini hanya membuat CR operator, yang merupakan hak prerogatif pengguna. Informasi lebih lanjut tentang HCO dapat ditemukan dalam posting yang dipublikasikan di blog ini oleh Ryan Hallisey: Hyper Converged Operator pada OCP 4 dan K8s(HCO) .

Repositori HCO menyediakan banyak informasi tentang cara memasang operator. Di lab ini, operator telah dipasang sebagai Menggunakan HCO tanpa OLM atau Marketplace , yang pada dasarnya menjalankan skrip penyebaran ini:

$ curl https://raw.githubusercontent.com/kubevirt/hyperconverged-cluster-operator/main/deploy/deploy.sh | bash
+ kubectl create ns kubevirt-hyperconverged
namespace/kubevirt-hyperconverged created
+ namespaces=("openshift")
+ for namespace in ${namespaces[@]}
++ kubectl get ns openshift
Error from server (NotFound): namespaces "openshift" not found
+ [[ '' == '' ]]
+ kubectl create ns openshift
namespace/openshift created
++ kubectl config current-context
+ kubectl config set-context kubernetes-admin@kubernetes --namespace=kubevirt-hyperconverged
Context "kubernetes-admin@kubernetes" modified.
+ kubectl create -f https://raw.githubusercontent.com/kubevirt/hyperconverged-cluster-operator/main/deploy/crds/cluster-network-addons00.crd.yaml
customresourcedefinition.apiextensions.k8s.io/networkaddonsconfigs.networkaddonsoperator.network.kubevirt.io created
+ kubectl create -f https://raw.githubusercontent.com/kubevirt/hyperconverged-cluster-operator/main/deploy/crds/containerized-data-importer00.crd.yaml
customresourcedefinition.apiextensions.k8s.io/cdis.cdi.kubevirt.io created
+ kubectl create -f https://raw.githubusercontent.com/kubevirt/hyperconverged-cluster-operator/main/deploy/crds/hco.crd.yaml
customresourcedefinition.apiextensions.k8s.io/hyperconvergeds.hco.kubevirt.io created
+ kubectl create -f https://raw.githubusercontent.com/kubevirt/hyperconverged-cluster-operator/main/deploy/crds/kubevirt00.crd.yaml
customresourcedefinition.apiextensions.k8s.io/kubevirts.kubevirt.io created
+ kubectl create -f https://raw.githubusercontent.com/kubevirt/hyperconverged-cluster-operator/main/deploy/crds/node-maintenance00.crd.yaml
customresourcedefinition.apiextensions.k8s.io/nodemaintenances.kubevirt.io created
+ kubectl create -f https://raw.githubusercontent.com/kubevirt/hyperconverged-cluster-operator/main/deploy/crds/scheduling-scale-performance00.crd.yaml
customresourcedefinition.apiextensions.k8s.io/kubevirtcommontemplatesbundles.kubevirt.io created
+ kubectl create -f https://raw.githubusercontent.com/kubevirt/hyperconverged-cluster-operator/main/deploy/crds/scheduling-scale-performance01.crd.yaml
customresourcedefinition.apiextensions.k8s.io/kubevirtmetricsaggregations.kubevirt.io created
+ kubectl create -f https://raw.githubusercontent.com/kubevirt/hyperconverged-cluster-operator/main/deploy/crds/scheduling-scale-performance02.crd.yaml
customresourcedefinition.apiextensions.k8s.io/kubevirtnodelabellerbundles.kubevirt.io created
+ kubectl create -f https://raw.githubusercontent.com/kubevirt/hyperconverged-cluster-operator/main/deploy/crds/scheduling-scale-performance03.crd.yaml
customresourcedefinition.apiextensions.k8s.io/kubevirttemplatevalidators.kubevirt.io created
+ kubectl create -f https://raw.githubusercontent.com/kubevirt/hyperconverged-cluster-operator/main/deploy/crds/v2vvmware.crd.yaml
customresourcedefinition.apiextensions.k8s.io/v2vvmwares.kubevirt.io created
+ kubectl create -f https://raw.githubusercontent.com/kubevirt/hyperconverged-cluster-operator/main/deploy/cluster_role.yaml
role.rbac.authorization.k8s.io/cluster-network-addons-operator created
clusterrole.rbac.authorization.k8s.io/hyperconverged-cluster-operator created
clusterrole.rbac.authorization.k8s.io/cluster-network-addons-operator created
clusterrole.rbac.authorization.k8s.io/kubevirt-operator created
clusterrole.rbac.authorization.k8s.io/kubevirt-ssp-operator created
clusterrole.rbac.authorization.k8s.io/cdi-operator created
clusterrole.rbac.authorization.k8s.io/node-maintenance-operator created
+ kubectl create -f https://raw.githubusercontent.com/kubevirt/hyperconverged-cluster-operator/main/deploy/service_account.yaml
serviceaccount/cdi-operator created
serviceaccount/cluster-network-addons-operator created
serviceaccount/hyperconverged-cluster-operator created
serviceaccount/kubevirt-operator created
serviceaccount/kubevirt-ssp-operator created
serviceaccount/node-maintenance-operator created
+ kubectl create -f https://raw.githubusercontent.com/kubevirt/hyperconverged-cluster-operator/main/deploy/cluster_role_binding.yaml
rolebinding.rbac.authorization.k8s.io/cluster-network-addons-operator created
clusterrolebinding.rbac.authorization.k8s.io/hyperconverged-cluster-operator created
clusterrolebinding.rbac.authorization.k8s.io/cluster-network-addons-operator created
clusterrolebinding.rbac.authorization.k8s.io/kubevirt-operator created
clusterrolebinding.rbac.authorization.k8s.io/kubevirt-ssp-operator created
clusterrolebinding.rbac.authorization.k8s.io/cdi-operator created
clusterrolebinding.rbac.authorization.k8s.io/node-maintenance-operator created
+ kubectl create -f https://raw.githubusercontent.com/kubevirt/hyperconverged-cluster-operator/main/deploy/operator.yaml
deployment.apps/hyperconverged-cluster-operator created
deployment.apps/cluster-network-addons-operator created
deployment.apps/virt-operator created
deployment.apps/kubevirt-ssp-operator created
deployment.apps/cdi-operator created
deployment.apps/node-maintenance-operator created
+ kubectl create -f https://raw.githubusercontent.com/kubevirt/hyperconverged-cluster-operator/main/deploy/hco.cr.yaml
hyperconverged.hco.kubevirt.io/hyperconverged-cluster created

Hasilnya adalah namespace baru yang disebut kubevirt-hyperconvergeddengan semua operator, Sumber Daya Kustom (CR) dan objek yang dibutuhkan oleh KubeVirt:

$ kubectl get pods -n kubevirt-hyperconverged -o wide
NAME                                                  READY   STATUS    RESTARTS   AGE   IP                NODE                            NOMINATED NODE   READINESS GATES
bridge-marker-bwq6f                                   1/1     Running   0          12m   192.168.123.250   blog-master-00.kubevirt.local   <none>           <none>
bridge-marker-st7f7                                   1/1     Running   0          12m   192.168.123.232   blog-worker-00.kubevirt.local   <none>           <none>
cdi-apiserver-6f59996849-2hmm9                        1/1     Running   0          12m   10.244.1.17       blog-worker-00.kubevirt.local   <none>           <none>
cdi-deployment-57c68dbddc-c4n8l                       1/1     Running   0          12m   10.244.1.22       blog-worker-00.kubevirt.local   <none>           <none>
cdi-operator-64bbf595c-48v7k                          1/1     Running   1          24m   10.244.1.12       blog-worker-00.kubevirt.local   <none>           <none>
cdi-uploadproxy-5cbf6f4897-95fn5                      1/1     Running   0          12m   10.244.1.16       blog-worker-00.kubevirt.local   <none>           <none>
cluster-network-addons-operator-5956598648-5r79l      1/1     Running   0          24m   10.244.1.10       blog-worker-00.kubevirt.local   <none>           <none>
hyperconverged-cluster-operator-d567b5dd8-7d8wq       0/1     Running   0          24m   10.244.1.9        blog-worker-00.kubevirt.local   <none>           <none>
kube-cni-linux-bridge-plugin-kljvq                    1/1     Running   0          12m   10.244.1.19       blog-worker-00.kubevirt.local   <none>           <none>
kube-cni-linux-bridge-plugin-p6dkz                    1/1     Running   0          12m   10.244.0.7        blog-master-00.kubevirt.local   <none>           <none>
kube-multus-ds-amd64-84gcj                            1/1     Running   1          12m   10.244.1.23       blog-worker-00.kubevirt.local   <none>           <none>
kube-multus-ds-amd64-flq8s                            1/1     Running   2          12m   10.244.0.10       blog-master-00.kubevirt.local   <none>           <none>
kubemacpool-mac-controller-manager-675ff47587-pb57c   1/1     Running   0          11m   10.244.1.20       blog-worker-00.kubevirt.local   <none>           <none>
kubemacpool-mac-controller-manager-675ff47587-rf65j   1/1     Running   0          11m   10.244.0.8        blog-master-00.kubevirt.local   <none>           <none>
kubevirt-ssp-operator-7b5dcb45c4-qd54h                1/1     Running   0          24m   10.244.1.11       blog-worker-00.kubevirt.local   <none>           <none>
nmstate-handler-8r6d5                                 1/1     Running   0          11m   192.168.123.232   blog-worker-00.kubevirt.local   <none>           <none>
nmstate-handler-cq5vs                                 1/1     Running   0          11m   192.168.123.250   blog-master-00.kubevirt.local   <none>           <none>
node-maintenance-operator-7f8f78c556-q6flt            1/1     Running   0          24m   10.244.0.5        blog-master-00.kubevirt.local   <none>           <none>
ovs-cni-amd64-4z2qt                                   2/2     Running   0          11m   192.168.123.250   blog-master-00.kubevirt.local   <none>           <none>
ovs-cni-amd64-w8fzj                                   2/2     Running   0          11m   192.168.123.232   blog-worker-00.kubevirt.local   <none>           <none>
virt-api-7b7d486d88-hg4rd                             1/1     Running   0          11m   10.244.1.21       blog-worker-00.kubevirt.local   <none>           <none>
virt-api-7b7d486d88-r9s2d                             1/1     Running   0          11m   10.244.0.9        blog-master-00.kubevirt.local   <none>           <none>
virt-controller-754466fb86-js6r7                      1/1     Running   0          10m   10.244.1.25       blog-worker-00.kubevirt.local   <none>           <none>
virt-controller-754466fb86-mcxwd                      1/1     Running   0          10m   10.244.0.11       blog-master-00.kubevirt.local   <none>           <none>
virt-handler-cz7q2                                    1/1     Running   0          10m   10.244.0.12       blog-master-00.kubevirt.local   <none>           <none>
virt-handler-k6npr                                    1/1     Running   0          10m   10.244.1.24       blog-worker-00.kubevirt.local   <none>           <none>
virt-operator-84f5588df6-2k49b                        1/1     Running   0          24m   10.244.1.14       blog-worker-00.kubevirt.local   <none>           <none>
virt-operator-84f5588df6-zzrsb                        1/1     Running   1          24m   10.244.0.4        blog-master-00.kubevirt.local   <none>           <none>

Catatan

Hanya setelah HCO sepenuhnya diterapkan, VirtualMachinesdapat dikelola dari konsol web. Ini karena konsol web dikirimkan dengan plugin khusus yang mendeteksi instalasi KubeVirt melalui keberadaan KubeVirt Custom Resource Definition (CRD) di kluster. Setelah terdeteksi, secara otomatis akan menampilkan opsi baru di bawah menu panel kiri Workload untuk mengelola sumber daya KubeVirt.

Perlu dicatat bahwa ada upaya berkelanjutan untuk mengadaptasi antarmuka pengguna konsol web OpenShift di Kubernetes asli selain OKD atau OpenShift sebagaimana yang diharapkan. Sebagai contoh , beberapa hari yang lalu, opsi Templat Mesin Virtual yang tidak berlaku dari menu Beban Kerja telah dihapus dan Panduan VM dibuat berfungsi penuh saat Kubernetes asli terdeteksi.

Instalasi dalam kontainer

Konsol web OKD sebenarnya berjalan sebagai pod di OKD beserta penyebarannya, layanan, dan semua objek yang dibutuhkan untuk berjalan dengan baik. Idenya adalah memanfaatkan konsol web OKD yang terkontainerisasi yang tersedia dan menjalankannya di salah satu node kluster Kubernetes asli.

Perlu diperhatikan bahwa tidak seperti instalasi biner, pod harus berjalan di node dalam cluster Kubernetes kita

Menjalankan konsol web OKD sebagai aplikasi Kubernetes asli akan mendapatkan keuntungan dari semua keunggulan Kubernetes: penerapan bergulir, pemutakhiran mudah, ketersediaan tinggi, skalabilitas, mulai ulang otomatis jika terjadi kegagalan, pemeriksaan keaktifan dan kesiapan... Contoh tentang betapa mudahnya memperbarui konsol web OKD ke versi yang lebih baru juga akan disajikan.

Menyebarkan konsol web OKD

Untuk mengonfigurasikan penyebaran konsol web OKD, objek Kubernetes yang tepat harus dibuat. Seperti yang ditunjukkan pada Mengompilasi konsol web OKD sebelumnya , ada beberapa variabel lingkungan yang perlu ditetapkan. Saat menangani objek Kubernetes, variabel-variabel ini harus disertakan dalam objek penyebaran.

File YAML yang berisi objek deployment dan layanan yang menyerupai instalasi biner sudah disiapkan. File ini dapat diunduh dari sini dan dikonfigurasikan tergantung pada instalasi lokal pengguna.

Kemudian, buat akun layanan khusus ( konsol ) untuk menjalankan konsol web OpenShift jika belum dibuat sebelumnya dan berikan izin admin klaster:

kubectl create serviceaccount console -n kube-system
kubectl create clusterrolebinding console --clusterrole=cluster-admin --serviceaccount=kube-system:console -n kube-system

Berikutnya, ekstrak nama rahasia token yang terkait dengan akun layanan konsol:

$ kubectl get serviceaccount console --namespace=kube-system -o jsonpath='{.secrets[0].name}'
console-token-ppfc2

Terakhir, file YAML yang diunduh harus dimodifikasi dengan menetapkan nilai yang tepat ke bagian token . Perintah berikut dapat membantu mengekstrak nama token dari konsol pengguna, yang merupakan pengguna yang dibuat oleh

apiVersion: apps/v1
kind: Deployment
metadata:
  name: console-deployment
  namespace: kube-system
  labels:
    app: console
spec:
  replicas: 1
  selector:
    matchLabels:
      app: console
  template:
    metadata:
      labels:
        app: console
    spec:
      containers:
        - name: console-app
          image: quay.io/openshift/origin-console:4.2
          env:
            - name: BRIDGE_USER_AUTH
              value: disabled # no authentication required
            - name: BRIDGE_K8S_MODE
              value: off-cluster
            - name: BRIDGE_K8S_MODE_OFF_CLUSTER_ENDPOINT
              value: https://kubernetes.default #master api
            - name: BRIDGE_K8S_MODE_OFF_CLUSTER_SKIP_VERIFY_TLS
              value: "true" # no tls enabled
            - name: BRIDGE_K8S_AUTH
              value: bearer-token
            - name: BRIDGE_K8S_AUTH_BEARER_TOKEN
              valueFrom:
                secretKeyRef:
                  name: console-token-ppfc2 # console serviceaccount token
                  key: token

---
kind: Service
apiVersion: v1
metadata:
  name: console-np-service
  namespace: kube-system
spec:
  selector:
    app: console
  type: NodePort # nodePort configuration
  ports:
    - name: http
      port: 9000
      targetPort: 9000
      nodePort: 30036
      protocol: TCP

---

Terakhir, objek penyebaran dan layanan dapat dibuat. Penyebaran akan memicu pengunduhan dan pemasangan citra konsol web OKD.

$ kubectl create -f okd-web-console-install.yaml
deployment.apps/console-deployment created
service/console-service created

$ kubectl get pods -o wide -n kube-system
NAME                                                    READY   STATUS    RESTARTS   AGE     IP                NODE                            NOMINATED NODE   READINESS GATES
console-deployment-59d8956db5-td462                     1/1     Running   0          4m49s   10.244.0.13       blog-master-00.kubevirt.local   <none>           <none>

$ kubectl get svc -o wide -n kube-system
NAME                 TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                  AGE
console-np-service   NodePort    10.96.195.45   <none>        9000:30036/TCP           19m
kube-dns             ClusterIP   10.96.0.10     <none>        53/UDP,53/TCP,9153/TCP   20d

Setelah berjalan, koneksi ke nodeportobjek layanan yang ditentukan dapat dibuat. Dapat diperiksa apakah konsol web OKD sudah aktif dan menjalankan versi 4.2.

OKE 4.2

Dapat diverifikasi bahwa memungkinkan untuk melihat dan mengelola VirtualMachinesyang berjalan di dalam kluster Kubernetes asli.

Vmr OKD

Tingkatkan konsol web OKD

Proses pemutakhiran ini sangat mudah. ​​Semua versi citra konsol OpenShift yang tersedia dapat dilihat di repositori citra kontainer OpenShift resmi . Kemudian, objek penerapan harus dimodifikasi agar dapat menjalankan versi konsol web OKD yang diinginkan.

Vmr OKD

Dalam kasus ini, konsol akan diperbarui ke versi terbaru, yaitu 4.5.0/4.5. Perhatikan bahwa ini tidak ditautkan dengan tag latest , sebenarnya latesttag sama dengan version4.4 . Proses pemutakhiran hanya melibatkan pemutakhiran nilai gambar ke gambar kontainer yang diinginkan: quay.io/openshift/origin-console:4.5dan simpan.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: console-deployment
  namespace: kube-system
  labels:
    app: console
spec:
  replicas: 1
  selector:
    matchLabels:
      app: console
  template:
    metadata:
      labels:
        app: console
    spec:
      containers:
        - name: console-app
          image: quay.io/openshift/origin-console:4.5 #new image version
          env:
            - name: BRIDGE_USER_AUTH
              value: disabled
            - name: BRIDGE_K8S_MODE
              value: off-cluster
            - name: BRIDGE_K8S_MODE_OFF_CLUSTER_ENDPOINT
              value: https://kubernetes.default
            - name: BRIDGE_K8S_MODE_OFF_CLUSTER_SKIP_VERIFY_TLS
              value: "true"
            - name: BRIDGE_K8S_AUTH
              value: bearer-token
            - name: BRIDGE_K8S_AUTH_BEARER_TOKEN
              valueFrom:
                secretKeyRef:
                  name: console-token-ppfc2
                  key: token

Setelah penerapan disimpan, pod baru dengan versi konsol web OKD yang dikonfigurasi akan dibuat dan pada akhirnya akan menggantikan yang lama.

$ kubectl get pods -n kube-system
NAME                                                    READY   STATUS              RESTARTS   AGE
console-deployment-5588f98644-bw7jr                     0/1     ContainerCreating   0          5s
console-deployment-59d8956db5-td462                     1/1     Running             0          16h

Konsol web OKD 4.5

Dalam video di bawah, prosedur yang dijelaskan di bagian ini diperlihatkan.

Ringkasan

Dalam posting ini, dua cara untuk menginstal konsol web OKD guna mengelola penyebaran KubeVirt dalam kluster Kubernetes asli telah dieksplorasi . Menjalankan konsol web OKD akan memungkinkan Anda untuk membuat, mengelola, dan menghapus mesin virtual yang berjalan dalam kluster asli dari antarmuka pengguna yang mudah digunakan. Anda juga akan dapat mendelegasikan pembuatan dan pemeliharaan mesin virtual mereka kepada pengembang atau pengguna lain tanpa harus memiliki pengetahuan mendalam tentang Kubernetes.

Secara pribadi, saya ingin melihat lebih banyak antarmuka pengguna untuk mengelola dan mengonfigurasi penerapan KubeVirt dan mesin virtualnya. Dalam posting sebelumnya, Opsi antarmuka pengguna KubeVirt , beberapa opsi dieksplorasi, namun hanya konsol web OKD yang ditemukan terintegrasi secara mendalam dengan KubeVirt.

Ping kami atau jangan ragu untuk mengomentari posting ini apabila ada opsi lain yang belum kami perhatikan.

Referensi