帮助你驾驭 Kubernetes 的 4 个工具

学习驾驭 Kubernetes 比学习如何构建它更重要,这些工具将帮助你快速入门。
257 位读者喜欢这篇文章。

在本系列的第三篇文章 *Kubernetes 基础:先学习如何驾驶* 中,我强调你应该学习驾驭 Kubernetes,而不是构建它。我还解释了你必须学习的最小的一组原语,以便在 Kubernetes 中建模应用程序。我想强调这一点:你*需要*学习的原语集是最容易学习的一组原语,以实现生产质量的应用程序部署(即,高可用性 [HA],多个容器,多个应用程序)。换句话说,学习 Kubernetes 中内置的原语集比学习集群软件、集群文件系统、负载均衡器、疯狂的 Apache 配置、疯狂的 Nginx 配置、路由器、交换机、防火墙和存储后端更容易——所有这些都是你需要在传统 IT 环境(对于虚拟机或裸机)中建模一个简单的 HA 应用程序所需的东西。

在本文(本系列的第四篇)中,我将分享一些可以帮助你快速学习驾驭 Kubernetes 的工具。

1. Katacoda

Katacoda 绝对是测试 Kubernetes 集群的最简单方法。只需单击一下,等待五秒钟,你就可以获得一个直接连接到正在运行的 Kubernetes 集群的基于 Web 的终端。它非常适合玩耍和学习。我甚至用它来进行演示和测试新想法。Katacoda 提供了一个完全短暂的环境,在你完成使用后会被回收。

Katacoda 提供短暂的游乐场和更深入的实验室环境。 例如,我过去三四年一直在运行的 Linux 容器内部实验室 就在 Katacoda 中构建。

Katacoda 在其主站点上维护了一堆 Kubernetes 和云教程,并与 Red Hat 合作支持 OpenShift 的专用学习门户。 探索它们——它们都是优秀的学习资源。

当你第一次学习驾驶自卸卡车时,最好先观看其他人如何驾驶。

2. Podman generate kube

podman generate kube 命令是一个非常棒的小子命令,可以帮助用户自然地从运行简单容器的简单容器引擎过渡到运行许多容器的集群用例(正如我在上一篇文章中描述的那样)。Podman 通过让你启动一些容器,然后导出工作 Kube YAML,并在 Kubernetes 中启动它们来实现这一点。 看看这个(pssst,你可以在这个 Katacoda 实验室 中运行它,它已经有 Podman 和 OpenShift)。

首先,请注意运行容器的语法与 Docker 非常相似

podman run -dtn two-pizza  quay.io/fatherlinux/two-pizza

但这是其他容器引擎没有做的事情

podman generate kube two-pizza

输出

# Generation of Kubernetes YAML is still under development!
#
# Save the output of this file and use kubectl create -f to import
# it into Kubernetes.
#
# Created with podman-1.3.1
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: "2019-06-07T08:08:12Z"
  labels:
    app: two-pizza
  name: two-pizza
spec:
  containers:
  - command:
    - /bin/sh
    - -c
    - bash -c 'while true; do /usr/bin/nc -l -p 3306 < /srv/hello.txt; done'
    env:
    - name: PATH
      value: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    - name: TERM
      value: xterm
    - name: HOSTNAME
    - name: container
      value: oci
    image: quay.io/fatherlinux/two-pizza:latest
    name: two-pizza
    resources: {}
    securityContext:
      allowPrivilegeEscalation: true
      capabilities: {}
      privileged: false
      readOnlyRootFilesystem: false
    tty: true
    workingDir: /
status: {}
---
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: "2019-06-07T08:08:12Z"
  labels:
    app: two-pizza
  name: two-pizza
spec:
  selector:
    app: two-pizza
  type: NodePort
status:
  loadBalancer: {}

现在你有了一些可以工作的 Kubernetes YAML,你可以使用它作为起点来进行摆弄和学习,调整等等。-s 标志为你创建了一个服务。 Brent Baude 甚至正在研究新功能,例如 添加卷/持久卷声明。要更深入地了解,请查看 Brent 在他的博客文章“Podman 现在可以简化到 Kubernetes 和 CRI-O 的过渡”中的惊人工作。

3. oc new-app

oc new-app 命令非常强大。 它是 OpenShift 特有的,因此在默认 Kubernetes 中不可用,但是当你开始学习 Kubernetes 时,它非常有用。 让我们从一个快速命令开始创建一个相当复杂的应用程序

