分类 容器与云 下的文章

零配置工具简化了信息收集,例如在某个命名空间中运行了多少个 pod。

最近我在纽约的 O'Reilly Velocity 就 Kubernetes 应用故障排除的主题发表了演讲,并且在积极的反馈和讨论的推动下,我决定重新审视这个领域的工具。结果,除了 kubernetes-incubator/spartakuskubernetes/kube-state-metrics 之外,我们还没有太多的轻量级工具来收集资源统计数据(例如命名空间中的 pod 或服务的数量)。所以,我在回家的路上开始编写一个小工具 —— 创造性地命名为 krs,它是 Kubernetes Resource Stats 的简称 ,它允许你收集这些统计数据。

你可以通过两种方式使用 mhausenblas/krs

  • 直接在命令行(有 Linux、Windows 和 MacOS 的二进制文件),以及
  • 在集群中使用 launch.sh 脚本部署,该脚本动态创建适当的基于角色的访问控制(RBAC) 权限。

提醒你,它还在早期,并且还在开发中。但是,krs 的 0.1 版本提供以下功能:

  • 在每个命名空间的基础上,它定期收集资源统计信息(支持 pod、部署和服务)。
  • 它以 OpenMetrics 格式公开这些统计。
  • 它可以直接通过二进制文件使用,也可以在包含所有依赖项的容器化设置中使用。

目前,你需要安装并配置 kubectl,因为 krs 依赖于执行 kubectl get all 命令来收集统计数据。(另一方面,谁会使用 Kubernetes 但没有安装 kubectl 呢?)

使用 krs 很简单。下载适合你平台的二进制文件,并按如下方式执行:

$ krs thenamespacetowatch
# HELP pods Number of pods in any state, for example running
# TYPE pods gauge
pods{namespace="thenamespacetowatch"} 13
# HELP deployments Number of deployments
# TYPE deployments gauge
deployments{namespace="thenamespacetowatch"} 6
# HELP services Number of services
# TYPE services gauge
services{namespace="thenamespacetowatch"} 4

这将在前台启动 krs,从名称空间 thenamespacetowatch 收集资源统计信息,并分别在标准输出中以 OpenMetrics 格式输出它们,以供你进一步处理。

 title=

krs 实战截屏

也许你会问,Michael,为什么它不能做一些有用的事(例如将指标存储在 S3 中)?因为 Unix 哲学

对于那些想知道他们是否可以直接使用 Prometheus 或 kubernetes/kube-state-metrics 来完成这项任务的人:是的,你可以,为什么不行呢? krs 的重点是作为已有工具的轻量级且易于使用的替代品 —— 甚至可能在某些方面略微互补。

本文最初发表在 Medium 的 ITNext 上,并获得授权转载。


via: https://opensource.com/article/18/11/kubernetes-resource-statistics

作者:Michael Hausenblas 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

或许你已经了解到 Docker 容器镜像是一个轻量、独立、含有运行某个应用所需全部软件的可执行包,这也是为什么容器镜像会经常被开发者用于构建和分发应用。假如你很好奇一个 Docker 镜像里面包含了什么东西,那么这篇简要的指南或许会帮助到你。今天,我们将学会使用一个名为 Dive 的工具来分析和探索 Docker 镜像每层的内容。

通过分析 Docker 镜像,我们可以发现在各个层之间可能重复的文件并通过移除它们来减小 Docker 镜像的大小。Dive 工具不仅仅是一个 Docker 镜像分析工具,它还可以帮助我们来构建镜像。Dive 是一个用 Go 编程语言编写的自由开源工具。

安装 Dive

首先从该项目的 发布页 下载最新版本,然后像下面展示的那样根据你所使用的发行版来安装它。

假如你正在使用 Debian 或者 Ubuntu,那么可以运行下面的命令来下载并安装它。

$ wget https://github.com/wagoodman/dive/releases/download/v0.0.8/dive_0.0.8_linux_amd64.deb
$ sudo apt install ./dive_0.0.8_linux_amd64.deb

