在本系列的第三篇文章 *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 资源的创建并提供样板文件。

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

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

当你使用自动完成并选择服务资源时,它会填写该对象的一些样板。 当你第一次学习驾驭 Kubernetes 时,这非常棒。 你可以构建 Pod,服务,复制控制器,部署等。当你从头开始构建这些文件甚至修改使用 Podman generate kube 创建的文件时,这是一个非常好的功能。
结论
这四个工具(如果算上两个插件,则是六个)将帮助你学习驾驭 Kubernetes,而不是构建或装备它。 在本系列的最后一篇文章中,我将讨论为什么 Kubernetes 对于运行如此多不同的工作负载如此令人兴奋。
2 条评论