<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>https://wiki.riguz.com/index.php?action=history&amp;feed=atom&amp;title=Blog%3A%E6%90%AD%E5%BB%BAOpenshift%E6%9C%AC%E5%9C%B0%E7%8E%AF%E5%A2%83</id>
	<title>Blog:搭建Openshift本地环境 - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.riguz.com/index.php?action=history&amp;feed=atom&amp;title=Blog%3A%E6%90%AD%E5%BB%BAOpenshift%E6%9C%AC%E5%9C%B0%E7%8E%AF%E5%A2%83"/>
	<link rel="alternate" type="text/html" href="https://wiki.riguz.com/index.php?title=Blog:%E6%90%AD%E5%BB%BAOpenshift%E6%9C%AC%E5%9C%B0%E7%8E%AF%E5%A2%83&amp;action=history"/>
	<updated>2026-06-02T21:41:23Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.42.3</generator>
	<entry>
		<id>https://wiki.riguz.com/index.php?title=Blog:%E6%90%AD%E5%BB%BAOpenshift%E6%9C%AC%E5%9C%B0%E7%8E%AF%E5%A2%83&amp;diff=2497&amp;oldid=prev</id>
		<title>imported&gt;Riguz：​OpenShift是红帽基于Docker和Kubernetes的云开发平台即服务（PaaS）。而[OKD(The Origin Community Distribution of Kubernetes )](https://www.okd.io/)即Openshift的开源版本。在本机上搭建一套完整的Openshift环境较为麻烦，有以下几种方式：

* Running in a Container
* Run the All-In-One VM with Minishift
* 使用Virtualbox构建Openshift集群</title>
		<link rel="alternate" type="text/html" href="https://wiki.riguz.com/index.php?title=Blog:%E6%90%AD%E5%BB%BAOpenshift%E6%9C%AC%E5%9C%B0%E7%8E%AF%E5%A2%83&amp;diff=2497&amp;oldid=prev"/>
		<updated>2020-03-09T00:00:00Z</updated>

		<summary type="html">&lt;p&gt;OpenShift是红帽基于Docker和Kubernetes的云开发平台即服务（PaaS）。而[OKD(The Origin Community Distribution of Kubernetes )](https://www.okd.io/)即Openshift的开源版本。在本机上搭建一套完整的Openshift环境较为麻烦，有以下几种方式：  * Running in a Container * Run the All-In-One VM with Minishift * 使用Virtualbox构建Openshift集群&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;OpenShift是红帽基于Docker和Kubernetes的云开发平台即服务（PaaS）。而[https://www.okd.io/ OKD(The Origin Community Distribution of Kubernetes )]即Openshift的开源版本。在本机上搭建一套完整的Openshift环境较为麻烦，有以下几种方式：&lt;br /&gt;
&lt;br /&gt;
* Running in a Container&lt;br /&gt;
* Run the All-In-One VM with Minishift&lt;br /&gt;
* 使用Virtualbox构建Openshift集群&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= 使用VirtualBox构建Openshift集群=&lt;br /&gt;
&lt;br /&gt;
按照[https://docs.openshift.com/container-platform/3.11/install/index.html 安装文档]应该可以在本地搭建一个集群，但是纯手动安装的话比较复杂，幸好有[https://github.com/eliu/openshift-vagrant Openshift Vagrant]这个项目可以帮助我们简单的构建出一个集群环境。&lt;br /&gt;
&lt;br /&gt;
== 集群规划==&lt;br /&gt;
&lt;br /&gt;
下面是计划搭建的最简单的单master、多node的一个集群配置：&lt;br /&gt;
&lt;br /&gt;
Node                IP         Role               Instance&lt;br /&gt;
------------------- ---------- ------------------ ----------------&lt;br /&gt;
master.example.com  .100       node, master, etcd 4GMem, 2Core, 40GDisk&lt;br /&gt;
node1.example.com   .101       node               2GMem, 1Core, 40GDisk&lt;br /&gt;
node2.example.com   .102       node               2GMem, 1Core, 40GDisk&lt;br /&gt;
&lt;br /&gt;
整个安装步骤可以分为这几步：&lt;br /&gt;
&lt;br /&gt;
* 创建好master、node三个虚拟机&lt;br /&gt;
* 通过hosts文件设置好域名解析&lt;br /&gt;
* 在master、node上都安装docker依赖&lt;br /&gt;
* 配置在master上可以通过ssh访问到node01、node02&lt;br /&gt;
* 在master上安装ansible&lt;br /&gt;
* 在master上执行openshift-ansible部署openshift&lt;br /&gt;
&lt;br /&gt;
== 定义虚拟机==&lt;br /&gt;
&lt;br /&gt;
如果手动从virtualbox安装虚拟机、再安装系统的话，需要耗费不少时间，通过Vagrant我们可以快速自动化地创建出这样的一个机器集群，类似从docker拉取image一样。定义这些只需要创建一个Vagrantfile：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
Vagrant.configure(&amp;quot;2&amp;quot;) do |config|&lt;br /&gt;
    config.vm.box = &amp;quot;centos/7&amp;quot;&lt;br /&gt;
    config.vm.box_check_update = false&lt;br /&gt;
&lt;br /&gt;
    config.vm.provider &amp;quot;virtualbox&amp;quot; do |vb|&lt;br /&gt;
        vb.memory = 2048&lt;br /&gt;
        vb.cpus = 1&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    config.vm.provision &amp;quot;shell&amp;quot;, inline: &amp;lt;&amp;lt;-SHELL&lt;br /&gt;
        /vagrant/common.sh&lt;br /&gt;
    SHELL&lt;br /&gt;
&lt;br /&gt;
    config.hostmanager.enabled = true&lt;br /&gt;
    config.hostmanager.manage_host = true&lt;br /&gt;
    config.hostmanager.ignore_private_ip = false&lt;br /&gt;
  &lt;br /&gt;
    (1..2).each do |i|&lt;br /&gt;
        config.vm.define &amp;quot;node0#{i}&amp;quot; do |node|&lt;br /&gt;
            node.vm.network &amp;quot;private_network&amp;quot;, ip: &amp;quot;#{NETWORK_BASE}#{i}&amp;quot;&lt;br /&gt;
            node.vm.hostname = &amp;quot;node0#{i}.example.com&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
以上的配置定义了操作系统、内存和cpu，以及网络和域名设置，然后创建node01、node02。这里用到了vagrant的hostmanager插件，他会去修改宿主机以及虚拟机的hosts文件，增加域名映射。同时，可以把一些公共的依赖项安装脚本进行provision，例如安装docker。然后，还需要创建master节点：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
config.vm.define &amp;quot;master&amp;quot;, primary: true do |master|&lt;br /&gt;
        master.vm.network &amp;quot;private_network&amp;quot;, ip: &amp;quot;#{NETWORK_BASE}0&amp;quot;&lt;br /&gt;
        # master.vm.hostname = &amp;quot;master.example.com&amp;quot;&lt;br /&gt;
        master.hostmanager.aliases = %w(master.example.com etcd.example.com nfs.example.com)&lt;br /&gt;
        master.vm.provider &amp;quot;virtualbox&amp;quot; do |vb|&lt;br /&gt;
            vb.memory = &amp;quot;4096&amp;quot;&lt;br /&gt;
            vb.cpus = 2&lt;br /&gt;
        end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
创建了vagrantfile之后，就可以利用`vagrant up`命令来创建和启动这些虚拟机了。&lt;br /&gt;
&lt;br /&gt;
[[File:Virtualbox-cluster.png|600px|Virtualbox]]&lt;br /&gt;
&lt;br /&gt;
这里master的域名配置有个坑，那就是hostnamanger会会生成一个master.example.com的ip映射在hosts文件里面，但是这个文件开头还有127.0.0.1 指向 master.example.com，像这样：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
127.0.0.1       master.example.com      master&lt;br /&gt;
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4&lt;br /&gt;
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6&lt;br /&gt;
&lt;br /&gt;
## vagrant-hostmanager-start&lt;br /&gt;
192.168.11.102  node02.example.com&lt;br /&gt;
192.168.11.100  master.example.com&lt;br /&gt;
192.168.11.101  node01.example.com&lt;br /&gt;
## vagrant-hostmanager-end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
所以这里设置的`master.hostmanager.aliases`，同时要手动修改hostname：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname master.example.com&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 安装依赖项==&lt;br /&gt;
&lt;br /&gt;
各个节点上都需要安装docker环境，使用下面的命令安装：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum -y install docker-1.13.1&lt;br /&gt;
&lt;br /&gt;
# http://softpanorama.org/VM/Docker/Installation/rhel7_docker_package_dockerroot_problem.shtml&lt;br /&gt;
&lt;br /&gt;
usermod -aG dockerroot vagrant&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /etc/docker/daemon.json &amp;lt;&amp;lt;EOF&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;group&amp;quot;: &amp;quot;dockerroot&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
systemctl enable docker&lt;br /&gt;
systemctl start docker&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
同时需要禁用掉SELinux：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
setenforce 0&lt;br /&gt;
sed -i &amp;#039;s/SELINUX=enforcing/SELINUX=permissive/g&amp;#039; /etc/selinux/config&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
而在master上需要装更多的依赖项：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum install wget git net-tools bind-utils yum-utils iptables-services bridge-utils bash-completion kexec-tools sos psacct&lt;br /&gt;
&lt;br /&gt;
yum install unzip&lt;br /&gt;
&lt;br /&gt;
yum -y install https://releases.ansible.com/ansible/rpm/release/epel-7-x86_64/ansible-2.9.6-1.el7.ans.noarch.rpm&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这里安装依赖项之前，可以考虑将Base源替换为163源，这样速度会稍微快一点。&lt;br /&gt;
&lt;br /&gt;
== 配置ssh访问==&lt;br /&gt;
&lt;br /&gt;
应为整个集群安装是在master上进行的，但实际上有一些东西是需要操作node的，因此要配置好在master上能直接无密码登录到其他的node上。这里通过ssh私钥的形式来设置，首先在Vagrantfile中:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
if File.exist?(&amp;quot;.vagrant/machines/master/virtualbox/private_key&amp;quot;)&lt;br /&gt;
    master.vm.provision &amp;quot;master-key&amp;quot;, type: &amp;quot;file&amp;quot;, source: &amp;quot;.vagrant/machines/master/virtualbox/private_key&amp;quot;, destination: &amp;quot;/home/vagrant/.ssh/master.key&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
if File.exist?(&amp;quot;.vagrant/machines/node01/virtualbox/private_key&amp;quot;)&lt;br /&gt;
    master.vm.provision &amp;quot;node01-key&amp;quot;, type: &amp;quot;file&amp;quot;, source: &amp;quot;.vagrant/machines/node01/virtualbox/private_key&amp;quot;, destination: &amp;quot;/home/vagrant/.ssh/node01.key&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
if File.exist?(&amp;quot;.vagrant/machines/node02/virtualbox/private_key&amp;quot;)&lt;br /&gt;
    master.vm.provision &amp;quot;node02-key&amp;quot;, type: &amp;quot;file&amp;quot;, source: &amp;quot;.vagrant/machines/node02/virtualbox/private_key&amp;quot;, destination: &amp;quot;/home/vagrant/.ssh/node02.key&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
然后通过下面的命令将文件拷贝过去：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vagrant provision --provision-with master-key,node01-key,node02-key&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这一步的目的是因为Vagrant在创建这些node的时候，这个key还没有生成，只能在创建完之后才能成功拷贝过去。然后设置master的ssh配置：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# vagrant ssh master&lt;br /&gt;
#vim ~/.ssh/config&lt;br /&gt;
Host *&lt;br /&gt;
StrictHostKeyChecking no&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
到这一步，docker、ssh访问都应该是成功的，如果想检查是否配置成功，可以在master上测试：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vagrant ssh master&lt;br /&gt;
docker -v&lt;br /&gt;
ssh -i node01.key vagrant@node01.example.com&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 创建Inventory==&lt;br /&gt;
&lt;br /&gt;
通过ansible执行需要一个hosts文件，如下：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[OSEv3:children]&lt;br /&gt;
masters&lt;br /&gt;
nodes&lt;br /&gt;
etcd&lt;br /&gt;
&lt;br /&gt;
[OSEv3:vars]&lt;br /&gt;
ansible_ssh_user=vagrant&lt;br /&gt;
ansible_become=true&lt;br /&gt;
openshift_deployment_type=origin&lt;br /&gt;
openshift_disable_check=disk_availability,memory_availability,docker_storage,docker_image_availability&lt;br /&gt;
&lt;br /&gt;
[masters]&lt;br /&gt;
master.example.com ansible_ssh_private_key_file=&amp;quot;/home/vagrant/.ssh/master.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[etcd]&lt;br /&gt;
master.example.com ansible_ssh_private_key_file=&amp;quot;/home/vagrant/.ssh/master.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[nodes]&lt;br /&gt;
master.example.com containerized=false etcd_ip=192.168.11.100 openshift_node_group_name=&amp;#039;node-config-master-infra&amp;#039;  ansible_ssh_private_key_file=&amp;quot;/home/vagrant/.ssh/master.key&amp;quot;&lt;br /&gt;
node01.example.com openshift_node_group_name=&amp;#039;node-config-compute&amp;#039; ansible_ssh_private_key_file=&amp;quot;/home/vagrant/.ssh/node01.key&amp;quot;&lt;br /&gt;
node02.example.com openshift_node_group_name=&amp;#039;node-config-compute&amp;#039; ansible_ssh_private_key_file=&amp;quot;/home/vagrant/.ssh/node02.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这里有几点坑：&lt;br /&gt;
* `containerized=false etcd_ip=192.168.11.100 `这个如果不加会导致[https://github.com/eliu/openshift-vagrant/issues/10 &amp;quot;Wait for control plane pods to appear&amp;quot; ]错误&lt;br /&gt;
&lt;br /&gt;
这个文件保存到/etc/ansible/hosts。&lt;br /&gt;
&lt;br /&gt;
== 安装==&lt;br /&gt;
&lt;br /&gt;
在master上面安装ansible:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum -y install https://releases.ansible.com/ansible/rpm/release/epel-7-x86_64/ansible-2.9.6-1.el7.ans.noarch.rpm&lt;br /&gt;
wget https://github.com/openshift/openshift-ansible/archive/openshift-ansible-3.11.187-1.zip&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
然后，最好把openshift-ansible里面的mirror修改成国内的，否则很可能安装不成功或者要花很长时间：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sed -i &amp;#039;s/mirror.centos.org/mirrors.163.com/g&amp;#039; openshift-ansible/roles/openshift_repos/templates/CentOS-OpenShift-Origin311.repo.j2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
正是安装：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ansible-playbook /home/vagrant/openshift-ansible/playbooks/prerequisites.yml &amp;amp;&amp;amp; ansible-playbook /home/vagrant/openshift-ansible/playbooks/deploy_cluster.yml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
如果一切正常的话，就可以安装成功了。其中有几步比较耗时(大概十分钟左右），需要点耐心：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
TASK [openshift_node : Install node, clients, and conntrack packages]&lt;br /&gt;
TASK [openshift_node : Check status of node image pre-pull]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
成功之后，可以看到log：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PLAY RECAP ***********************************************************************************************************&lt;br /&gt;
localhost                  : ok=11   changed=0    unreachable=0    failed=0    skipped=5    rescued=0    ignored=0&lt;br /&gt;
master.example.com         : ok=622  changed=275  unreachable=0    failed=0    skipped=987  rescued=0    ignored=0&lt;br /&gt;
node01.example.com         : ok=130  changed=63   unreachable=0    failed=0    skipped=167  rescued=0    ignored=0&lt;br /&gt;
node02.example.com         : ok=130  changed=63   unreachable=0    failed=0    skipped=167  rescued=0    ignored=0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
INSTALLER STATUS *****************************************************************************************************&lt;br /&gt;
Initialization               : Complete (0:00:18)&lt;br /&gt;
Health Check                 : Complete (0:00:04)&lt;br /&gt;
Node Bootstrap Preparation   : Complete (0:34:23)&lt;br /&gt;
etcd Install                 : Complete (0:00:32)&lt;br /&gt;
Master Install               : Complete (0:07:48)&lt;br /&gt;
Master Additional Install    : Complete (0:00:34)&lt;br /&gt;
Node Join                    : Complete (0:06:56)&lt;br /&gt;
Hosted Install               : Complete (0:00:56)&lt;br /&gt;
Cluster Monitoring Operator  : Complete (0:02:47)&lt;br /&gt;
Web Console Install          : Complete (0:01:45)&lt;br /&gt;
Console Install              : Complete (0:01:21)&lt;br /&gt;
Service Catalog Install      : Complete (0:07:53)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
然后就可以访问` https://master.example.com:8443/`了：&lt;br /&gt;
&lt;br /&gt;
[[File:Openshift-welcome.png|600px|Openshift home]]&lt;br /&gt;
&lt;br /&gt;
Reference:&lt;br /&gt;
* [https://blog.csdn.net/sun_qiangwei/article/details/80443943 OpenShift 3.9 多节点集群（Ansible）安装]&lt;/div&gt;</summary>
		<author><name>imported&gt;Riguz</name></author>
	</entry>
</feed>