本博客将会介绍给三个节点上的openshift集群部署过程,这个集群包含一个Master和两个Node.
类型 |
CPU |
内存 |
硬盘 |
主机名 |
IP |
OS |
Master |
1 |
2 |
20*2 |
server1.yuewen.com |
192.168.31.117 |
Centos7 |
Node |
1 |
2 |
20*2 |
server2.yuewen.com |
192.168.31.118 |
Centos7 |
Node |
1 |
2 |
20*2 |
server3.yuewen.com |
192.168.31.119 |
Centos7 |
2. 配置主机名
使用如下命令为每个主机配置主机名
hostnamectl set-hostname server1.yuewen.com
hostnamectl set-hostname server2.yuewen.com
hostnamectl set-hostname server3.yuewen.com
3. 开启SELINUX, 修改/etc/selinux/config
SELINUX=enforcing
SELINUXTYPE=targeted
4. 激活网络(默认Centos7没有激活网络)
# nmcli con show
NAME UUID TYPE DEVICE
ens33 a6c20e40-6c95-40ba-86af-edfcd938b943 802-3-ethernet ens33
# nmcli con up ens33
# nmcli con mod ens33 connection.autoconnect yes
# systemctl restart NetworkManager
5. 安装软件包
所有的节点下执行以下命令安装Openshift依赖的软件包。
# yum install -y wget git net-tools bind-utils iptables-services bridge-utils bash-completion
6. 安装docker与配置
# yum install -y docker
配置Docker数据存储
vi /etc/sysconfig/docker-storage-setup
DEVS=/dev/sdb
VG=dockervg
运行
docker-storage-setup
配置Docker镜像服务器。
选择中国科技大学的镜像服务器进行加速。修改/etc/sysconfig/docker文件,在OPTIONS变量中追加--registry-mirror=https://docker.mirrors.ustc.edu.cn --insecure-registry=172.30.0.0/16。
- 所有节点启动docker。
# systemctl enable docker
# systemctl start docker
7. 安装Ansible
openshift安装以Ansible为基础,需要启用EPEL仓库以安装Ansible。
在master节点上执行以下命令。
# yum -y install https://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-11.noarch.rpm
# sed -i -e "s/^enabled=1/enabled=0/" /etc/yum.repos.d/epel.repo
# yum -y --enablerepo=epel install ansible pyOpenSSL
8. 节点互信
Ansible是基于Agentless架构实现的,即不需要在远程的目标主机上预先安装Agent程序。Ansible对远程主机命令的执行依赖SSH等远程控制协议。因为将在Master上执行Ansible Playbook安装openshift,所以需要配置Master到各个节点的互信,包括Master到Master的互信。
master节点上生成SSH密钥。
# ssh-keygen -f /root/.ssh/id_rsa -N ‘’
在Master节点上执行:
for host in server1.yuewen.com server2.yuewen.com server3.yuewen.com; do ssh-copy-id -i ~/.ssh/id_rsa.pub $host; done
9. 配置Ansible
在Master节点上下载Openshift的Ansible Playbook
# wget https://github.com/openshift/openshift-ansible/archive/openshift-ansible-3.6.173.0.81-1.tar.gz
# tar zxvf openshift-ansible-3.6.173.0.81-1.tar.gz
安装etcd。
安装单Master的Openshift集群可以不单独安装etcd。这里选择单独安装一个节点的etcd集群。
在实际的生产环境中,推荐配置含有3个或以上成员的etcd集群,保证高可用性。
在Master上执行。
# yum -y install etcd
# systemctl enable etcd
# systemctl start etcd
配置Ansible的hosts配置文件
# mv -f /etc/ansible/hosts /etc/ansible/hosts.org
创建/etc/ansible/hosts文件,添加下面的内容。
# Create an OSEv3 group that contains the masters and nodes groups
[OSEv3:children]
masters
nodes
etcd
# Set variables common for all OSEv3 hosts
[OSEv3:vars]
# SSH user, this user should allow ssh based auth without requiring a password
ansible_ssh_user=root
openshift_deployment_type=origin
openshift_release=3.6.1
openshift_disable_check=disk_availability,docker_storage,memory_availability,docker_image_availability,package_version
# uncomment the following to enable htpasswd authentication; defaults to DenyAllPasswordIdentityProvider
openshift_master_identity_providers=[{'name':'htpasswd_auth','login':'true','challenge':'true','kind':'HTPasswdPasswordIdentityProvider','filename':'/etc/origin/master/htpasswd'}]
# host group for masters
[masters]
server1.yuewen.com
# host group for nodes, includes region info
[nodes]
server1.yuewen.com openshift_schedulable=True openshift_node_labels="{'region': 'infra'}"
server2.yuewen.com openshift_node_labels="{'region': 'infra', 'zone': 'east'}"
server3.yuewen.com openshift_node_labels="{'region': 'infra', 'zone': 'west'}"
[etcd]
server1.yuewen.com
10. 执行安装
安装过程是完全自动化的,无需手动干预。在绝大多数情况下,Ansible的脚本Playbook是可以反复执行的。因为要下载不少内容,整体安装时间还是比较长的。
如果安装Openshift的过程中出错了,修复问题后再次执行Playbook,可以在之前的基础上继续安装
(由于网络波动、内存不足等原因,可能需要多次重复执行上述指令)。
# ansible-playbook ~/openshift-ansible-openshift-ansible-3.6.173.0.81-1/playbooks/byo/config.yml
安装完成后会出现结果汇总
PLAY RECAP *******************************************************************************************************************************************
localhost : ok=12 changed=0 unreachable=0 failed=0
server1.yuewen.com : ok=644 changed=61 unreachable=0 failed=0
server2.yuewen.com : ok=260 changed=61 unreachable=0 failed=0
server3.yuewen.com : ok=243 changed=12 unreachable=0 failed=0
执行oc get nodes检查当前集群的成员列表以及它们的状态
[root@server1 .kube]# oc get nodes
NAME STATUS AGE VERSION
server1.yuewen.com Ready 23h v1.6.1+5115d708d7
server2.yuewen.com Ready 14h v1.6.1+5115d708d7
server3.yuewen.com Ready 23h v1.6.1+5115d708d7
如果出现错误
[root@server1 ~]# oc get node
Unable to connect to the server: x509: certificate signed by unknown authority
加export KUBECONFIG=/etc/origin/master/admin.kubeconfig到/etc/profile
11. 对接用户身份信息库
安装的时候,在Ansible的hosts文件中定义了HTPasswd文件作为后端的用户身份信息库。
安装程序自动生成了数据文件/etc/origin/master/htpasswd。但是此时该文件还是一个空文件,并没有任何用户信息。
需要通过htpasswd命令来创建用户。创建账号为dev密码为dev的用户。
# [root@master ~]# htpasswd -b /etc/origin/master/htpasswd dev dev
查看/etc/origin/master/htpasswd文件内容。以加密的形式存储了账号密码。
dev:$apr1$DH.7689R$g6azQwmLcSnK1MlrpEEnx0
12. 给dev添加集群管理员权限
# oc login -u system:admin
# oc adm policy add-cluster-role-to-user cluster-admin dev