kubernetes-notes
  • 目录
    • 序言
  • 云原生体系
    • 12-Factor
    • K8S知识体系
  • 安装与配置
    • 部署k8s集群
      • 使用kubeadm安装生产环境kubernetes
      • 使用kubespray安装kubernetes
      • 使用minikube安装kubernetes
      • 使用kind安装kubernetes
    • k8s证书及秘钥
    • k8s版本说明
  • 基本概念
    • kubernetes架构
      • Kubernetes总架构图
      • 基于Docker及Kubernetes技术构建容器云(PaaS)平台概述
    • kubernetes对象
      • 理解kubernetes对象
      • kubernetes常用对象说明
    • Pod
      • Pod介绍
      • Pod定义文件
      • Pod生命周期
      • Pod健康检查
      • Pod存储卷
      • Pod控制器
      • Pod伸缩与升级
    • 配置
      • ConfigMap
    • Workload
  • 核心原理
    • 核心组件
      • Api Server
      • Controller Manager
      • Scheduler
      • Kubelet
    • 流程图
      • Pod创建流程
      • PVC创建流程
  • 容器网络
    • Docker网络
    • K8S网络
    • 网络插件
      • Flannel介绍
    • CNI
      • CNI接口介绍
      • Macvlan介绍
  • 容器存储
    • 存储卷概念
      • Volume
      • Persistent Volume
      • Persistent Volume Claim
      • Storage Class
      • Dynamic Volume Provisioning
    • CSI
      • csi-cephfs-plugin
      • 部署csi-cephfs
      • 部署cephfs-provisioner
      • FlexVolume介绍
  • 资源隔离
    • 资源配额
    • Pod限额
    • 资源服务质量
    • Lxcfs资源视图隔离
  • 运维指南
    • kubectl工具
      • kubectl安装与配置
      • kubectl命令说明
      • kubectl命令别名
    • kubernetes集群问题排查
    • 节点调度
      • 安全迁移节点
      • 指定Node调度与隔离
    • 镜像仓库配置
      • 配置私有的镜像仓库
      • 拉取私有镜像
  • 开发指南
    • client-go的使用及源码分析
    • CSI插件开发
      • nfs-client-provisioner源码分析
      • csi-provisioner源码分析
    • operator开发
      • kubebuilder的使用
  • 问题排查
    • 节点相关问题
      • keycreate permission denied
      • Cgroup不支持pid资源
      • Cgroup子系统无法挂载
    • Pod驱逐
    • 镜像拉取失败问题
    • PVC Terminating
  • 源码分析
    • Kubernetes源码分析笔记
    • kubelet
      • NewKubeletCommand
      • NewMainKubelet
      • startKubelet
      • syncLoopIteration
      • syncPod
    • kube-controller-manager
      • NewControllerManagerCommand
      • DeploymentController
      • Informer机制
    • kube-scheduler
      • NewSchedulerCommand
      • registerAlgorithmProvider
      • scheduleOne
      • findNodesThatFit
      • PrioritizeNodes
      • preempt
    • kube-apiserver
      • NewAPIServerCommand
  • Runtime
    • Runtime
      • Runc和Containerd概述
    • Containerd
      • 安装Containerd
    • Docker
      • Docker学习笔记
    • Kata Container
      • kata容器简介
      • kata配置
    • GPU
      • nvidia-device-plugin介绍
  • Etcd
    • Etcd介绍
    • Raft算法
    • Etcd启动配置参数
    • Etcd访问控制
    • etcdctl命令工具
      • etcdctl命令工具-V3
      • etcdctl命令工具-V2
    • Etcd中的k8s数据
    • Etcd-Operator的使用
  • 多集群管理
    • k8s多集群管理的思考
    • Virtual Kubelet
      • Virtual Kubelet介绍
      • Virtual Kubelet 命令
    • Karmada
      • Karmada介绍
  • 边缘容器
    • KubeEdge介绍
    • KubeEdge源码分析
      • cloudcore
      • edgecore
    • OpenYurt部署
  • 虚拟化
    • 虚拟化相关概念
    • KubeVirt
      • KubeVirt的介绍
      • KubeVirt的使用
  • 监控体系
    • 监控体系介绍
    • cAdvisor介绍
    • Heapster介绍
    • Influxdb介绍
由 GitBook 提供支持

www.huweihuang.com

在本页
  • 1. 安装kubevirt
  • 1.1. 修改镜像仓库
  • 1.2. 部署virt-operator
  • 1.3. 部署virtctl
  • 2. kubevirt部署产物
  • 3. 创建虚拟机

这有帮助吗?

在GitHub上编辑
  1. 虚拟化
  2. KubeVirt

KubeVirt的使用

1. 安装kubevirt

1.1. 修改镜像仓库

针对私有环境,需要将所需镜像上传到自己的镜像仓库中。

涉及的镜像组件有

virt-operator
virt-api
virt-controller
virt-launcher

重命名镜像脚本如下:

#!/bin/bash

# kubevirt组件版本
version=$1

# 私有镜像仓库
registry=$2

# 私有镜像仓库的namespace
namespace=$3

kubevirtRegistry="quay.io/kubevirt"

readonly APPLIST=(
    virt-operator
    virt-api
    virt-controller
    virt-launcher
)

for app in "${APPLIST[@]}"; do
    # 拉取镜像
    docker pull ${kubevirtRegistry}/${app}:${version}
    # 重命名
    docker tag ${kubevirtRegistry}/${app}:${version} ${registry}/${namespace}/${app}:${version}
    # 推送镜像
    docker push ${registry}/${namespace}/${app}:${version}