在 RHEL 或 CentOS 系统中

$ wget https://github.com/wagoodman/dive/releases/download/v0.0.8/dive_0.0.8_linux_amd64.rpm
$ sudo rpm -i dive_0.0.8_linux_amd64.rpm

Dive 也可以使用 Linuxbrew 包管理器来安装。

$ brew tap wagoodman/dive
$ brew install dive

至于其他的安装方法,请参考 Dive 项目的 GitHub 网页

分析并探索 Docker 镜像的内容

要分析一个 Docker 镜像,只需要运行加上 Docker 镜像 ID 的 dive 命令就可以了。你可以使用 sudo docker images 来得到 Docker 镜像的 ID。

$ sudo dive ea4c82dcd15a

上面命令中的 ea4c82dcd15a 是某个镜像的 ID。

然后 dive 命令将快速地分析给定 Docker 镜像的内容并将它在终端中展示出来。

正如你在上面的截图中看到的那样,在终端的左边一栏列出了给定 Docker 镜像的各个层及其详细内容,浪费的空间大小等信息。右边一栏则给出了给定 Docker 镜像每一层的内容。你可以使用 Ctrl+空格 来在左右栏之间切换,使用 UP/DOWN 光标键来在目录树中进行浏览。

下面是 dive 的快捷键列表:

  • Ctrl+空格 —— 在左右栏之间切换
  • 空格 —— 展开或收起目录树
  • Ctrl+A —— 文件树视图:展示或隐藏增加的文件
  • Ctrl+R —— 文件树视图:展示或隐藏被移除的文件
  • Ctrl+M —— 文件树视图:展示或隐藏被修改的文件
  • Ctrl+U —— 文件树视图:展示或隐藏未修改的文件
  • Ctrl+L —— 层视图:展示当前层的变化
  • Ctrl+A —— 层视图:展示总的变化
  • Ctrl+/ —— 筛选文件
  • Ctrl+C —— 退出

在上面的例子中,我使用了 sudo 权限,这是因为我的 Docker 镜像存储在 /var/lib/docker/ 目录中。假如你的镜像保存在你的家目录 ($HOME)或者在其他不属于 root 用户的目录,你就没有必要使用 sudo 命令。

你还可以使用下面的单个命令来构建一个 Docker 镜像并立刻分析该镜像:

$ dive build -t <some-tag>

Dive 工具仍处于 beta 阶段,所以可能会存在 bug。假如你遇到了 bug,请在该项目的 GitHub 主页上进行报告。

好了,这就是今天的全部内容。现在你知道如何使用 Dive 工具来探索和分析 Docker 容器镜像的内容以及利用它构建镜像。希望本文对你有所帮助。

更多精彩内容即将呈现,请保持关注!

干杯!


via: https://www.ostechnix.com/how-to-analyze-and-explore-the-contents-of-docker-images/

作者:SK 选题:lujun9972 译者:FSSlc 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

你所需了解的容器如何工作的知识。

现在人们严重过度使用了“容器”这个术语。另外,对不同的人来说,它可能会有不同的含义,这取决于上下文。

传统的 Linux 容器只是系统上普通的进程。一组进程与另外一组进程是相互隔离的,实现方法包括:资源限制(控制组 [cgoups])、Linux 安全限制(文件权限,基于 Capability 的安全模块、SELinux、AppArmor、seccomp 等)还有名字空间(进程 ID、网络、挂载等)。

如果你启动一台现代 Linux 操作系统,使用 cat /proc/PID/cgroup 命令就可以看到该进程是属于一个控制组的。还可以从 /proc/PID/status 文件中查看进程的 Capability 信息,从 /proc/self/attr/current 文件中查看进程的 SELinux 标签信息,从 /proc/PID/ns 目录下的文件查看进程所属的名字空间。因此,如果把容器定义为带有资源限制、Linux 安全限制和名字空间的进程,那么按照这个定义,Linux 操作系统上的每一个进程都在一个容器里。因此我们常说 Linux 就是容器,容器就是 Linux。而容器运行时是这样一种工具,它调整上述资源限制、安全限制和名字空间,并启动容器。

