我们现有的okd环境是使用社区的ansible playbook部署的,同样Openshift使用Ansible playbook来实现扩容与缩容。
oc命令查看当前Node节点的状态1
oc get node --show-labels
扩容
准备好需要添加的主机
这里要按照官方文档要求,至少满足最低的node要求。设置主机的hostname
1
hostnamectl --static sethostname infra1.example.com
服务解析
如果有dns server:1
2
3
4
5
6
7
8
9
10
11
12集群中的DNS中添加新加主机的域名与ip的解析
#/etc/dnsmasq.d/more.conf
address=/infra1.example.com/192.168.0.8
systemctl restart dnsmasq
设置新增加主机的默认DNS
# /etc/resolv.conf
nameserver 192.168.0.2
如果没有使用dns server,只使用了hosts解析,那么扩容时会遇到一下错误:
1 | TASK [Approve node certificates when bootstrapping] ************************************************************************************* |
这可能是由于没用外部dns解析集群的宿主节点,而是使用的/etc/hosts方式做的解析,这里可以按照一下步骤解决:
- 首先确保节点之间时间同步
- 准备新的扩容节点,包括image rpm等
- 所有节点添加 /etc/hosts
1 100.2.29.45 samuel
- 重启所有节点的dnsmasq服务,让dns能够解析新加入的节点
1 systemctl restart dnsmasq
- 添加新节点到 [new_nodes]
- 运行 scaleup.yml
- 配置ansible Hosts文件,添加新增的主机
1 | #/etc/ansible/hosts |
执行扩容脚本
1
ansible-playbook playbooks/openshift-node/scaleup.yml
将new_nodes中的主机移到nodes组中移除
1
2
3
4
5
6
7
8
9#/etc/ansible/hosts
[OSEv3:children]
masters
nodes
new_nodes
...
[nodes]
infra1.example.com openshift_node_labels="{'region': 'primary', 'zone': 'default', 'node-role.kubernetes.io/infra': 'true'}"
[new_nodes]给新增的节点配置/etc/origin/node/node-config.yaml
1
2
3
4
5
6
7kubeletArguments:
system-reserved:
- cpu=200m
- memory=1G
kube-reserved:
- cpu=200m
- memory=1G重启origin-node服务
1
systemctl restart origin-node
查看集群中的主机情况进行确认
1
oc get node --show-labels
剔除节点
设置需要移除的Node为不可调度
1
oadm manage-node <node1> --schedulable=false
迁移node上已有的容器
1
oadm manage-node <node1> --evacuate
在集群中删除指定的node节点
1
oc delete node infra1.example.com
删除在Ansible hosts文件中的主机配置
1
2...
[nodes]查看集群中的主机情况进行确认
1
oc get node --show-labels
清理
[可选]新建一个hosts文件,作为ansible-playbook的inventory,只需要写需要删除的node节点1
2
3
4
5
6
7
8
9[OSEv3:children]
nodes
[OSEv3:vars]
ansible_ssh_user=root
openshift_deployment_type=origin
[nodes]
infra1.example.com[可选]执行清理脚本uninstall.yml
1
ansible-playbook -i hosts openshift-ansible/playbooks/adhoc/uninstall.yml