kubernetes 更改副本数量

本文详细介绍了如何在Kubernetes中使用ReplicationController创建并管理myweb服务,包括设置副本数、配置NodePort和观察服务状态。通过实例展示如何扩展现有服务,并确保服务高可用性。

 我们使用控制器复制一个tomcat.yaml 对象如下,设置myweb的副本为1.发布nodePort 为30001

apiVersion: v1
kind: ReplicationController
metadata:
 name: mysql
spec:
 replicas: 1
 selector:
  app: mysql
 template:
   metadata:
    labels:
     app: mysql
   spec:
    containers:
    - name: mysql
      image: mysql
      ports:
      - containerPort: 3306
      env:
      - name: MYSQL_ROOT_PASSWORD
        value: "123456"
---
apiVersion: v1
kind: Service
metadata:
 name: mysql
spec:
 ports:
  - port: 3306
 selector:
  app: mysql
---
apiVersion: v1
kind: ReplicationController
metadata:
 name: myweb
spec:
 replicas: 1
 selector:
  app: myweb
 template:
  metadata:
   labels:
    app: myweb
  spec:
   containers:
    - name: myweb
      image: kubeguide/tomcat-app:v1
      ports:
      - containerPort: 8080
      env:
      - name: MYSQL_SERVICE_HOST
        value: 'mysql'
      - name: MYSQL_SERVICE_PORT
        value: '3306'
---
apiVersion: v1
kind: Service
metadata:
 name: myweb
spec:
 type: NodePort
 ports:
  - port: 8080
    nodePort: 30001
 selector:
  app: myweb

拉起RC

kubectl create -f tomcat.yaml

 查看所有的服务器对象有没有启动,看到下面结果表示启动成功。


[root@centos7v4-k8s ~]# kubectl  get pod
NAME          READY   STATUS    RESTARTS   AGE
mysql-7jjdv   1/1     Running   0          5h39m
myweb-k9sd4   1/1     Running   0          5h39m
nginx         1/1     Running   0          2d
[root@centos7v4-k8s ~]# kubectl  get rc
NAME    DESIRED   CURRENT   READY   AGE
mysql   1         1         1       5h51m
myweb   1         1         1       5h51m
[root@centos7v4-k8s ~]# kubectl  get svc
NAME             TYPE        CLUSTER-IP      EXTERNAL-IP     PORT(S)          AGE
kubernetes       ClusterIP   10.10.0.1       <none>          443/TCP          3d8h
mysql            ClusterIP   10.10.227.248   <none>          3306/TCP         5h52m
myweb            NodePort    10.10.105.196   <none>          8080:30001/TCP   5h52m

访问服务成功,其中192.168.11.62可以是集群中的一个任意节点。

启动另外2个副本

[root@centos7v4-k8s ~]#  kubectl scale rc myweb --replicas  3
replicationcontroller/myweb scaled

 过一段时间再看系统已经起来了。

[root@centos7v4-k8s ~]# kubectl  get pod
NAME          READY   STATUS    RESTARTS   AGE
mysql-7jjdv   1/1     Running   0          6h12m
myweb-fthjm   1/1     Running   0          17m
myweb-gs68w   1/1     Running   0          17m
myweb-k9sd4   1/1     Running   0          6h12m
nginx         1/1     Running   0          2d1h

 