oc new-project -n example
oc new-app -f https://raw.githubusercontent.com/openshift/origin/master/examples/quickstarts/cakephp-mysql.json

使用 oc new-app,你实际上可以从 OpenShift 开发人员那里窃取模板,并在开发原语来描述你自己的应用程序时,拥有一个已知的良好起点。 运行上述命令后,你的 Kubernetes 命名空间(在 OpenShift 中)将被填充一堆新的、定义的资源。

oc get all

输出

NAME                                READY     STATUS      RESTARTS   AGE
pod/cakephp-mysql-example-1-build   0/1       Completed   0          4m
pod/cakephp-mysql-example-1-gz65l   1/1       Running     0          1m
pod/mysql-1-nkhqn                   1/1       Running     0          4m

NAME                                            DESIRED   CURRENT   READY     AGE
replicationcontroller/cakephp-mysql-example-1   1         1         1         1m
replicationcontroller/mysql-1                   1         1         1         4m

NAME                            TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
service/cakephp-mysql-example   ClusterIP   172.30.234.135   <none>        8080/TCP   4m
service/mysql                   ClusterIP   172.30.13.195    <none>        3306/TCP   4m

NAME                                                       REVISION   DESIRED   CURRENT   TRIGGERED BY
deploymentconfig.apps.openshift.io/cakephp-mysql-example   1          1         1         config,image(cakephp-mysql-example:latest)
deploymentconfig.apps.openshift.io/mysql                   1          1         1         config,image(mysql:5.7)

NAME                                                   TYPE      FROM      LATEST
buildconfig.build.openshift.io/cakephp-mysql-example   Source    Git       1

NAME                                               TYPE      FROM          STATUS     STARTED         DURATION
build.build.openshift.io/cakephp-mysql-example-1   Source    Git@47a951e   Complete   4 minutes ago   2m27s

NAME                                                   DOCKER REPO                                                      TAGS      UPDATED
imagestream.image.openshift.io/cakephp-mysql-example   docker-registry.default.svc:5000/example/cakephp-mysql-example   latest    About aminute ago

NAME                                             HOST/PORT                                                                         PATH   SERVICES                PORT      TERMINATION   WILDCARD
route.route.openshift.io/cakephp-mysql-example   cakephp-mysql-example-example.2886795271-80-rhsummit1.environments.katacoda.com   cakephp-mysql-example   <all>                   None

这样做的好处是你可以删除 Pod,观看复制控制器重新创建它们,向上扩展 Pod,然后向下扩展它们。 你可以玩转模板并将其更改为其他应用程序(这是我刚开始时所做的事情)。

4. Visual Studio Code

我把最喜欢的留到了最后。 我使用 vi 完成我的大部分工作,但是我从未找到一个好的 Kubernetes 语法突出显示器和代码完成插件(如果你有,请告诉我)。 相反,我发现 Microsoft 的 VS Code 拥有一套强大的插件,可以完成 Kubernetes 资源的创建并提供样板文件。

VS Code plugins UI

首先,安装图像中显示的 Kubernetes 和 YAML 插件。

Autocomplete in VS Code

然后,你可以从头开始创建一个新的 YAML 文件,并获得 Kubernetes 资源的自动完成功能。 上面的示例显示了一个服务。

VS Code autocomplete filling in boilerplate for an object

当你使用自动完成并选择服务资源时,它会填写该对象的一些样板。 当你第一次学习驾驭 Kubernetes 时,这非常棒。 你可以构建 Pod,服务,复制控制器,部署等。当你从头开始构建这些文件甚至修改使用 Podman generate kube 创建的文件时,这是一个非常好的功能。

结论

这四个工具(如果算上两个插件,则是六个)将帮助你学习驾驭 Kubernetes,而不是构建或装备它。 在本系列的最后一篇文章中,我将讨论为什么 Kubernetes 对于运行如此多不同的工作负载如此令人兴奋。

接下来阅读什么
User profile image.
在 Red Hat,Scott McCarty 是容器子系统团队的技术产品经理,该团队支持 OpenShift Container Platform 和 Red Hat Enterprise Linux 中的关键产品功能。 重点领域包括容器运行时,工具和图像。

2 条评论

在“Podman generate kube”中,你写道“-s 标志为你创建了一个服务”,但你从未使用 -s 标志,你能更新你的示例吗?

现在有 VSCodium,VS Code 的 100% 兼容的免费版本。 可从你附近的下一个包管理器安装。 https://vscodium.com/

Creative Commons License本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
© . All rights reserved.