k8s-Deployment

介绍

Deployment 为 Pod 和 Replica Set 提供声明式更新。

Deployment 是建立在 rs 之上的一个控制器,可以管理多个 rs,每次更新镜像版本,都会生成一个新的 rs,把旧的 rs 替换掉,多个 rs 同时存在,但是只有一个 rs 运行。

之前在 rs 的介绍时说过,rs 只有在修改了 pod 数时,才会触发更新,如果更改的是 template 或者 标签,不会主动触发更新。
而使用 deployment ,更改了模版,例如 镜像版本号,deployment 会根据新的模版产生一个新的 rs,每当新的 rs 中生成一个 pod,旧的 rs 中的 pod 就会删除一个。

deployment 还提供了版本回滚等操作。

示例

apiVersion: apps/v1            <-- 版本号
kind: Deployment               <-- pod 类型
metadata:                      
  name: nginx-deployment       <-- pod 名称
spec:
  selector:                    <-- rs 的标签选择器,选择要管理 pod 的标签
	matchLabels:
	  app: nginx
  replicas: 3                  <-- 副本数量
  template:                    <-- pod 模版
    metadata: 
	  labels:                  <-- rs 所管理的普通 pod 的标签
	    app: nginx
	  spec:
	    containers:            <-- 容器信息
	    - name: nginx
	      image: nginx:1.14.2
	      ports:
	      - containerPort: 80

 上方示例中,Deployment 定义的编排动作非常简单,即:确保携带了 app=nginx 标签的 Pod 的个数,永远等于 spec.replicas 指定的个数,即 3 个。
如果在这个集群中,携带 app=nginx 标签的 Pod 的个数大于 3 的时候,就会有旧的 Pod 被删除;反之,就会有新的 Pod 被创建。

Replica Set 弄懂之后,deployment 就很容易懂,它只是在 rs 上做了一层封装。在实际场景中,我们通常都是用 deployment,而不是 rs。

END

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将正在 k8s-node1 节点上运行的名为 apache-pod 的 pod 扩容到 k8s-node2 节点,并同时在这两个节点上运行 pod,请按照以下步骤操作: 1. 创建一个 deployment,指定 pod 的副本数为 2,并使用 nodeSelector 将这两个 pod 分别调度到 k8s-node1 和 k8s-node2 节点上。可以使用以下 YAML 文件创建 deployment: ``` apiVersion: apps/v1 kind: Deployment metadata: name: apache-pod spec: replicas: 2 selector: matchLabels: app: apache-pod template: metadata: labels: app: apache-pod spec: nodeSelector: kubernetes.io/hostname: k8s-node1 containers: - name: apache-container image: httpd:latest ports: - containerPort: 80 ``` 在这个 YAML 文件中,我们使用 nodeSelector 将第一个 pod 调度到 k8s-node1 节点上,第二个 pod 调度到 k8s-node2 节点上。注意,我们在 template.spec.containers 中指定了容器的镜像和端口号,这里使用的是 httpd 镜像,端口号是 80。 2. 使用 kubectl apply 命令应用这个 YAML 文件: ``` kubectl apply -f deployment.yaml ``` 3. 使用 kubectl get pods 命令检查 pod 状态,确认这两个 pod 都在运行: ``` kubectl get pods -o wide ``` 在输出中,你会看到两个 apache-pod 的副本都在运行,其中一个在 k8s-node1 节点上,另一个在 k8s-node2 节点上。 需要注意的是,使用 nodeSelector 指定 pod 调度到特定节点上可能会降低集群的灵活性,因为这样做会使节点的资源分配不均衡。如果你的集群中有多个节点,最好使用 Kubernetes 的调度器来自动地将 pod 调度到空闲节点上。你可以使用 nodeAffinity 和 podAntiAffinity 等特性来控制 pod 的调度行为。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值