强制将Pod从一个工作节点移动到另一个工作节点

时间:2019-12-09 09:12:58

标签: kubernetes openshift


为了进行一些性能测试,我需要强制将Pod从一个Openshift节点移动到另一个节点。根据我的测试,从文档看来,在Deployment config中设置nodeSelector似乎是可行的方法,但是它不起作用。 这是我尝试进行的测试:

创建nginx Pod

oc new-app -f https://raw.githubusercontent.com/sclorg/nginx-ex/master/openshift/templates/nginx.json

该Pod在“ ip-10-0-121-229.us-east-2.compute.internal”节点上运行。 现在,我修补节点选择器,设置目标节点:

oc patch dc nginx-example  -p '{"spec":{"template":{"spec":{"nodeSelector":{"kubernetes.io/hostname": "ip-10-0-169-74.us-east-2.compute.internal"}}}}}'

但是Pod仍在同一节点上运行。即使杀死Pod,它也会重新附着在那。 有什么建议吗? 谢谢

2 个答案:

答案 0 :(得分:3)

您可以在广告连播规范中使用 public class UnitOfWork<TContext> : IDisposable where TContext : DbContext, new() { private DbContext context; private IGenericRepository<TBL_RC_DATA_PHL_EmployeeData_SIN, DbContext> tbl_Data_EmployeeData_sin; public IGenericRepository<TBL_RC_DATA_PHL_EmployeeData_SIN, DbContext> Tbl_Data_EmployeeData_sin { get { if (this.tbl_Data_EmployeeData_sin == null) { this.tbl_Data_EmployeeData_sin = new GenericRepository<TBL_RC_DATA_PHL_EmployeeData_SIN, DbContext>(context); } return tbl_Data_EmployeeData_sin; } } private IGenericRepository<TBL_RC_DATA_PHL_EmployeeData_PHL, DbContext> tbl_Data_EmployeeData_phl; public IGenericRepository<TBL_RC_DATA_PHL_EmployeeData_PHL, DbContext> Tbl_Data_EmployeeData_phl { get { if (this.tbl_Data_EmployeeData_phl == null) { this.tbl_Data_EmployeeData_phl = new GenericRepository<TBL_RC_DATA_PHL_EmployeeData_PHL, DbContext>(context); } return tbl_Data_EmployeeData_phl; } } private IGenericRepository<TBL_RC_DATA_PHL_EmployeeData_ENG, DbContext> tbl_Data_EmployeeData_eng; public IGenericRepository<TBL_RC_DATA_PHL_EmployeeData_ENG, DbContext> Tbl_Data_EmployeeData_eng { get { if (this.tbl_Data_EmployeeData_eng == null) { this.tbl_Data_EmployeeData_eng = new GenericRepository<TBL_RC_DATA_PHL_EmployeeData_ENG, DbContext>(context); } return tbl_Data_EmployeeData_eng; } } public UnitOfWork() { context = new TContext(); } public void Save() { context.SaveChanges(); } private bool disposed = false; protected virtual void Dispose(bool disposing) { if (!this.disposed) { if (disposing) { context.Dispose(); } } this.disposed = true; } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } } 字段自行安排广告连播的时间,而不是由调度程序执行。

public class svcEmployeeData { private UnitOfWork<DAL.RCPlusEntities> unitOfWork; public svcEmployeeData() { unitOfWork = new UnitOfWork<DAL.RCPlusEntities>(); } public void updateEmployees(TBL_RC_DATA_PHL_EmployeeData_SIN sin, TBL_RC_DATA_PHL_EmployeeData_ENG eng) { //updating Business Logic goes here unitOfWork.Tbl_Data_EmployeeData_sin.Update(sin); unitOfWork.Tbl_Data_EmployeeData_eng.Update(eng); unitOfWork.Save(); } }

nodeName

您可以用类似的方式对其进行修补。别忘了删除nodeSelctor字段

oc explain pod.spec.nodeName

答案 1 :(得分:2)

您可以尝试--

kubectl get pod -o  wide

这将为您提供运行Pod的VM

然后执行

kubectl cordon {name_of_that_node_in_which_POD_is_running}

然后删除您要与其他节点对齐的吊舱

然后运行

kubectl uncordon {the_node_that_was_cordoned_above}