Docker 引入了容器镜像的概念,镜像是一个普通的 TAR 包文件,包含了:

  • rootfs(容器的根文件系统):一个目录,看起来像是操作系统的普通根目录(/),例如,一个包含 /usr, /var, /home 等的目录。
  • JSON 文件(容器的配置):定义了如何运行 rootfs;例如,当容器启动的时候要在 rootfs 里运行什么命令(CMD)或者入口(ENTRYPOINT),给容器定义什么样的环境变量(ENV),容器的工作目录(WORKDIR)是哪个,以及其他一些设置。

Docker 把 rootfs 和 JSON 配置文件打包成基础镜像。你可以在这个基础之上,给 rootfs 安装更多东西,创建新的 JSON 配置文件,然后把相对于原始镜像的不同内容打包到新的镜像。这种方法创建出来的是分层的镜像

开放容器计划 Open Container Initiative (OCI)标准组织最终把容器镜像的格式标准化了,也就是 镜像规范 OCI Image Specification (OCI)。

用来创建容器镜像的工具被称为容器镜像构建器。有时候容器引擎做这件事情,不过可以用一些独立的工具来构建容器镜像。

Docker 把这些容器镜像(tar 包)托管到 web 服务中,并开发了一种协议来支持从 web 拉取镜像,这个 web 服务就叫 容器仓库 container registry

容器引擎是能从镜像仓库拉取镜像并装载到容器存储上的程序。容器引擎还能启动容器运行时(见下图)。

容器存储一般是 写入时复制 copy-on-write (COW)的分层文件系统。从容器仓库拉取一个镜像时,其中的 rootfs 首先被解压到磁盘。如果这个镜像是多层的,那么每一层都会被下载到 COW 文件系统的不同分层。 COW 文件系统保证了镜像的每一层独立存储,这最大化了多个分层镜像之间的文件共享程度。容器引擎通常支持多种容器存储类型,包括 overlaydevicemapperbtrfsaufszfs

容器引擎将容器镜像下载到容器存储中之后,需要创建一份容器运行时配置,这份配置是用户/调用者的输入和镜像配置的合并。例如,容器的调用者可能会调整安全设置,添加额外的环境变量或者挂载一些卷到容器中。

容器运行时配置的格式,和解压出来的 rootfs 也都被开放容器计划 OCI 标准组织做了标准化,称为 OCI 运行时规范

最终,容器引擎启动了一个容器运行时来读取运行时配置,修改 Linux 控制组、安全限制和名字空间,并执行容器命令来创建容器的 PID 1 进程。至此,容器引擎已经可以把容器的标准输入/标准输出转给调用方,并控制容器了(例如,stopstartattach)。

值得一提的是,现在出现了很多新的容器运行时,它们使用 Linux 的不同特性来隔离容器。可以使用 KVM 技术来隔离容器(想想迷你虚拟机),或者使用其他虚拟机监视器策略(例如拦截所有从容器内的进程发起的系统调用)。既然我们有了标准的运行时规范,这些工具都能被相同的容器引擎来启动。即使在 Windows 系统下,也可以使用 OCI 运行时规范来启动 Windows 容器。

容器编排器是一个更高层次的概念。它是在多个不同的节点上协调容器执行的工具。容器编排工具通过和容器引擎的通信来管理容器。编排器控制容器引擎做容器的启动和容器间的网络连接,它能够监控容器,在负载变高的时候进行容器扩容。


via: https://opensource.com/article/18/8/sysadmins-guide-containers

