学习驱动Kubernetes比知道如何构建它更重要,这些工具将帮你快速上手。
我建议应该学会驱动Kubernetes,而不是构建它,在Kubernetes中为应用程序建模必须学习的基本元素最少。我建议需要学习的原语集是可以学习的最简单的,以实现生产质量的应用程序部署(即高可用性[HA],多个容器,多个应用程序)。换句话说,学习Kubernetes内置的一组原语比学习集群软件,集群文件系统,负载平衡器,疯狂的Apache配置,疯狂的Nginx配置,路由器,交换机,防火墙和存储后端要容易得多,这一切需要在传统IT环境(用于虚拟机或裸机)中为简单的HA应用程序建模。
我将分享一些工具,这些工具将帮助你学习快速驱动Kubernetes。
1. Katacoda
Katacoda是最简单的手动测试Kubernetes集群的方法。一键五秒的时间,你将拥有一个基于Web的终端,直接进入正在运行的Kubernetes集群。它对于玩和学习非常重要。我将其用于演示和测试新想法。Katacoda提供了一个完全短暂的环境,在使用完该环境后便可以将其回收。
OpenShift playground
Kubernetes playground
Katacoda提供了临时性的练习场地和更深的实验室环境。例如,我在过去的三,四年中一直在运行的Linux Container Internals Lab是在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)甚至还在研究新功能,例如添加卷/持久卷声明。要进行更深入的研究,请在他的博客文章“ Podman现在可以简化向Kubernetes和CRI-O的过渡”中查看Brent的出色工作。
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
0/1 Completed 0 4m
1/1 Running 0 1m
1/1 Running 0 4m
NAME DESIRED CURRENT READY AGE
1 1 1 1m
1 1 1 4m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ClusterIP 172.30.234.135 <none> 8080/TCP 4m
ClusterIP 172.30.13.195 <none> 3306/TCP 4m
NAME REVISION DESIRED CURRENT TRIGGERED BY
1 1 1 config,image(cakephp-mysql-example:latest)
1 1 1 config,image(mysql:5.7)
NAME TYPE FROM LATEST
Source Git 1
NAME TYPE FROM STATUS STARTED DURATION
Source Git@47a951e Complete 4 minutes ago 2m27s
NAME DOCKER REPO TAGS UPDATED
docker-registry.default.svc:5000/example/cakephp-mysql-example latest About aminute ago
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD
cakephp-mysql-example-example.2886795271-80-rhsummit1.environments.katacoda.com cakephp-mysql-example <all> None
这样做的好处是,可以删除Pod,观察复制控制器重新创建它们,按比例放大Pod和按比例缩小它们。可以使用模板并将其更改为其他应用程序(这是我第一次启动时所做的)。
4. Visual Studio代码
我最后保存了我的最爱之一。我的大部分工作都使用vi,但我从未为Kubernetes找到一个好的语法突出显示和代码完成插件(如果有,请告诉我)。相反,我发现微软的VS Code有一套杀手级的插件,可以完成Kubernetes资源的创建并提供样板。
首先,安装上图所示的Kubernetes和YAML插件。
然后,可以从头开始创建一个新的YAML文件,并自动完成Kubernetes资源。上面的示例显示了服务。
当使用自动完成功能并选择“服务”资源时,它将为对象填充一些样板。当第一次学习驱动Kubernetes时,这是非常好的。可以构建Pod,服务,复制控制器,部署等。当从头开始构建这些文件,甚至修改使用Podman生成kube创建的文件时,这是一个非常不错的功能。
结论
这四个工具(如果算上这两个插件,则为六个)将帮助学习驱动Kubernetes,而不是构建它。
原文链接:
https://opensource.com/article/19/6/tools-drive-kubernetes