Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes 使用kubectl的简单构建和部署过程是什么?_Kubernetes_Kubectl - Fatal编程技术网

Kubernetes 使用kubectl的简单构建和部署过程是什么?

Kubernetes 使用kubectl的简单构建和部署过程是什么?,kubernetes,kubectl,Kubernetes,Kubectl,我正在尝试理解一个好的实践是什么,我假设这是一个非常常见的场景,即使用kubectl构建和部署kubernetes部署 情景: 我想构建一个项目并将其部署到集群中 我有一个带有部署(和相关内容)的yaml文件,还有一些带有Dockerfile的src代码 我希望避免在图像标记中使用:latest,而是为该图像使用唯一的标记 我可以很容易地访问一个唯一标识符,它可以来自CI或git sha,在构建时作为环境变量提供 所以这看起来很简单: docker build -t my-registry/

我正在尝试理解一个好的实践是什么,我假设这是一个非常常见的场景,即使用kubectl构建和部署kubernetes部署

情景:

  • 我想构建一个项目并将其部署到集群中
  • 我有一个带有部署(和相关内容)的yaml文件,还有一些带有Dockerfile的src代码
  • 我希望避免在图像标记中使用:latest,而是为该图像使用唯一的标记
  • 我可以很容易地访问一个唯一标识符,它可以来自CI或git sha,在构建时作为环境变量提供
所以这看起来很简单:

docker build -t my-registry/my-app:${BUILD_NUMBER} .
docker push my-registry/my-app:${BUILD_NUMBER}
kubectl apply -f kube.yaml
除了没有本地方法告诉kubectl使用什么图像名称之外

我理解这一点,但我从来没有见过明确提到图像标签的使用案例

我可以使用,但这似乎与“无变量模板支持”的精神背道而驰,而且我几乎不了解sed在编写它时的作用,因此我选择了下一个必须阅读我的命令的开发人员

我觉得对于这样一个基本场景“我想构建并部署到我的集群”,可能会有一个更简单的解决方案,它不会与kubectl发生冲突

Skaffold在为每个构建的图像分配标记和摘要方面做得很好,但是在引入更高级的工具之前,最好先有一个简单的过程开始

  • 除了“使用Skafold”或“使用Helm”之外,我应该做什么来拥有一个简单的构建+部署过程
  • 使用sed、mo或其他替换工具对yaml文件进行模板化可以吗
  • 是否有任何示例项目仅使用kubectl和kustomize进行简单的构建和部署管道
kube.yaml(注意图像名称上缺少版本)


这是一种选择吗?它可以满足您的需要,但不会反映在您的本地
kube.yaml
副本中,因此您需要在
kube.yaml
中为“我的注册表/我的应用程序”指定一个虚拟映像,以免让其他开发人员感到困惑,他们必须在每次重新部署时更改该值

对于简单的情况,您可以使用。例如:

kubectl运行我的应用程序--image=my registry/my app:${BUILD\u NUMBER}--port=3000--replicas=1--env VAR=value--expose--limits'cpu=300m,内存=600Mi'


从理论上讲,这是一个不推荐使用的命令,但它已经不推荐使用了2年了,现在仍然存在;]无论如何,如果您觉得不安全,该消息会提示您如何浪费一天或两天的时间,以一种不受欢迎的方式完成任务;]

kubectl set image
似乎非常适合对发布版的部署进行最小更改,但正如您所提到的,它没有在yaml中表示,导致下一个
kubectl apply
吹走了set image。我认为这将是一个不幸的妥协。不过,如果有一种方法可以批量处理kubectl命令,那么您可以在部署期间将它们作为原子操作来运行?我不认为有,但这可能很酷。所以您希望
kubectl
支持env variable template substation,但正如您所说,这不会发生,所以您需要一个不同的工具。我认为bash
kubectl apply-f kube.yaml&&kubectl set image
是最简单、最可读的。我不会像你说的那样使用sed。如果你想发疯,试试
terraform
。它还可以通过
terraform apply
(并且是为了能够处理这种依赖关系而构建的),我觉得如果您正在寻找一个可以实现所有功能的
apply
命令,您可以尝试一下。
apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: example
  name: my-app
spec:
  minReadySeconds: 2
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
  replicas: 1
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      name: my-app
      labels:
        app: my-app
    spec:
      containers:
        - name: my-app
          image: "my-registry/my-app"
          ports:
            - containerPort: 3000
          resources:
            limits:
              cpu: 300m
              memory: 600m
            requests:
              cpu: 50m
              memory: 100m