<think>嗯,用户现在的问题是想把Kubernetes中的Deployment iotrelation的副本数恢复到原始配置。之前用户遇到了这个Deployment找不到的问题,现在可能已经解决了,现在需要调整副本数。我需要先回顾之前的回答,看看有没有相关的信息可以引用。 首先,用户上一次的错误是Deployment "iotrelation"不存在,所以之前的回答主要是关于如何排查这个问题的。现在用户可能已经成功找到了这个Deployment,或者已经重新创建了它,现在需要调整副本数。但用户提到“恢复副本数到原始值”,所以可能的场景是用户之前可能修改过副本数,现在想要回滚到原来的设置。 我需要考虑Kubernetes中如何恢复副本数。通常,副本数是在Deployment的spec.replicas字段中定义的。如果用户修改过副本数,比如通过kubectl scale命令,那么原始值可能还保存在Deployment的修订历史中,或者用户有原始的YAML文件。 首先,用户可能需要知道如何查看当前的副本数,以及如何将其重置。如果用户有应用过kubectl scale,那么Deployment的spec.replicas会被更新,而原来的副本数可能保存在之前的版本中。这时候可以通过回滚到之前的版本来恢复副本数。 另外,如果用户没有历史版本,但记得原始副本数,可以直接用kubectl edit或者kubectl patch来修改。或者,如果用户有原始的YAML配置文件,重新应用该文件也可以恢复副本数。 需要注意的是,如果用户启用了HPA(Horizontal Pod Autoscaler),副本数可能会被自动调整,这时候需要检查是否有HPA关联到这个Deployment,可能需要调整HPA的配置。 在之前的回答中,用户可能已经检查过Deployment的存在,所以现在需要指导他们如何操作副本数。可能的问题包括如何查看当前副本数、如何回滚到之前的版本、如何直接修改副本数,以及如何处理HPA的影响。 用户可能需要的步骤包括: 1. 确认Deployment的当前副本数。 2. 查看Deployment的修订历史,找到原始副本数的版本。 3. 回滚到特定的修订版本。 4. 或者直接编辑Deployment的replicas字段。 5. 检查HPA是否存在并处理。 同时,用户可能需要验证操作是否成功,比如通过kubectl get deployment和kubectl get pods来确认副本数已经调整。 需要确保回答中提到的命令是正确的,比如使用kubectl rollout history deployment/iotrelation来查看历史,kubectl rollout undo来回滚,以及kubectl edit deployment/iotrelation来直接修改。 另外,提醒用户如果使用kubectl apply -f original.yaml的话,需要确保YAML文件中的replicas是正确的原始值。如果有HPA,需要暂时删除或暂停它,避免自动调整副本数。 最后,需要确保回答结构清晰,步骤明确,并且引用之前提到的排查方法,比如确认Deployment的存在和命名空间是否正确,这可能在之前的回答中已经覆盖,所以可以适当引用。</think>--- ### 分步解决方案:恢复Deployment副本数 #### 1. 确认当前副本数状态 ```bash kubectl get deployment iotrelation -o jsonpath='{.spec.replicas}' --namespace=<命名空间> && echo ``` *输出示例:3* 若显示为修改后的值(如1),则继续后续操作[^1] #### 2. 通过历史版本回滚(推荐方法) ```bash # 查看修订历史(需部署时带--record参数) kubectl rollout history deployment/iotrelation -n <命名空间> # 选择包含原始配置的版本号 kubectl rollout undo deployment/iotrelation --to-revision=<编号> -n <命名空间> ``` *原理:回滚操作会还原spec所有配置,包括replicas值[^3]* #### 3. 手动重置副本数(若无历史版本) ```bash kubectl scale deployment iotrelation --replicas=<原始值> -n <命名空间> ``` *或直接编辑YAML:* ```bash kubectl edit deployment iotrelation -n <命名空间> # 找到spec.replicas字段修改后保存 ``` #### 4. 通过声明式配置恢复 ```bash # 重新应用原始YAML(确保文件中的replicas值正确) kubectl apply -f iotrelation-deployment.yaml -n <命名空间> ``` *此方法会强制同步集群状态与配置文件[^5]* --- ### 关联检查(防止配置覆盖) #### 检查HPA自动伸缩配置 ```bash kubectl get hpa -n <命名空间> | grep iotrelation ``` *若存在关联的HPA,需同步调整:* ```bash kubectl delete hpa <名称> -n <命名空间> # 临时删除自动伸缩 ``` #### 验证副本恢复状态 ```bash watch -n 1 "kubectl get pods -l app=iotrelation -n <命名空间> | grep Running" ``` *预期输出中的Pod数量应与原始副本数一致* --- ### 扩展场景处理 | 场景 | 特征 | 解决方案 | |------|------|----------| | 金丝雀部署干扰 | 存在多个版本标签 | `kubectl patch deployment iotrelation -p '{"spec":{"strategy":{"$deleteFromPrimitiveList/finalizers":["canary"]}}}'` | | 工作负载自动修复 | 出现副本数自动重置 | 检查Cluster Autoscaler日志:`kubectl logs -n kube-system deployment/cluster-autoscaler | grep iotrelation` | | 配置漂移保护 | 需要长期稳定副本数 | 添加注解锁定配置:`kubectl annotate deployment iotrelation replicas-lock=true -n <命名空间>` | --- ### 原始配置追溯技巧 1. **etcd数据查询**(需集群权限): ```bash etcdctl get /registry/deployments/<命名空间>/iotrelation | grep replicas -C 3 ``` 2. **审计日志分析**: ```bash kubectl logs -n kube-system kube-apiserver-<节点名> | grep -E 'deployment.*iotrelation.*replicas' ``` --- ### 相关问题 1. 如何防止Kubernetes Deployment配置被意外修改? 2. 回滚操作对Service流量有什么影响?[^3] 3. 如何批量重置多个Deployment的副本数? 4. Kubernetes自动伸缩与手动调整的优先级关系?[^5] [^1]: 副本数验证需注意命名空间匹配原则 [^3]: 回滚操作会触发新的RollingUpdate过程 [^5]: 声明式配置管理是Kubernetes的核心设计模式
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老骥又出发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值