尝试使用ChatGPT创建Kubernetes清单文件
这篇文章的摘要 (Zhè de
2023年3月15日,GPT-4语言模型发布并广受关注,而ChatGPT更是在各个领域展现出惊人的性能。在IT和编程领域,ChatGPT的应用也在不断进展,甚至可以让它创建出《池塘边的“蛙”》这样的游戏。
我想确认一下,在本文中,我们将尝试使用ChatGPT来创建Kubernetes的清单文件,以确定其能够实现到何种程度(我选择这个题材是因为我经常忘记如何编写清单文件)。
前提 tí)
-
- 言語モデル : GPT-4
- 実施日 : 2023年3月18日
生成ConfigMap
首先,請您生成一個簡單的ConfigMap。將以下內容提供給ChatGPT。
请创建一个包含以下键值对的ConfigMap YAML文件:
key1 = value1
key2 = value2
ChatGPT的回复如下。
以下是一个包含指定键和值的ConfigMap的YAML文件。
apiVersion: v1
kind: ConfigMap
metadata:
name: my-configmap
data:
key1: value1
key2: value2
这个YAML文件用于创建名为”my-configmap”的ConfigMap。data字段中包含了指定的键值对。将此文件以适当的文件名(例如:my-configmap.yaml)保存,并执行kubectl apply -f my-configmap.yaml命令,即可将ConfigMap应用到Kubernetes集群中。
按照指示,创建名为my-configmap.yaml的配置文件,并将其应用到Kubernetes中。如下,顺利地成功创建了ConfigMap,没有出现任何问题。
❯ kubectl apply -f my-configmap.yaml
configmap/my-configmap created
❯ kubectl describe configmap my-configmap
Name: my-configmap
Namespace: sample
Labels: <none>
Annotations: <none>
Data
====
key2:
----
value2
key1:
----
value1
BinaryData
====
Events: <none>
生成秘密
我們將創建一個具有相同鍵和值的Secret。讓我們使用ChatGPT並提供以下內容。
请使用Kubernetes创建一个包含以下键值的Secret YAML文件。
key1 = value1
key2 = value2
ChatGPT的回答如下。
要创建Kubernetes Secret所需的YAML文件如下所示。键值对需要使用base64进行编码。
首先,进行base64编码:
echo -n 'value1' | base64
echo -n 'value2' | base64
通过这个方法,您可以获得编码后的值。然后,创建一个YAML文件:
apiVersion: v1
kind: Secret
metadata:
name: my-secret
type: Opaque
data:
key1: dmFsdWUx # base64 encoded value of 'value1'
key2: dmFsdWUy # base64 encoded value of 'value2'
将上述的YAML文件保存为my-secret.yaml,并使用kubectl apply -f my-secret.yaml命令在Kubernetes集群中创建Secret。
对于Secret,其值部分需要进行Base64编码。ChatGPT的答案中也提到了Base64编码,并且生成的清单文件也以编码形式输出。
生成Deployment和Service
我們來舉一個稍微難一點的例子,試試看生成Deployment和Service。在這個例子中,我們會嘗試部署最新版本的nginx,並使用NodePort Service來公開它。同時,在Deployment的Pod中,我們會設定資源限制(Resource Limits)和初始請求(Resource Requests)。
我将以下内容输入ChatGPT。
请创建一个适用于Kubernetes的以下YAML文件:
– 创建一个部署(Deployment)来部署最新版本的nginx
– 将资源限制设置为 CPU:100m,内存:300MB
– 将初始资源请求设置为 CPU:50m,内存:100MB
ChatGPT对此的回答如下。
根据指定条件,创建一个YAML文件来部署最新版本的nginx Deployment,并设置资源限制和初始请求。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 1
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
resources:
limits:
cpu: 100m
memory: 300Mi
requests:
cpu: 50m
memory: 100Mi
使用这个YAML文件可以在Kubernetes集群中创建Deployment。请将文件以适当的名称保存(例如:nginx-deployment.yaml),然后运行命令kubectl apply -f nginx-deployment.yaml来应用Deployment。
生成的清单文件内容没有问题。在内存指定为300MB和100MB的位置,已经正确地改为300Mi和100Mi并生成了文件。
然后,按照指示使用kubectl apply命令来执行这个清单文件,并确认结果。Deployment已经成功创建,Pod也正常运行。容器镜像指定为nginx:latest,Resource Limits和Resource Requests也都设定得很好。
❯ kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 1/1 1 1 104s
❯ kubectl describe deployment nginx-deployment
Name: nginx-deployment
Namespace: sample
(中略)
Pod Template:
Labels: app=nginx
Containers:
nginx:
Image: nginx:latest
Port: 80/TCP
Host Port: 0/TCP
Limits:
cpu: 100m
memory: 300Mi
Requests:
cpu: 50m
memory: 100Mi
Environment: <none>
Mounts: <none>
Volumes: <none>
❯ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-deployment-787cc97454-l4gm4 1/1 Running 0 2m8s
接下来,在同一个聊天中,为了生成服务的清单文件,提供以下内容。
请创建一个用于访问此Pod的NodePort Service的YAML。
ChatGPT的回答如下。
根据指定条件,以下的YAML文件会创建一个NodePort Service,这将使得能够访问nginx部署的Pod。
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 30080
type: NodePort
通过使用此YAML文件,您可以在Kubernetes集群中创建服务。请将文件保存为适当的名称(例如:nginx-service.yaml),然后执行kubectl apply -f nginx-service.yaml命令来应用服务。
应用后,您可以执行kubectl get services命令来验证服务是否正确创建。另外,您可以使用NodePort (30080)来从集群内的任何节点访问nginx Pod。
我将按照指示使用kubectl apply命令,并检查结果。NodePort服务已成功生成,并监听在30080端口。
❯ kubectl apply -f nginx-service.yaml
service/nginx-service created
❯ kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-service NodePort 10.43.28.26 <none> 80:30080/TCP 6s

我成功地访问了nginx。
总结和任务
我感到这款ChatGPT表现出色,因为它能够无障碍地生成包含资源条件的Deployment等复杂度较高的清单文件,不仅限于简单的ConfigMap和Secret等。
然而,尽管本文没有包括在内,但在生成ConfigMap后,我在同一个聊天中指示他们创建一个“具有相同键值对的Secret的YAML文件”。结果是他们在整个键值对(key1: value1)上执行了Base64编码。如果我知道应该生成什么样的答案,就能意识到错误,但如果不知道的话,就无法判断生成的内容是否正确,可能有些难以使用。 (此外,然后在同一个聊天中,我再次指示“对键不应执行base64编码,只应对值执行。请对值执行base64编码。”他们生成了正确内容的清单文件)