【问题标题】:Best practices for deploying/updating containers with Kubernetes?使用 Kubernetes 部署/更新容器的最佳实践?
【发布时间】:2020-03-31 22:04:46
【问题描述】:

我正在尝试了解如何使用 Kubernetes 部署容器。我是这个主题的新手,所以目前我正在虚拟机中测试所有这些想法。

我正在使用 Git、Jenkins、Docker、Docker Hub 和 Kubernetes。

另外,我有一个主节点,只有一个从节点。

我创建了一个 YAML 部署文件来启动 pod 并创建一个新容器。

kubectl apply -f deployment.yaml

然后我公开部署。

kubectl expose deployment my-app --type=LoadBalancer --name=my-app

用于部署的 YAML 文件:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
  labels:
    app: app
spec:
  selector:
    matchLabels:
      app: app
      role: master
      tier: backend
  replicas: 1
  template:
    metadata:
      labels:
        app: app
        role: master
        tier: backend
    spec:
      containers:
      - name: appcontainer
        image: repository:1.0
        resources:
          requests:
            cpu: 100m
            memory: 100Mi
        ports:
        - containerPort: 8085
      imagePullSecrets:
      - name: regcred

现在我已经完成了所有工作,例如,我对映像进行了新的更新,并且我需要在部署完成后更新这个新映像,例如从 1.0 到 1.1。我需要知道执行此操作的正确方法。

因为我认为我做错了,就像我试图粉碎使用新图像创建的容器上的图像,我不知道是否正确的方法是使用新的 YAML 文件进行部署以及 Kubernetes 是否构建具有该图像的新容器并因此终止旧部署,但我不知道如果这是正确的做法,我该怎么做。

【问题讨论】:

    标签: docker kubernetes


    【解决方案1】:

    update a deployment 使用新图像的最简单方法是运行:

    kubectl set image deployment/my-app appcontainer=repository:1.1 --record
    

    这样,它将首先使用更新版本的映像创建一个新的 pod,一旦成功部署,它将根据您在 replicas 字段中指定的副本数量终止旧的 pod。

    您可以通过运行检查更新状态

    kubectl rollout status deployment.v1.apps/my-app
    

    【讨论】:

      【解决方案2】:

      您正在寻找的解决方案称为Rolling update。您可以像这样更新deployment.yaml

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: my-app
        labels:
          app: app
      spec:
        selector:
          matchLabels:
            app: app
            role: master
            tier: backend
        strategy:
          rollingUpdate:
            maxSurge: 1
            maxUnavailable: 0
          type: RollingUpdate
        replicas: 1
        template:
          metadata:
            labels:
              app: app
              role: master
              tier: backend
          spec:
            containers:
            - name: appcontainer
              image: repository:1.0
              resources:
                requests:
                  cpu: 100m
                  memory: 100Mi
              ports:
              - containerPort: 8085
            imagePullSecrets:
            - name: regcred
      

      请注意滚动更新配置:

      strategy:
        rollingUpdate:
          maxSurge: 1
          maxUnavailable: 0
        type: RollingUpdate
      

      maxSurge 表示部署推出期间可以运行的额外 pod 的数量。 maxUnavailable 是关于在推出期间可以移除的 pod 数量。这些值可以是整数值——确切的 pod 数量或 pod 的百分比。您可以调整这些值以适合您的用例。

      然后你可以更改yaml中的图片标签,然后kubectl apply更新图片。

      【讨论】:

        猜你喜欢
        • 2020-04-06
        • 2021-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-21
        • 2010-11-25
        • 2017-07-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多