作者:Daniel J Walsh 选题:lujun9972 译者:belitex 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Linux 容器是由 Linux 内核所提供的具有特定隔离功能的进程 —— 包括文件系统、进程和网络的隔离。容器有助于实现可移植性 —— 应用可以在容器镜像中与其依赖项一起分发,并可在几乎任何有容器运行时环境的 Linux 系统上运行。

虽然容器技术存在了很长时间,但 Linux 容器是由 Docker 而得到了广泛推广。 “Docker” 这个词可以指几个不同的东西,包括容器技术和工具,周围的社区,或者 Docker Inc. 公司。但是,在本文中,我将用来指管理 Linux 容器的技术和工具。

什么是 Docker

Docker 是一个以 root 身份在你的系统上运行的守护程序,它利用 Linux 内核的功能来管理正在运行的容器。除了运行容器之外,它还可以轻松管理容器镜像 —— 与容器注册库交互、存储映像、管理容器版本等。它基本上支持运行单个容器所需的所有操作。

但即使 Docker 是管理 Linux 容器的一个非常方便的工具,它也有两个缺点:它是一个需要在你的系统上运行的守护进程,并且需要以 root 权限运行,这可能有一定的安全隐患。然而,Podman 在解决这两个问题。

Podman 介绍

Podman 是一个容器运行时环境,提供与 Docker 非常相似的功能。正如已经提示的那样,它不需要在你的系统上运行任何守护进程,并且它也可以在没有 root 权限的情况下运行。让我们看看使用 Podman 运行 Linux 容器的一些示例。

使用 Podman 运行容器

其中一个最简单的例子可能是运行 Fedora 容器,在命令行中打印 “Hello world!”:

$ podman run --rm -it fedora:28 echo "Hello world!"

使用通用 Dockerfile 构建镜像的方式与 Docker 相同:

$ cat Dockerfile
FROM fedora:28
RUN dnf -y install cowsay

$ podman build . -t hello-world
... output omitted ...

$ podman run --rm -it hello-world cowsay "Hello!"

为了构建容器,Podman 在后台调用另一个名为 Buildah 的工具。你可以阅读最近一篇关于使用 Buildah 构建容器镜像的文章 —— 它不仅仅是使用典型的 Dockerfile。

除了构建和运行容器外,Podman 还可以与容器托管进行交互。要登录容器注册库,例如广泛使用的 Docker Hub,请运行:

$ podman login docker.io

为了推送我刚刚构建的镜像,我只需打上标记来代表特定的容器注册库,然后直接推送它。

$ podman -t hello-world docker.io/asamalik/hello-world
$ podman push docker.io/asamalik/hello-world

顺便说一下,你是否注意到我如何以非 root 用户身份运行所有内容?此外,我的系统上没有运行又大又重的守护进程!

安装 Podman

Podman 默认在 Silverblue 上提供 —— 一个基于容器的工作流的新一代 Linux 工作站。要在任何 Fedora 版本上安装它,只需运行:

$ sudo dnf install podman

via: https://fedoramagazine.org/running-containers-with-podman/

作者:Adam Šamalík 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

运行 Minikube 的分步指南。

Hello Minikube 教程页面上 Minikube 被宣传为基于 Docker 运行 Kubernetes 的一种简单方法。 虽然该文档非常有用,但它主要是为 MacOS 编写的。 你可以深入挖掘在 Windows 或某个 Linux 发行版上的使用说明,但它们不是很清楚。 许多文档都是针对 Debian / Ubuntu 用户的,比如安装 Minikube 的驱动程序

这篇指南旨在使得在基于 RHEL/Fedora/CentOS 的操作系统上更容易安装 Minikube。

先决条件

  1. 你已经安装了 Docker
  2. 你的计算机是一个基于 RHEL / CentOS / Fedora 的工作站。
  3. 你已经安装了正常运行的 KVM2 虚拟机管理程序
  4. 你有一个可以工作的 docker-machine-driver-kvm2。 以下命令将安装该驱动程序:
curl -Lo docker-machine-driver-kvm2 https://storage.googleapis.com/minikube/releases/latest/docker-machine-driver-kvm2 \
chmod +x docker-machine-driver-kvm2 \
&& sudo cp docker-machine-driver-kvm2 /usr/local/bin/ \
&& rm docker-machine-driver-kvm2

下载、安装和启动Minikube

1、为你要即将下载的两个文件创建一个目录,两个文件分别是:minikubekubectl

2、打开终端窗口并运行以下命令来安装 minikube。

curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64

请注意,minikube 版本(例如,minikube-linux-amd64)可能因计算机的规格而有所不同。

3、chmod 加执行权限。

chmod +x minikube

4、将文件移动到 /usr/local/bin 路径下,以便你能将其作为命令运行。

mv minikube /usr/local/bin

5、使用以下命令安装 kubectl(类似于 minikube 的安装过程)。

curl -Lo kubectl https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl

使用 curl 命令确定最新版本的Kubernetes。

6、chmodkubectl 加执行权限。

chmod +x kubectl

7、将 kubectl 移动到 /usr/local/bin 路径下作为命令运行。

mv kubectl /usr/local/bin

8、 运行 minikube start 命令。 为此,你需要有虚拟机管理程序。 我使用过 KVM2,你也可以使用 Virtualbox。 确保是以普通用户而不是 root 身份运行以下命令,以便为用户而不是 root 存储配置。

minikube start --vm-driver=kvm2

这可能需要一段时间,等一会。

9、 Minikube 应该下载并启动。 使用以下命令确保成功。

cat ~/.kube/config

10、 执行以下命令以运行 Minikube 作为上下文环境。 上下文环境决定了 kubectl 与哪个集群交互。 你可以在 ~/.kube/config 文件中查看所有可用的上下文环境。

kubectl config use-context minikube

11、再次查看 config 文件以检查 Minikube 是否存在上下文环境。

cat ~/.kube/config

12、最后,运行以下命令打开浏览器查看 Kubernetes 仪表板。

minikube dashboard

现在 Minikube 已启动并运行,请阅读通过 Minikube 在本地运行 Kubernetes 这篇官网教程开始使用它。


via: https://opensource.com/article/18/10/getting-started-minikube

作者:Bryant Son 选题:lujun9972 译者:Flowsnow 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

我们已经讲解了 在 Ubuntu 18.04 无头服务器上配置 Oracle VirtualBox 。在本教程中,我们将讨论如何使用 KVM 去配置无头虚拟化服务器,以及如何从一个远程客户端去管理访客系统。正如你所知道的,KVM(Kernel-based virtual machine)是开源的,是 Linux 上的全虚拟化。使用 KVM,我们可以在几分钟之内,很轻松地将任意 Linux 服务器转换到一个完全的虚拟化环境中,以及部署不同种类的虚拟机,比如 GNU/Linux、*BSD、Windows 等等。

使用 KVM 配置无头虚拟化服务器

我在 Ubuntu 18.04 LTS 服务器上测试了本指南,但是它在其它的 Linux 发行版上也可以使用,比如,Debian、CentOS、RHEL 以及 Scientific Linux。这个方法完全适合哪些希望在没有任何图形环境的 Linux 服务器上,去配置一个简单的虚拟化环境。

基于本指南的目的,我将使用两个系统。

KVM 虚拟化服务器:

  • 宿主机操作系统 – 最小化安装的 Ubuntu 18.04 LTS(没有 GUI)
  • 宿主机操作系统的 IP 地址:192.168.225.22/24
  • 访客操作系统(它将运行在 Ubuntu 18.04 的宿主机上):Ubuntu 16.04 LTS server

远程桌面客户端:

  • 操作系统 – Arch Linux

安装 KVM

首先,我们先检查一下我们的系统是否支持硬件虚拟化。为此,需要在终端中运行如下的命令:

$ egrep -c '(vmx|svm)' /proc/cpuinfo

