一、簡介
Velero 是一款雲原生時代的災難恢復和遷移工具,採用 Go 語言編寫,並在 github 上進行了開源,利用 velero 使用者可以安全的備份、恢復和遷移 Kubernetes 叢集資源和持久卷。
- 開源地址:https://github.com/vmware-tanzu/velero
- 官方文件:https://velero.io/docs/v1.11/
1.1 支援的版本列表
1.2 Velero元件
Velero 元件一共分兩部分,分別是服務端和客戶端。
- 服務端:執行在你 Kubernetes 的叢集中
- 客戶端:是一些執行在本地的命令列的工具,需要已配置好 kubectl 及叢集 kubeconfig 的機器上
1.3 velero備份流程
- velero客戶端呼叫kubernetes API Server建立backup任務
- Backup控制器基於watch機制透過Api Server獲取到備份任務
- Backup控制器開始執行備份動作,會透過請求Api Server獲取到需要備份的資料
- Backup 控制器將獲取到的資料備份到指定的物件儲存server端
1.4 Velero後端儲存
Velero
支援兩種關於後端儲存的CRD
,分別是BackupStorageLocation
和VolumeSnapshotLocation
。
1.4.1 BackupStorageLocation
主要用來定義 Kubernetes 叢集資源的資料存放位置,也就是叢集物件資料,不是 PVC 的資料。主要支援的後端儲存是 S3 相容的儲存,比如:Mino 和阿里雲 OSS 等。
1.4.2 VolumeSnapshotLocation
主要用來給 PV 做快照,需要雲提供商提供外掛。阿里雲已經提供了外掛,這個需要使用 CSI 等儲存機制。你也可以使用專門的備份工具 Restic
,把 PV 資料備份到阿里雲 OSS 中去(安裝時需要自定義選項)。
Restic 是一款 GO 語言開發的資料加密備份工具,顧名思義,可以將本地資料加密後傳輸到指定的倉庫。支援的倉庫有 Local、SFTP、Aws S3、Minio、OpenStack Swift、Backblaze B2、Azure BS、Google Cloud storage、Rest Server。
二、安裝velero客戶端
在 Github Release 頁面下載指定的 velero 二進位制客戶端安裝包,比如這裡我們下載我們k8s叢集對應的版本為 v1.11.1
版本列表:https://github.com/vmware-tanzu/velero/releases
2.1 安裝velero命令程式
$ wget https://github.com/vmware-tanzu/velero/releases/download/v1.11.1/velero-v1.11.1-linux-amd64.tar.gz
$ tar zxf velero-v1.11.1-linux-amd64.tar.gz
$ mv velero-v1.11.1-linux-amd64/velero /usr/bin/
$ velero -h
# 啟用命令補全
$ source <(velero completion bash)
$ velero completion bash > /etc/bash_completion.d/velero
2.2 安裝minio
Velero支援很多種儲存外掛,可檢視:Velero Docs - Providers獲取外掛資訊,我們這裡使用minio作為S3相容的物件儲存提供程式。您也可以在任意地方部署Minio物件儲存,只需要保證K8S叢集可以訪問到即可。
根據具體的業務場景選擇不同的儲存方式
# cat velero-v1.11.1-linux-amd64/examples/minio/00-minio-deployment.yaml
# Copyright 2017 the Velero contributors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
---
apiVersion: v1
kind: Namespace
metadata:
name: velero
---
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: velero
name: minio
labels:
component: minio
spec:
strategy:
type: Recreate
selector:
matchLabels:
component: minio
template:
metadata:
labels:
component: minio
spec:
volumes:
- name: storage
emptyDir: {}
- name: config
emptyDir: {}
containers:
- name: minio
image: minio/minio:latest
imagePullPolicy: IfNotPresent
args:
- server
- /storage
- --config-dir=/config
- --console-address=:9001
env:
- name: MINIO_ACCESS_KEY
value: "minio"
- name: MINIO_SECRET_KEY
value: "minio123"
ports:
- containerPort: 9000
volumeMounts:
- name: storage
mountPath: "/storage"
- name: config
mountPath: "/config"
---
apiVersion: v1
kind: Service
metadata:
namespace: velero
name: minio
labels:
component: minio
spec:
# ClusterIP is recommended for production environments.
# Change to NodePort if needed per documentation,
# but only if you run Minio in a test/trial environment, for example with Minikube.
type: NodePort
ports:
- name: api
port: 9000
targetPort: 9000
nodePort: 32000
- name: console
port: 9001
targetPort: 9001
nodePort: 32001
selector:
component: minio
---
apiVersion: batch/v1
kind: Job
metadata:
namespace: velero
name: minio-setup
labels:
component: minio
spec:
template:
metadata:
name: minio-setup
spec:
restartPolicy: OnFailure
volumes:
- name: config
emptyDir: {}
containers:
- name: mc
image: minio/mc:latest
imagePullPolicy: IfNotPresent
command:
- /bin/sh
- -c
- "mc --config-dir=/config config host add velero http://minio:9000 minio minio123 && mc --config-dir=/config mb -p velero/velero"
volumeMounts:
- name: config
mountPath: "/config"
2.3 建立minio應用
# 建立velero名稱空間
$ kubectl create namespace velero
# 建立minio資源
$ ]# kubectl apply -f velero-v1.11.1-linux-amd64/examples/minio/00-minio-deployment.yaml
# 檢視部署狀態
$ kubectl get sts,pod,svc -n velero
NAME READY STATUS RESTARTS AGE
pod/minio-78f994f86c-g86bp 1/1 Running 0 9m34s
pod/minio-setup-27jds 0/1 Completed 3 9m34s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/minio NodePort 10.68.151.238 <none> 9000:31657/TCP,9001:30282/TCP 9m34s
# 開放NodePort埠
$ kubectl patch svc minio -n velero -p '{"spec": {"type": "NodePort"}}'
$ kubectl patch svc minio -n velero --type='json' -p='[{"op": "replace", "path": "/spec/ports/0/nodePort", "value":9000},{"op": "replace", "path": "/spec/ports/1/nodePort", "value":9001}]'
]# kubectl get svc -n velero
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
minio NodePort 10.68.151.238 <none> 9000:31657/TCP,9001:30282/TCP 3m12s
透過瀏覽器訪問伺服器IP:30282
,並使用賬號minio
密碼minio123
登入驗證。
2.4 物理機安裝minio
當然如果需要在不同 Kubernetes 和儲存池叢集備份與恢復資料,需要將 minio 服務端安裝在 Kubernetes 叢集外,保證在叢集發生災難性故障時,不會對備份資料產生影響,可以透過二進位制的方式進行安裝。
在待安裝 minio 的伺服器上下載二進位制包
➜ ~ wget https://dl.minio.io/server/minio/release/linux-amd64/minio
➜ ~ chmod +x minio
➜ ~ sudo mv minio /usr/local/bin/
➜ ~ minio --version
準備物件儲存的磁碟,這裡我們跳過該步驟,可以使用 systemd 來方便管理 minio 服務,對於使用 systemd init 系統執行系統的人,請建立用於執行 minio 服務的使用者和組:
➜ ~ sudo groupadd --system minio
➜ ~ sudo useradd -s /sbin/nologin --system -g minio minio
為 /data
(上述步驟準備好的磁碟掛載位置)目錄提供 minio 使用者所有權:
➜ ~ sudo chown -R minio:minio /data/
為 minio 建立 systemd 服務單元檔案:
➜ ~ vi /etc/systemd/system/minio.service
[Unit]
Description=Minio
Documentation=https://docs.minio.io
Wants=network-online.target
After=network-online.target
AssertFileIsExecutable=/usr/local/bin/minio
[Service]
WorkingDirectory=/data
User=minio
Group=minio
EnvironmentFile=-/etc/default/minio
ExecStartPre=/bin/bash -c "if [ -z \"${MINIO_VOLUMES}\" ]; then echo \"Variable MINIO_VOLUMES not set in /etc/default/minio\"; exit 1; fi"
ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES
# Let systemd restart this service always
Restart=always
# Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=65536
# Disable timeout logic and wait until process is stopped
TimeoutStopSec=infinity
SendSIGKILL=no
[Install]
WantedBy=multi-user.target
建立 minio 環境檔案 /etc/default/minio
:
# Volume to be used for Minio server.
MINIO_VOLUMES="/data"
# Use if you want to run Minio on a custom port.
MINIO_OPTS="--address :9000"
# Access Key of the server.
MINIO_ACCESS_KEY=minio
# Secret key of the server.
MINIO_SECRET_KEY=minio123
其中 MINIO_ACCESS_KEY
為長度至少為3個字元的訪問金鑰,MINIO_SECRET_KEY
為最少8個字元的金鑰。重新載入 systemd 並啟動 minio 服務:
➜ ~ sudo systemctl daemon-reload
➜ ~ sudo systemctl start minio
關於 minio 的更多使用方法可以參考官方文件 https://docs.min.io/ 瞭解更多。
三 、安裝 velero 服務端
我們可以使用 velero 客戶端來安裝服務端,也可以使用 Helm Chart 來進行安裝,比如這裡我們用客戶端來安裝,velero 命令預設讀取 kubectl 配置的叢集上下文,所以前提是 velero 客戶端所在的節點有可訪問叢集的 kubeconfig 配置。
3.1 建立金鑰
首先準備金鑰檔案,在當前目錄建立一個空白文字檔案,內容如下所示:
$ cat > credentials-velero <<EOF
[default]
aws_access_key_id = minio
aws_secret_access_key = minio123
EOF
3.2 安裝velero到k8s叢集
替換為之前步驟中 minio 的對應 access key id 和 secret access key如果 minio 安裝在 kubernetes 叢集內時按照如下命令安裝 velero 服務端:
$ velero install \
--provider aws \
--image velero/velero:v1.11.1 \
--plugins velero/velero-plugin-for-aws:v1.7.1 \
--bucket velero \
--secret-file ./credentials-velero \
--use-node-agent \
--use-volume-snapshots=false \
--namespace velero \
--backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://minio:9000 \
--wait
# 執行install命令後會建立一系列清單,包括CustomResourceDefinition、Namespace、Deployment等。
# velero install .... --dry-run -o yaml > velero_deploy.yaml 如果為私倉,可以透過--dry-run 匯出 YAML 檔案調整在應用。
# 可使用如下命令檢視執行日誌
$ kubectl logs deployment/velero -n velero
# 檢視velero建立的api物件
$ kubectl api-versions | grep velero
velero.io/v1
# 檢視備份位置
$ velero backup-location get
NAME PROVIDER BUCKET/PREFIX PHASE LAST VALIDATED ACCESS MODE DEFAULT
default aws velero Available 2023-03-28 15:45:30 +0800 CST ReadWrite true
#解除安裝命令
# velero uninstall --namespace velero
You are about to uninstall Velero.
Are you sure you want to continue (Y/N)? y
Waiting for velero namespace "velero" to be deleted
............................................................................................................................................................................................
Velero namespace "velero" deleted
Velero uninstalled ⛵
選項說明:
--kubeconfig
(可選):指定kubeconfig
認證檔案,預設使用.kube/config
;--provider
:定義外掛提供方;--image
:定義執行velero的映象,預設與velero客戶端一致;--plugins
:指定使用aws s3相容的外掛映象;--bucket
:指定物件儲存Bucket桶名稱;--secret-file
:指定物件儲存認證檔案;--use-node-agent
:建立Velero Node Agent守護程序,託管FSB模組;--use-volume-snapshots
:是否啟使用快照;--namespace
:指定部署的namespace名稱,預設為velero;--backup-location-config
:指定物件儲存地址資訊;
aws外掛與velero版本對應關係:
3.3 解除安裝velero
如果您想從叢集中完全解除安裝Velero,則以下命令將刪除由velero install
建立的所有資源:
kubectl delete namespace/velero clusterrolebinding/velero
kubectl delete crds -l component=velero
四、備份與恢復
備份命令:velero create backup NAME [flags]
backup選項:
--exclude-namespaces stringArray
: 要從備份中排除的名稱空間--exclude-resources stringArray
: 要從備份中排除的資源,如storageclasses.storage.k8s.io
--include-cluster-resources optionalBool[=true]
: 包含叢集資源型別--include-namespaces stringArray
: 要包含在備份中的名稱空間(預設'*')--include-resources stringArray
: 備份中要包括的資源--labels mapStringString
: 給這個備份加上標籤-o, --output string
: 指定輸出格式,支援'table'、'json'和'yaml';-l, --selector labelSelector
: 對指定標籤的資源進行備份--snapshot-volumes optionalBool[=true]
: 對 PV 建立快照--storage-location string
: 指定備份的位置--ttl duration
: 備份資料多久刪掉--volume-snapshot-locations strings
: 指定快照的位置,也就是哪一個公有云驅動
4.1 備份
4.1.1 使用官方案例建立測試應用
$ kubectl apply -f examples/nginx-app/base.yaml
namespace/nginx-example created
deployment.apps/nginx-deployment created
service/my-nginx created
# 檢視資源清單
$ kubectl get all -n nginx-example
NAME READY STATUS RESTARTS AGE
pod/nginx-deployment-5c844b66c8-7fsb9 0/1 ContainerCreating 0 32s
pod/nginx-deployment-5c844b66c8-dh4bn 1/1 Running 0 4m53s
pod/nginx-deployment-5c844b66c8-q2dc5 0/1 Terminating 0 4m53s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/my-nginx LoadBalancer 10.68.79.207 <pending> 80:32435/TCP 4m53s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/nginx-deployment 1/2 2 1 4m53s
NAME DESIRED CURRENT READY AGE
replicaset.apps/nginx-deployment-5c844b66c8 2 2 1 4m53s
4.1.2 備份測試應用
$ velero backup create nginx-backup --include-namespaces nginx-example
Backup request "nginx-backup" submitted successfully.
Run `velero backup describe nginx-backup` or `velero backup logs nginx-backup` for more details.
選項:
--include-namespaces
:指定名稱空間--selector
:標籤選擇器,如app=nginx
4.1.3 檢視備份列表
$ velero backup get
NAME STATUS ERRORS WARNINGS CREATED EXPIRES STORAGE LOCATION SELECTOR
nginx-backup Completed 0 0 2024-04-06 21:47:16 +0800 CST 29d default <none>
# 檢視備份詳細資訊
$ velero backup describe nginx-backup
# 檢視備份日誌
$ velero backup logs nginx-backup
登入minio控制檯檢視備份內容
4.1.4 定時備份指南
# 使用cron表示式備份
$ velero schedule create nginx-daily --schedule="0 1 * * *" --include-namespaces nginx-example
# 使用一些非標準的速記 cron 表示式
$ velero schedule create nginx-daily --schedule="@daily" --include-namespaces nginx-example
# 手動觸發定時任務
$ velero backup create --from-schedule nginx-daily
更多cron示例請參考:cron package’s documentation
4.2 恢復
4.2.1 模擬災難
# 刪除nginx-example名稱空間和資源
$ kubectl delete namespace nginx-example
# 檢查是否刪除
$ kubectl get all -n nginx-example
No resources found in nginx-example namespace.
4.2.2 恢復資源
$ velero backup get
NAME STATUS ERRORS WARNINGS CREATED EXPIRES STORAGE LOCATION SELECTOR
nginx-backup Completed 0 0 2024-04-06 21:47:16 +0800 CST 29d default <none>
$ velero restore create --from-backup nginx-backup
Restore request "nginx-backup-20240406215611" submitted successfully.
Run `velero restore describe nginx-backup-20240406215611` or `velero restore logs nginx-backup-20240406215611` for more details.
4.2.3 檢查恢復的資源
$ velero restore get
NAME BACKUP STATUS STARTED COMPLETED ERRORS WARNINGS CREATED SELECTOR
nginx-backup-20240406215611 nginx-backup Completed 2024-04-06 21:56:11 +0800 CST 2024-04-06 21:56:12 +0800 CST 0 2 2024-04-06 21:56:11 +0800 CST <none>
# 檢視詳細資訊
$ velero restore describe nginx-backup-20240406215611
# 檢查資源狀態
$ kubectl get all -n nginx-example
NAME READY STATUS RESTARTS AGE
pod/nginx-deployment-5c844b66c8-7fsb9 1/1 Running 0 67s
pod/nginx-deployment-5c844b66c8-dh4bn 1/1 Running 0 67s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/my-nginx LoadBalancer 10.68.171.131 <pending> 80:30635/TCP 67s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/nginx-deployment 2/2 2 2 67s
NAME DESIRED CURRENT READY AGE
replicaset.apps/nginx-deployment-5c844b66c8 2 2 2 67s
五、專案遷移實戰
5.1、專案介紹
我們將使用Velero
快速完成雲原生應用及PV資料的遷移實踐過程,在本文示例中,我們將A叢集中的一個MOS應用遷移到叢集B中,其中資料備份採用自建Minio物件儲存服務。
5.1.1 環境要求
- 遷移專案最好保證兩個Kubernetes叢集版本一致。
- 為了保證PV資料成功遷移,兩邊需要安裝好相同名字的
StorageClass
。 - 可以自己部署Minio,也可以使用公有云的物件儲存服務,如華為的OBS、阿里的OSS等。
- 本案例將叢集A中app-system名稱空間中的服務及PV資料遷移到叢集B中。
5.1.2 專案環境
角色 | 叢集IP | 叢集版本 | 部署軟體 |
---|---|---|---|
K8S 叢集A | 192.168.19.128 192.168.19.129 192.168.19.130 192.168.19.131 |
v1.23.1 | velero、istio-system |
K8S 叢集B | 192.168.19.140 192.168.19.141 192.168.19.142 |
v1.23.17 | velero、minio |
5.1.3 專案說明
我們需要將叢集A中 istio-system
空間的所有資源和資料全部遷移到叢集B中,該專案包括了deployment
、statefulset
、service
、ingress
、job
、cronjob
、secret
、configmap
、pv
、pvc
。
# 專案清單資訊
$ kubectl get deployment,sts,pvc -n istio-system
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/grafana 1/1 1 1 62d
deployment.apps/istio-egressgateway 1/1 1 1 62d
deployment.apps/istio-ingressgateway 1/1 1 1 62d
deployment.apps/istiod 1/1 1 1 62d
deployment.apps/jaeger 1/1 1 1 62d
deployment.apps/kiali 1/1 1 1 62d
deployment.apps/prometheus 1/1 1 1 62d
5.2 準備物件儲存
按照2.2和2.3的方法在叢集B(192.168.19.140)中建立minio
應用,用來存放備份資料。
$ kubectl get deployment,svc -n velero
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/minio 1/1 1 1 5m27s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/minio NodePort 10.96.3.195 <none> 9000:32000/TCP,9001:32001/TCP 4m44s
5.3 安裝velero
請確保在叢集A和叢集B中已經安裝好velero客戶端,請參考2.1 安裝velero命令程式
5.3.1 在叢集A中安裝velero服務
$ cat > credentials-velero <<EOF
[default]
aws_access_key_id = minio
aws_secret_access_key = minio123
EOF
$ velero install \
--provider aws \
--image velero/velero:v1.11.1 \
--plugins velero/velero-plugin-for-aws:v1.7.1 \
--bucket velero \
--secret-file ./credentials-velero \
--use-node-agent \
--use-volume-snapshots=false \
--namespace velero \
--backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://192.168.19.140:32000 \
--wait
注意:其中S3
的地址指向叢集B(192.168.19.140)的minio物件儲存。
5.3.2 在叢集B種安裝velero服務
$ cat > credentials-velero <<EOF
[default]
aws_access_key_id = minio
aws_secret_access_key = minio123
EOF
$ velero install \
--provider aws \
--image velero/velero:v1.11.1 \
--plugins velero/velero-plugin-for-aws:v1.7.1 \
--bucket velero \
--secret-file ./credentials-velero \
--use-node-agent \
--use-volume-snapshots=false \
--namespace velero \
--backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://minio:9000 \
--wait
注意:其中S3
的地址指向本叢集minio物件儲存的svc地址。
5.4 備份MOS專案
$ velero backup create istio-backup \
--default-volumes-to-fs-backup \
--include-namespaces istio-system
Backup request "istio-backup" submitted successfully.
Run `velero backup describe istio-backup` or `velero backup logs istio-backup` for more details.
# 檢視備份狀態;可以看到狀態正在進行中
$ velero backup get
NAME STATUS ERRORS WARNINGS CREATED EXPIRES STORAGE LOCATION SELECTOR
istio-backup InProgress 0 0 2024-04-06 22:33:36 +0800 CST 29d default <none>
# 等待狀態為Completed
$ velero backup get
NAME STATUS ERRORS WARNINGS CREATED EXPIRES STORAGE LOCATION SELECTOR
istio-backup Completed 0 0 2024-04-06 22:33:36 +0800 CST 29d default <none>
--default-volumes-to-fs-backup
:預設將所有PV捲進行備份,詳情檢視官方文件。--include-namespaces
:指定要備份的名稱空間
登入minio控制檯上可以看到備份的檔案:
5.5 恢復到叢集B
# 到叢集B中檢視備份資源
$ velero backup get
NAME STATUS ERRORS WARNINGS CREATED EXPIRES STORAGE LOCATION SELECTOR
istio-backup Completed 0 0 2024-04-06 22:33:36 +0800 CST 29d default <none>
# 執行恢復命令
$ velero restore create --from-backup istio-backup
Restore request "istio-backup-20240406224033" submitted successfully.
Run `velero restore describe istio-backup-20240406224033` or `velero restore logs istio-backup-20240406224033` for more details.
# 檢視恢復任務; 可以看到任務正在進行中,等待為Completed表示恢復完成
$ velero restore get
NAME BACKUP STATUS STARTED COMPLETED ERRORS WARNINGS CREATED SELECTOR
istio-backup-20240406224033 istio-backup InProgress 2024-04-06 22:40:33 +0800 CST <nil> 0 0 2024-04-06 22:40:33 +0800 CST <none>
5.6 驗證服務和資料
$ kubectl get all -n istio-system
NAME READY STATUS RESTARTS AGE
pod/grafana-b854c6c8-cn244 1/1 Running 0 7m50s
pod/istio-egressgateway-85df6b84b7-ccqmg 1/1 Running 0 7m50s
pod/istio-ingressgateway-58ffd5967-9kqf7 1/1 Running 0 7m49s
pod/istiod-8d74787f-7skg6 1/1 Running 0 7m49s
pod/jaeger-5556cd8fcf-5f75s 1/1 Running 0 7m49s
pod/kiali-648847c8c4-rztws 1/1 Running 0 7m49s
pod/prometheus-7b8b9dd44c-nzff4 2/2 Running 0 7m49s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/grafana ClusterIP 10.96.3.122 <none> 3000/TCP 7m47s
service/istio-egressgateway ClusterIP 10.96.0.74 <none> 80/TCP,443/TCP 7m47s
service/istio-ingressgateway LoadBalancer 10.96.2.36 <pending> 15021:30083/TCP,80:32311/TCP,443:32260/TCP,31400:30872/TCP,15443:32641/TCP,31401:31020/TCP 7m47s
service/istiod ClusterIP 10.96.2.246 <none> 15010/TCP,15012/TCP,443/TCP,15014/TCP 7m47s
service/jaeger-collector ClusterIP 10.96.1.101 <none> 14268/TCP,14250/TCP,9411/TCP 7m47s
service/kiali ClusterIP 10.96.3.3 <none> 20001/TCP,9090/TCP 7m47s
service/prometheus ClusterIP 10.96.1.113 <none> 9090/TCP 7m47s
service/tracing NodePort 10.96.1.187 <none> 80:31721/TCP,16685:30582/TCP 7m47s
service/zipkin ClusterIP 10.96.1.44 <none> 9411/TCP 7m46s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/grafana 1/1 1 1 7m45s
deployment.apps/istio-egressgateway 1/1 1 1 7m45s
deployment.apps/istio-ingressgateway 1/1 1 1 7m45s
deployment.apps/istiod 1/1 1 1 7m45s
deployment.apps/jaeger 1/1 1 1 7m45s
deployment.apps/kiali 0/1 1 0 7m45s
deployment.apps/prometheus 1/1 1 1 7m44s
NAME DESIRED CURRENT READY AGE
replicaset.apps/grafana-b854c6c8 1 1 1 7m49s
replicaset.apps/istio-egressgateway-85df6b84b7 1 1 1 7m49s
replicaset.apps/istio-ingressgateway-58ffd5967 1 1 1 7m49s
replicaset.apps/istio-ingressgateway-6bb8fb6549 0 0 0 7m49s
replicaset.apps/istiod-8d74787f 1 1 1 7m49s
replicaset.apps/jaeger-5556cd8fcf 1 1 1 7m48s
replicaset.apps/kiali-648847c8c4 1 1 0 7m48s
replicaset.apps/prometheus-7b8b9dd44c 1 1 1 7m48s