首页 > 解决方案 > 这就是我在从詹金斯调用的shell脚本中构建图像和部署的方式?

问题描述

在 K8s 世界和 shell 脚本中,我有以下内容

#!/bin/bash
docker build -t imagename:1 .

kubectl delete -f services/nodeport.service.yml
kubectl delete -f deployments/springapsimplehellopod.deployment.yml
kubectl apply -f deployments/springapsimplehellopod.deployment.yml
kubectl apply -f services/nodeport.service.yml
kubectl apply -f services/loadbalancer.service.yml

我是否遵循正确的标准?不使用镜像注册表而不是构建镜像的缺点将保存在本地 docker 中,并且我正在创建部署和服务的新创建镜像

标签: dockerjenkinskubernetes

解决方案


当您使用脚本时,您只需将文件夹指向您的 YAML。它在Kubernetes 文档中提到

使用kubectl apply -f <directory>. .yaml这会在所有、.yml和文件中查找 Kubernetes 配置.json,并将其传递给应用。

$ kubectl apply -f ./tst
service/nginx created
statefulset.apps/web created
service/nginx unchanged
persistentvolume/pv0003 created

此外,您不需要删除部署,kubectl apply重新配置部署也是如此。

$ kubectl apply -f deployment.yaml
deployment.apps/mywebtestapp-deployment created
user@cloudshell:~ (project)$ vi deployment.yaml             # editing container name from nginx to httpd
user@cloudshell:~ (project)$ kubectl apply -f deployment.yaml
deployment.apps/mywebtestapp-deployment configured

直到您想要更改immutable字段。

The Service "nginx" is invalid: spec.clusterIP: Invalid value: "": field is immutable

在这种情况下,您需要删除此资源并创建新资源。

关于使用图像注册表的最佳实践,它可能基于意见并取决于您的需求。您可以查看这篇文章或查看此线程

您还可以检查Helm - Kubernetes 的包管理器,例如,如果您想将应用程序划分为 helm 图表。


推荐阅读