openshift3.10集群部署
简介
openshift是基于k8s的开源容器云。
要求
系统环境:CentOS 7.5
搭建一个master节点,两个node节点
注意:
openshift3 依赖docker的版本为1.13.1
openshift3.10支持的是ansible2.4.3.0以上2.8.X以下
保证各节点时间统一,可以统一向阿里云时间服务器同步
准备工作
所有节点创建工作目录:在根目录下创建家目录
mkdir /home && cd /home
# 先关闭防火墙,后续为了安全再重新配置防火墙
# 查看防火墙的状态
systemctl status firewalld
# 关闭防火墙
systemctl stop firewalld
# 关闭防火墙的自启动
systemctl disable firewalld
配置说明
修改主机名
#master:
#192.168.2.180
hostnamectl set-hostname master.example.com
#node1:
#192.168.2.181
hostnamectl set-hostname node1.example.com
#node2:
#192.168.2.182
hostnamectl set-hostname node2.example.com
域名映射
这3台主机(master,node1,node2)都需要在/etc/hosts文件中添加域名映射:
vim /etc/hosts
#添加如下内容
192.168.2.180 master.example.com
192.168.2.181 node1.example.com
192.168.2.182 node2.example.com
SSH相关
所有节点设置ssh连接超时:
sed -i 's/TMOUT=1800/#TMOUT=1800/g' /etc/profile
source /etc/profile
阿里云镜像
所有节点切换镜像源到阿里云(如果设置过请忽略此步):
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum makecache
设置SELINUX
所有节点开启selinux(openshift默认是推荐开启改设置的):
sed -i 's/SELINUX=disabled/SELINUX=enforcing/g' /etc/selinux/config
reboot
或者手动去修改:
# 查看selinux是否开启
cat /etc/selinux/config
# 编辑
vim /etc/selinux/config
# 将SELINUX和SELINUXTYPE这两个键对应的值修改成如下
SELINUX=enforcing
SELINUXTYPE=targeted
安装工具
所有节点安装工具:
yum install -y wget git yum-utils net-tools bind-utils iptables-services bridge-utils bash-completion kexec-tools sos psacct bash-completion.noarch bash-completion-extras.noarch java-1.8.0-openjdk-headless python-passlib NetworkManager
集群免密登录
在master节点生成rsa密钥,将生成好的密钥拷贝至包括自己在内的节点:
ssh-keygen -f /root/.ssh/id_rsa -N ''
复制公钥到其他节点
for host in master.example.com node1.example.com node2.example.com; do ssh-copy-id -i ~/.ssh/id_rsa.pub $host; done
按照提示进行操作:
安装docker
所有节点安装docker(如果是独立部署nfs,则nfs节点不用按照docker):
yum install -y docker-1.13.1 && docker version
镜像加速
所有节点安装修改docker的镜像加速为国内(提高下载速度):
vim /etc/docker/daemon.json
# 添加内容如下
{
"registry-mirrors": [
"https://registry.docker-cn.com"
]
}
注意:一定要保证该文件符合 json 规范,否则 Docker 将不能启动。之后重新启动服务。
启动Docker
所有节点启动docker:
# 开机启动
systemctl enable docker
# 启动
systemctl start docker
# 重启
systemctl restart docker
# 停止
systemctl stop docker
# 查看docker运行状况
systemctl status docker
安装ansible
在master节点安装ansible扩展库:
yum -y install epel-release
# 禁用扩展库防止后续安装出错
sed -i -e "s/^enabled=1/enabled=0/" /etc/yum.repos.d/epel.repo
# 安装ansible和pyOpenSSL
yum install -y ansible pyOpenSSL
# 我事先下载好了这个rpm包(在线下载会很慢,你可以使用rz命令或者filezilla软件上传下载好的文件到/home目录)
rpm -Uvh https://releases.ansible.com/ansible/rpm/release/epel-7-x86_64/ansible-2.6.4-1.el7.ans.noarch.rpm
# 或者执行以下命令升级ansible到当前这个包的版本
rpm -Uvh ansible-2.6.4-1.el7.ans.noarch.rpm
# 如果找不到rz命令则可以执行以下命令来安装
yum install -y lrzsz
安装openshift
# 在master节点下载openshift源码:
git clone https://github.com/openshift/openshift-ansible
cd openshift-ansible
git checkout release-3.10
# 在master节点修改软件源(使用阿里云的源提高软件的安装速度):
vim /home/openshift-ansible/roles/openshift_repos/templates/CentOS-OpenShift-Origin310.repo.j2
源文件内容如下:
[centos-openshift-origin310]
name=CentOS OpenShift Origin
baseurl=http://mirror.centos.org/centos/7/paas/x86_64/openshift-origin310/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-PaaS
[centos-openshift-origin310-testing]
name=CentOS OpenShift Origin Testing
baseurl=http://buildlogs.centos.org/centos/7/paas/x86_64/openshift-origin310/
enabled={{ 1 if openshift_repos_enable_testing else 0 }}
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-PaaS
[centos-openshift-origin310-debuginfo]
name=CentOS OpenShift Origin DebugInfo
baseurl=http://debuginfo.centos.org/centos/7/paas/x86_64/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-PaaS
[centos-openshift-origin310-source]
name=CentOS OpenShift Origin Source
baseurl=http://vault.centos.org/centos/7/paas/Source/openshift-origin310/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-PaaS
修改为:
[centos-openshift-origin310]
name=CentOS OpenShift Origin
baseurl=http://mirrors.aliyun.com/centos/7/paas/x86_64/openshift-origin310/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-PaaS
[centos-openshift-origin310-testing]
name=CentOS OpenShift Origin Testing
baseurl=http://buildlogs.centos.org/centos/7/paas/x86_64/openshift-origin310/
enabled={{ 1 if openshift_repos_enable_testing else 0 }}
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-PaaS
[centos-openshift-origin310-debuginfo]
name=CentOS OpenShift Origin DebugInfo
baseurl=http://debuginfo.centos.org/centos/7/paas/x86_64/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-PaaS
[centos-openshift-origin310-source]
name=CentOS OpenShift Origin Source
baseurl=http://vault.centos.org/centos/7/paas/Source/openshift-origin310/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-PaaS
# 在master节点编写inventory文件(备份):
mv -f /etc/ansible/hosts /etc/ansible/hosts.org
# 编辑ansible配置:
vim /etc/ansible/hosts
# 内容如下:
[OSEv3:children]
masters
nodes
etcd
nfs
[OSEv3:vars]
ansible_ssh_user=root
openshift_deployment_type=origin
#因采用虚拟机部署学习 配置此选项跳过主机硬件信息检查
openshift_disable_check=disk_availability,docker_storage,memory_availability,docker_image_availability
openshift_master_identity_providers=[{'name':'htpasswd_auth','login':'true','challenge':'true','kind':'HTPasswdPasswordIdentityProvider',}]
openshift_master_default_subdomain=apps.test.example.com
openshift_deployment_type=origin
os_firewall_use_firewalld=true
[masters]
master.example.com
[etcd]
master.example.com
[nodes]
master.example.com openshift_node_group_name='node-config-master'
node1.example.com openshift_node_group_name='node-config-compute'
node2.example.com openshift_node_group_name='node-config-compute'
[nfs]
master.example.com
# 在master节点安装前检查与环境设置(自动安装脚本执行会花费很长时间):
ansible-playbook /home/openshift-ansible/playbooks/prerequisites.yml
# 在master节点正式安装(自动安装脚本执行会花费很长时间):
ansible-playbook /home/openshift-ansible/playbooks/deploy_cluster.yml
# 在master节点安装完成后创建用户:
# master节点下创建用户dev
htpasswd -bc /etc/origin/master/htpasswd dev dev
# 查看所有节点状态:
# 所有节点安装完成之后
oc get nodes
访问openshift后台
访问 https://openshift-master(或者IP):8443/console/
如果访问不了,需要再你本地的浏览器的主机添加主机映射
C:\Windows\System32\drivers\etc下面的hosts文件中添加一条记录如下:
-----------------------------------------------------------
192.168.2.180 master.example.com
-----------------------------------------------------------
出现登录界面后输入用户名和密码就是上一步创建的:dev/dev
卸载openshift
如果需要,可以通过这种方式卸载openshift。
ansible-playbook /usr/share/ansible/openshift-ansible/playbooks/adhoc/uninstall.yml
以下内容来自官方的文档:
最低硬件要求
生产级硬件要求
测试或样本环境以最低要求运行。对于生产环境,以下建议适用:
master
在具有外部etcd的高可用性OKD群集中,主主机需要满足最低要求,并且每1000个pod具有1个CPU核心和1.5 GB内存。因此,2000个容器的OKD群集中主主机的建议大小是2个CPU内核和16 GB RAM的最低要求,加上2个CPU内核和3 GB RAM,总共4个CPU内核和19 GB RAM。
有关性能指导,请参阅 OKD主控主机的建议实践。
node
节点主机的大小取决于其工作负载的预期大小。作为OKD集群管理员,您需要计算预期的工作负载并为开销增加约10%。对于生产环境,请分配足够的资源,以便节点主机故障不会影响最大容量。
有关更多信息,请参阅 调整注意事项和群集限制。
存储管理
DNS域名解析要求
在每个主机上的/etc/hosts文件中添加条目是不够的。此文件不会复制到平台上运行的容器中。
OKD的关键组件在容器内运行,并使用以下过程进行名称解析:
1.默认情况下,容器从其主机接收其DNS配置文件(/etc/resolv.conf)。
2.然后OKD将pod的第一个名称服务器设置为节点的IP地址。
配置主机以使用DNS
确保环境中的每个主机都配置为从DNS服务器解析主机名。主机DNS解析的配置取决于是否启用了DHCP。如果DHCP是:
-
禁用,然后将网络接口配置为静态,并将DNS名称服务器添加到NetworkManager。
-
启用后,NetworkManager调度脚本会根据DHCP配置自动配置DNS。
设置未与云提供程序集成的群集时,必须正确设置节点的主机名。每个节点的主机名必须是可解析的,并且每个节点必须能够到达每个其他节点。
个人的建议是搭建一套域名服务器,供容器云做域名解析。
所需端口
OKD安装使用iptables在每个主机上自动创建一组内部防火墙规则 。但是,如果您的网络配置使用外部防火墙(例如基于硬件的防火墙),则必须确保基础架构组件可以通过充当某些进程或服务的通信端点的特定端口相互通信。
确保OKD所需的以下端口在网络上打开,并配置为允许主机之间的访问。根据您的配置和使用情况,某些端口是可选的。
节点到节点
主节点
master到master
负载均衡器的外部
master对外
IAAS部署