假如结果是 zero (0),说明系统不支持硬件虚拟化,或者在 BIOS 中禁用了虚拟化。进入你的系统 BIOS 并检查虚拟化选项,然后启用它。

假如结果是 1 或者 更大的数,说明系统将支持硬件虚拟化。然而,在你运行上面的命令之前,你需要始终保持 BIOS 中的虚拟化选项是启用的。

或者,你也可以使用如下的命令去验证它。但是为了使用这个命令你需要先安装 KVM。

$ kvm-ok

示例输出:

INFO: /dev/kvm exists
KVM acceleration can be used

如果输出的是如下这样的错误,你仍然可以在 KVM 中运行访客虚拟机,但是它的性能将非常差。

INFO: Your CPU does not support KVM extensions
INFO: For more detailed results, you should run this as root
HINT: sudo /usr/sbin/kvm-ok

当然,还有其它的方法来检查你的 CPU 是否支持虚拟化。更多信息参考接下来的指南。

接下来,安装 KVM 和在 Linux 中配置虚拟化环境所需要的其它包。

在 Ubuntu 和其它基于 DEB 的系统上,运行如下命令:

$ sudo apt-get install qemu-kvm libvirt-bin virtinst bridge-utils cpu-checker

KVM 安装完成后,启动 libvertd 服务(如果它没有启动的话):

$ sudo systemctl enable libvirtd
$ sudo systemctl start libvirtd

创建虚拟机

所有的虚拟机文件和其它的相关文件都保存在 /var/lib/libvirt/ 下。ISO 镜像的默认路径是 /var/lib/libvirt/boot/

首先,我们先检查一下是否有虚拟机。查看可用的虚拟机列表,运行如下的命令:

$ sudo virsh list --all

示例输出:

Id Name State
----------------------------------------------------

正如上面的截屏,现在没有可用的虚拟机。

现在,我们来创建一个。

例如,我们来创建一个有 512 MB 内存、1 个 CPU 核心、8 GB 硬盘的 Ubuntu 16.04 虚拟机。

$ sudo virt-install --name Ubuntu-16.04 --ram=512 --vcpus=1 --cpu host --hvm --disk path=/var/lib/libvirt/images/ubuntu-16.04-vm1,size=8 --cdrom /var/lib/libvirt/boot/ubuntu-16.04-server-amd64.iso --graphics vnc

请确保在路径 /var/lib/libvirt/boot/ 中有一个 Ubuntu 16.04 的 ISO 镜像文件,或者在上面命令中给定的其它路径中有相应的镜像文件。

示例输出:

WARNING Graphics requested but DISPLAY is not set. Not running virt-viewer.
WARNING No console to launch for the guest, defaulting to --wait -1

Starting install...
Creating domain... | 0 B 00:00:01
Domain installation still in progress. Waiting for installation to complete.
Domain has shutdown. Continuing.
Domain creation completed.
Restarting guest.

我们来分别讲解以上的命令和看到的每个选项的作用。

  • –name:这个选项定义虚拟机名字。在我们的案例中,这个虚拟机的名字是 Ubuntu-16.04
  • –ram=512:给虚拟机分配 512MB 内存。
  • –vcpus=1:指明虚拟机中 CPU 核心的数量。
  • –cpu host:通过暴露宿主机 CPU 的配置给访客系统来优化 CPU 属性。
  • –hvm:要求完整的硬件虚拟化。
  • –disk path:虚拟机硬盘的位置和大小。在我们的示例中,我分配了 8GB 的硬盘。
  • –cdrom:安装 ISO 镜像的位置。请注意你必须在这个位置真的有一个 ISO 镜像。
  • –graphics vnc:允许 VNC 从远程客户端访问虚拟机。

使用 VNC 客户端访问虚拟机

现在,我们在远程桌面系统上使用 SSH 登入到 Ubuntu 服务器上(虚拟化服务器),如下所示。

$ ssh [email protected]

