https://kubevirt.io/2020/OKD-web-console-install.html
Mengelola KubeVirt dengan Konsol Web OpenShift
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:
Menjalankan konsol web sebagai biner . Metode instalasi ini adalah satu-satunya yang dijelaskan dalam repositori konsol web OKD . Secara pribadi, tampaknya lebih ditujukan kepada pengembang yang ingin mengulang proses pengembangan dengan cepat sambil meretas konsol web. Pendekatan pengembangan ini dijelaskan dalam bagian Kubernetes asli dari repositori kode konsol OpenShift.
Menjalankan konsol web sebagai pod lain . Idenya adalah memanfaatkan versi yang dikontainerisasi yang tersedia sebagai origin-console dalam repositori citra kontainer OpenShift dan menjalankannya di dalam kluster Kubernetes sebagai aplikasi biasa, misalnya sebagai pod.
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
kubectl
dalam 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.sh
yang 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.
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 KubeVirtVirtualMachineInstances
. 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.sh
skrip 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.sh
yang 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.
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.sh
file dan ubah baris yang dimulai dengan secretname
seperti 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.sh
berkas 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-hyperconverged
dengan 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, VirtualMachines
dapat 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 nodeport
objek layanan yang ditentukan dapat dibuat. Dapat diperiksa apakah konsol web OKD sudah aktif dan menjalankan versi 4.2.
Dapat diverifikasi bahwa memungkinkan untuk melihat dan mengelola VirtualMachines
yang berjalan di dalam kluster Kubernetes asli.
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.
Dalam kasus ini, konsol akan diperbarui ke versi terbaru, yaitu 4.5.0/4.5. Perhatikan bahwa ini tidak ditautkan dengan tag latest , sebenarnya latest
tag sama dengan version4.4
. Proses pemutakhiran hanya melibatkan pemutakhiran nilai gambar ke gambar kontainer yang diinginkan: quay.io/openshift/origin-console:4.5
dan 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
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
- Opsi antarmuka pengguna KubeVirt
- Mengelola KubeVirt dengan konsol web OpenShift yang berjalan sebagai aplikasi kontainer di Youtube
- Mengelola KubeVirt dengan konsol web OpenShift yang berjalan sebagai biner terkompilasi di Youtube
- Blogpost Laboratorium Kubevirt 1: Gunakan Kubevirt
- Video operasi dasar KubeVirt di Youtube
- Catatan instalasi Kubevirt
- Langkah pertama dengan KubeVirt - Skenario Katacoda
Tidak ada komentar:
Posting Komentar