gpt4 book ai didi

docker - kubernetes kubectl是否与镜像一起运行会创建部署Yaml文件

转载 作者:行者123 更新时间:2023-12-02 20:43:25 25 4
gpt4 key购买 nike

我正在尝试使用Minikube和Docker来了解Kubernetes架构的概念。

我使用Dockerfile创建了一个 Spring 启动应用程序,创建了标签并推送到Dockerhub。

为了在K8s集群中部署镜像,我发出了以下命令,

# deployed the image
$ kubectl run <deployment-name> --image=<username/imagename>:<version> --port=<port the app runs>

# exposed the port as nodeport
$ kubectl expose deployment <deployment-name> --type=NodePort

一切正常,我能够看到正在运行 kubectl get pods的1个Pod

我推送到Dockerhub的Docker镜像没有任何部署YAML文件。

下面的命令产生了一个yaml输出

kubectl命令是否可以直接创建部署Yaml文件?
 $ kubectl get deployments --output yaml 
apiVersion: v1
items:
- apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
deployment.kubernetes.io/revision: "1"
creationTimestamp: "2019-12-24T14:59:14Z"
generation: 1
labels:
run: hello-service
name: hello-service
namespace: default
resourceVersion: "76195"
selfLink: /apis/apps/v1/namespaces/default/deployments/hello-service
uid: 90950172-1c0b-4b9f-a339-b47569366f4e
spec:
progressDeadlineSeconds: 600
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
run: hello-service
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
creationTimestamp: null
labels:
run: hello-service
spec:
containers:
- image: thirumurthi/hello-service:0.0.1
imagePullPolicy: IfNotPresent
name: hello-service
ports:
- containerPort: 8800
protocol: TCP
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
status:
availableReplicas: 1
conditions:
- lastTransitionTime: "2019-12-24T14:59:19Z"
lastUpdateTime: "2019-12-24T14:59:19Z"
message: Deployment has minimum availability.
reason: MinimumReplicasAvailable
status: "True"
type: Available
- lastTransitionTime: "2019-12-24T14:59:14Z"
lastUpdateTime: "2019-12-24T14:59:19Z"
message: ReplicaSet "hello-service-75d67cc857" has successfully progressed.
reason: NewReplicaSetAvailable
status: "True"
type: Progressing
observedGeneration: 1
readyReplicas: 1
replicas: 1
updatedReplicas: 1
kind: List
metadata:
resourceVersion: ""
selfLink: ""

最佳答案

我认为使用命令性命令(与声明性方法通过编写和应用yaml定义文件来创建kubernetes资源)时了解幕后情况的最简单方法是运行一个带有2个其他标志的简单示例:

--dry-run


--output yaml

这些标志的名称是不言自明的,因此我认为不再需要评论来解释它们的作用。您可以简单地尝试以下示例,然后看到效果:
kubectl run nginx-example --image=nginx:latest --port=80 --dry-run --output yaml

如您所见,它会生成适当的yaml list ,而不应用它并创建实际的部署:
apiVersion: apps/v1beta1
kind: Deployment
metadata:
creationTimestamp: null
labels:
run: nginx-example
name: nginx-example
spec:
replicas: 1
selector:
matchLabels:
run: nginx-example
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
run: nginx-example
spec:
containers:
- image: nginx:latest
name: nginx-example
ports:
- containerPort: 80
resources: {}
status: {}

expose命令相同:
kubectl expose deployment nginx-example --type=NodePort --dry-run --output yaml

产生以下输出:
apiVersion: v1
kind: Service
metadata:
creationTimestamp: null
labels:
run: nginx-example
name: nginx-example
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
run: nginx-example
type: NodePort
status:
loadBalancer: {}

现在最酷的部分。您可以使用简单的输出重定向:
kubectl run nginx-example --image=nginx:latest --port=80 --dry-run --output yaml > nginx-example-deployment.yaml

kubectl expose deployment nginx-example --type=NodePort --dry-run --output yaml > nginx-example-nodeport-service.yaml

保存生成的 DeploymentNodePort Service定义,因此您可以根据需要进一步修改它们,并使用 kubectl apply -f filename.yamlkubectl create -f filename.yaml进行应用。

顺便说一句。 kubectl runkubectl expose是基于生成器的命令,正如您在创建部署时可能已经注意到的(您可能会收到消息: kubectl run --generator=deployment/apps.v1beta1 is DEPRECATED and will be removed in a future version. Use kubectl create instead.),它们使用 --generator标志。如果未明确指定,它将获取默认值,对于 kubectl run来说就是 --generator=deployment/apps.v1beta1,因此默认情况下会创建一个 Deployment。但是您可以通过提供 --generator=run-pod/v1 nginx-example对其进行修改,而不是 Deployment,它将创建一个 Pod。当我们回到前面的示例时,它可能如下所示:
kubectl run --generator=run-pod/v1 nginx-example --image=nginx:latest --port=80 --dry-run --output yaml

我希望这回答了您的问题,并澄清了使用 命令命令创建kubernetes资源的机制。

关于docker - kubernetes kubectl是否与镜像一起运行会创建部署Yaml文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59470624/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com