在这里,sk 是我的 Ubuntu 服务器的用户名,而 192.168.225.22 是它的 IP 地址。

运行如下的命令找出 VNC 的端口号。我们从一个远程系统上访问虚拟机需要它。

$ sudo virsh dumpxml Ubuntu-16.04 | grep vnc

示例输出:

<graphics type='vnc' port='5900' autoport='yes' listen='127.0.0.1'>

记下那个端口号 5900。安装任意的 VNC 客户端应用程序。在本指南中,我们将使用 TigerVnc。TigerVNC 是 Arch Linux 默认仓库中可用的客户端。在 Arch 上安装它,运行如下命令:

$ sudo pacman -S tigervnc

在安装有 VNC 客户端的远程客户端系统上输入如下的 SSH 端口转发命令。

$ ssh [email protected] -L 5900:127.0.0.1:5900

再强调一次,192.168.225.22 是我的 Ubuntu 服务器(虚拟化服务器)的 IP 地址。

然后,从你的 Arch Linux(客户端)打开 VNC 客户端。

在 VNC 服务器框中输入 localhost:5900,然后点击 “Connect” 按钮。

然后就像你在物理机上安装系统一样的方法开始安装 Ubuntu 虚拟机。

同样的,你可以根据你的服务器的硬件情况配置多个虚拟机。

或者,你可以使用 virt-viewer 实用程序在访客机器中安装操作系统。virt-viewer 在大多数 Linux 发行版的默认仓库中都可以找到。安装完 virt-viewer 之后,运行下列的命令去建立到虚拟机的访问连接。

$ sudo virt-viewer --connect=qemu+ssh://192.168.225.22/system --name Ubuntu-16.04

管理虚拟机

使用管理用户接口 virsh 从命令行去管理虚拟机是非常有趣的。命令非常容易记。我们来看一些例子。

查看运行的虚拟机,运行如下命令:

$ sudo virsh list

或者,

$ sudo virsh list --all

示例输出:

 Id Name State
----------------------------------------------------
 2 Ubuntu-16.04 running

启动一个虚拟机,运行如下命令:

$ sudo virsh start Ubuntu-16.04

或者,也可以使用虚拟机 id 去启动它。

正如在上面的截图所看到的,Ubuntu 16.04 虚拟机的 Id 是 2。因此,启动它时,你也可以像下面一样只指定它的 ID。

$ sudo virsh start 2

重启动一个虚拟机,运行如下命令:
$ sudo virsh reboot Ubuntu-16.04

示例输出:

Domain Ubuntu-16.04 is being rebooted

暂停一个运行中的虚拟机,运行如下命令:

$ sudo virsh suspend Ubuntu-16.04

示例输出:

Domain Ubuntu-16.04 suspended

让一个暂停的虚拟机重新运行,运行如下命令:

$ sudo virsh resume Ubuntu-16.04

示例输出:

Domain Ubuntu-16.04 resumed

关闭一个虚拟机,运行如下命令:

$ sudo virsh shutdown Ubuntu-16.04

示例输出:

Domain Ubuntu-16.04 is being shutdown

完全移除一个虚拟机,运行如下的命令:

$ sudo virsh undefine Ubuntu-16.04
$ sudo virsh destroy Ubuntu-16.04

示例输出:

Domain Ubuntu-16.04 destroyed

关于它的更多选项,建议你去查看 man 手册页:

$ man virsh

今天就到这里吧。开始在你的新的虚拟化环境中玩吧。对于研究和开发者、以及测试目的,KVM 虚拟化将是很好的选择,但它能做的远不止这些。如果你有充足的硬件资源,你可以将它用于大型的生产环境中。如果你还有其它好玩的发现,不要忘记在下面的评论区留下你的高见。

谢谢!


via: https://www.ostechnix.com/setup-headless-virtualization-server-using-kvm-ubuntu/

作者:SK 选题:lujun9972 译者:qhwdw 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出