done

echo "重新命名成功"

1.2. 部署virt-operator

通过kubevirt operator安装kubevirt相关组件,选择指定版本,下载kubevirt-operator.yaml和kubevirt-cr.yaml文件,并创建k8s相关对象。

如果是私有镜像仓库,则需要将kubevirt-operator.yaml文件中镜像的名字替换为私有镜像仓库的地址,并提前按步骤1推送所需镜像到私有镜像仓库。

# Pick an upstream version of KubeVirt to install
$ export RELEASE=v0.52.0
# Deploy the KubeVirt operator
$ kubectl apply -f https://github.com/kubevirt/kubevirt/releases/download/${RELEASE}/kubevirt-operator.yaml
# Create the KubeVirt CR (instance deployment request) which triggers the actual installation
$ kubectl apply -f https://github.com/kubevirt/kubevirt/releases/download/${RELEASE}/kubevirt-cr.yaml
# wait until all KubeVirt components are up
$ kubectl -n kubevirt wait kv kubevirt --for condition=Available

1.3. 部署virtctl

virtctl用来启动和关闭虚拟机。

VERSION=$(kubectl get kubevirt.kubevirt.io/kubevirt -n kubevirt -o=jsonpath="{.status.observedKubeVirtVersion}")
ARCH=$(uname -s | tr A-Z a-z)-$(uname -m | sed 's/x86_64/amd64/') || windows-amd64.exe
echo ${ARCH}
curl -L -o virtctl https://github.com/kubevirt/kubevirt/releases/download/${VERSION}/virtctl-${VERSION}-${ARCH}
chmod +x virtctl
sudo install virtctl /usr/local/bin

2. kubevirt部署产物

通过手动部署virt-operator,会自动部署以下组件

组件
部署方式
副本数

virt-api

deployment

2

virt-controller

deployment

2

virt-handler

daemonset

-

具体参考:

#kg all -n kubevirt
NAME                                   READY   STATUS    RESTARTS   AGE
pod/virt-api-5fb5cffb7f-hgjjh          1/1     Running   0          23h
pod/virt-api-5fb5cffb7f-jcp7x          1/1     Running   0          23h
pod/virt-controller-844cd4f58c-h8vsx   1/1     Running   0          23h
pod/virt-controller-844cd4f58c-vlxqs   1/1     Running   0          23h
pod/virt-handler-lb5ft                 1/1     Running   0          23h
pod/virt-handler-mtr4d                 1/1     Running   0          22h
pod/virt-handler-sxd2t                 1/1     Running   0          23h
pod/virt-operator-8595f577cd-b9txg     1/1     Running   0          23h
pod/virt-operator-8595f577cd-p2f69     1/1     Running   0          23h

NAME                                  TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
service/kubevirt-operator-webhook     ClusterIP   10.254.159.81    <none>        443/TCP   23h
service/kubevirt-prometheus-metrics   ClusterIP   10.254.7.231     <none>        443/TCP   23h
service/virt-api                      ClusterIP   10.254.244.139   <none>        443/TCP   23h

NAME                          DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
daemonset.apps/virt-handler   3         3         3       3            3           kubernetes.io/os=linux   23h

NAME                              READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/virt-api          2/2     2            2           23h
deployment.apps/virt-controller   2/2     2            2           23h
deployment.apps/virt-operator     2/2     2            2           23h

NAME                                         DESIRED   CURRENT   READY   AGE
replicaset.apps/virt-api-5fb5cffb7f          2         2         2       23h
replicaset.apps/virt-controller-844cd4f58c   2         2         2       23h
replicaset.apps/virt-operator-8595f577cd     2         2         2       23h

NAME                            AGE   PHASE
kubevirt.kubevirt.io/kubevirt   23h   Deployed

3. 创建虚拟机

通过vm.yaml创建虚拟机

# 下载vm.yaml
wget https://kubevirt.io/labs/manifests/vm.yaml
# 创建虚拟机
kubectl apply -f https://kubevirt.io/labs/manifests/vm.yaml

vm.yaml文件

apiVersion: kubevirt.io/v1
kind: VirtualMachine
metadata:
  name: testvm
spec:
  running: false
  template:
    metadata:
      labels:
        kubevirt.io/size: small
        kubevirt.io/domain: testvm
    spec:
      domain:
        devices:
          disks:
            - name: containerdisk
              disk:
                bus: virtio
            - name: cloudinitdisk
              disk:
                bus: virtio
          interfaces:
          - name: default
            masquerade: {}
        resources:
          requests:
            memory: 64M
      networks:
      - name: default
        pod: {}
      volumes:
        - name: containerdisk
          containerDisk:
            image: quay.io/kubevirt/cirros-container-disk-demo
        - name: cloudinitdisk
          cloudInitNoCloud:
            userDataBase64: SGkuXG4=

查看虚拟机

kubectl get vms
kubectl get vms -o yaml testvm

启动或暂停虚拟机

# 启动虚拟机
virtctl start testvm
# 关闭虚拟机
virtctl stop testvm
# 进入虚拟机
virtctl console testvm

删除虚拟机

kubectl delete vm testvm

参考:

上一页KubeVirt的介绍下一页监控体系介绍

最后更新于2年前

这有帮助吗?

Installation - KubeVirt User-Guide
KubeVirt quickstart with Minikube | KubeVirt.io
Use KubeVirt | KubeVirt.io