OpenShift集群节点管理

一、集群添加Node节点

Ansible脚本有新增节点的Playbook脚本,准备好新增节点的基础环境,在集群的ansible管理节点上执行该Playbook就行。

图片[1]-OpenShift集群节点管理-不念博客
OpenShift集群节点管理

 Context

OKD版本OS版本Docker版本Ansible版本
3.11CentOS 7.5.18041.13.12.6.5

1. 新增节点Prerequisite

新增node节点IP地址及主机名:192.168.1.23 node6.okd.curiouser.com

开启seLinux

 sed -i "s/SELINUX=disabled/SELINUX=enforcing/" /etc/sysconfig/selinux && \
 setenforce 1

安装docker,jdk及基础软件

  yum install -y docker vim lrzsz wget unzip net-tools telnet bind-utils && \
  systemctl enable docker && \
  systemctl start docker && \
  systemctl status docker && \
  yum localinstall -y jdk-8u191-linux-x64.rpm && \
  docker info && \
  java -version

配置DNS,发现集群其他节点的IP地址与域名的映射关系.(注意DNSMasq服务端的iptables是否放行DNS的53 UDP端口)

由于集群内有DNSMasq服务端,配置/etc/resolv.conf

echo "nameserver 192.168.1.22" >> /etc/resolv.conf && \
ping allinone311.okd.curiouser.com

Note:

#DNSMasq服务端放行DNS的53 UDP端口
iptables -I OS_FIREWALL_ALLOW -p udp -m udp --dport 53 -j ACCEPT && \
iptables-save

配置Openshift的YUM源

  mkdir /etc/yum.repos.d/bak && \
  mv /etc/yum.repos.d/C* /etc/yum.repos.d/bak && \
  scp allinone311.okd.curiouser.com:/etc/yum.repos.d/all.repo /etc/yum.repos.d/ && \
  yum clean all && \
  yum makecache

2. ansible管理节点

打通ansible管理节点到新增node节点的SSH免密通道

ssh-copy-id -i root@node6.okd.curiouser.com && \
ssh root@node1.okd.curiouser.com

ansible管理节点的ansible主机清单文件inventory中添加新增节点相关信息

[OSEv3:children]
...
new_nodes

[new_nodes]
node1.okd.curiouser.com openshift_node_group_name="node-config-all-in-one"

ansible管理节点执行新增节点的Ansible Playbook

ansible-playbook /root/openshift-ansible/playbooks/openshift-node/scaleup.yml

注意1:

当执行脚本时tower主机会把它的dnsmasq配置/etc/dnsmasq.d/origin-upstream-dns.conf同步到新增节点/etc/dnsmasq.d/路径下。由于tower主机的/etc/dnsmasq.d/origin-upstream-dns.conf设置的上游DNS服务器为外网的。不希望新增节点的上游DNS服务器走外网,而是走tower主机,形成集群只有Tower主机一个节点的dns对外,其他主机作为Tower主机dns服务的客户端。所以当tower主机/etc/dnsmasq.d/origin-upstream-dns.conf同步到新增节点/etc/dnsmasq.d/路径下的时候,及时修改上游dns服务器为tower主机。然后重启dnsmasq。有两个明显的坑:

① 无法重启dnsmasq,报以下错误:

DBus error: Connection ":1.50" is not allowed to own the service "uk.org.thekelleys.dnsmasq" due to security policies in the configuration file

解决方案:重启dbus,再重启dnsmasq

systemctl restart dbus && \
systemctl restart dnsmasq

②tower主机的iptables服务开启,dns的53端口没有放开,导致新增节点的dns无法连接上游dns服务器(即Tower主机的dns服务) 解决方案:tower主机放行dns服务的UDP 53端口。(可在新增节点尝试nslookup解析域名试一下)

iptables -I OS_FIREWALL_ALLOW -p udp -m udp --dport 53 -j ACCEPT && \
iptables-save

注意2:

如果出现收集allinone节点facts超时的报错,出现一下错误提示

 The full traceback is:
Traceback (most recent call last):
  File "/tmp/ansible_d9POp0/ansible_modlib.zip/ansible/module_utils/basic.py", line 2853, in run_command
    cmd = subprocess.Popen(args, **kwargs)
  File "/usr/lib64/python2.7/subprocess.py", line 711, in __init__
    errread, errwrite)
  File "/usr/lib64/python2.7/subprocess.py", line 1308, in _execute_child
    data = _eintr_retry_call(os.read, errpipe_read, 1048576)
  File "/usr/lib64/python2.7/subprocess.py", line 478, in _eintr_retry_call
    return func(*args)
  File "/tmp/ansible_d9POp0/ansible_modlib.zip/ansible/module_utils/facts/timeout.py", line 37, in _handle_timeout
    raise TimeoutError(msg)
TimeoutError: Timer expired after 10 seconds

TimeoutError: Timer expired after 10 seconds 请在/etc/ansible/ansible.cfg 设置”gather_subset = !all”或者”gather_timeout=300″。原因可能是已经运行allinone节点上的facts(特别是docker images layer的挂载信息)过多,造成收集facts超时,默认收集facts超时时间是10。

相关连接:https://github.com/ansible/ansible/issues/43884

二、删除节点

疏散要删除节点上的POD

 oc adm drain <node1> <node2> [--pod-selector=<pod_selector>] --force=true --grace-period=-1 --timeout=5s --delete-local-data=true

删除Node

 oc delete node <node>
© 版权声明
THE END