openshift OKD v3.11安装

安装前的准备

最低系统要求

1. master最低要求

  • 最小4 vCPU
  • 最小16 GB RAM
  • /var/最小40 GB硬盘空间
  • /usr/local/bin/最小1 GB硬盘空间
  • 临时目录最小1 GB硬盘空间

2. node最低要求

  • 1 vCPU
  • 最小8 GB RAM
  • /var/最小15 GB硬盘空间
  • /usr/local/bin/最小1 GB硬盘空间
  • 临时目录最小1 GB硬盘空间

3. 磁盘要求

  • /var/lib/etcd Less than 20 GB
  • /var/lib/docker 50GB
  • /var/lib/containers 50GB

这是openshift官方给出的最小要求,也是openshift-ansible检测环境时的最小要求,实际上,我们的实验环境满足不了最小要求,但仍然可以安装。但是需要我们在做openshift-ansible的配置预检时忽略这些检查

实验环境说明

主机名 角色
master1.example.com master, etcd
node1.example.com node
node2.example.com node

软件环境说明:

  • RHEL/CentOS 7.x
  • Ansible 2.6.14
  • openshift: OKD 3.11
  • docker: 1.13
  • kubernetes: 1.11

预配置

1. 配置yum源

# 包含CentOS 7和epel源

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo


2. 安装基础环境依赖包

yum install -y wget git net-tools bind-utils yum-utils iptables-services bridge-utils bash-completion kexec-tools sos psacct

# 安装NetworkManager,openshift在配置dns时需要依赖NetworkManager
yum install -y NetworkManager
systemctl start NetworkManager

3. 安装docker

yum install -y docker

vim /etc/docker/daemon.json

{
    "registry-mirrors": ["https://o0o4czij.mirror.aliyuncs.com"]
}

systemctl start docker 
systemctl enable docker

当前官方宣称openshift v3.11只支持docker 1.13(事实上,在我的测试当中docker-ce也能用),为避免不必要的麻烦,这里直接使用docker 1.13版本

安装openshift

1. 安装openshift-ansible


yum install -y centos-release-openshift-origin311

yum install -y openshift-ansible*

2. 关闭selinux检查

openshift-ansible的代码中,强制开启了针对selinux的检查,要求其必须开启,否则安装报错。而事实上,在生产环境中,selinux基本都是关闭的,这里通过修改其源代码以忽略针对selinux的检查:

# vim /usr/share/ansible/openshift-ansible/roles/openshift_node/tasks/selinux_container_cgroup.yml

- name: Setting sebool container_manage_cgroup
  seboolean:
    name: container_manage_cgroup
    state: yes
    persistent: yes
  when:
    ansible_selinux.status == 'enabled'

3. 修改openshift-ansible代码中使用的yum源为国内源

cd /usr/share/ansible/openshift-ansible
grep  -nr mirror.centos.org * | awk -F':' '{print $1}' | xargs sed -i 's/mirror.centos.org/mirrors.aliyun.com/g'

4. 配置inventory

vim /etc/ansible/hosts

[OSEv3:children]
masters
nodes
etcd
new_nodes
new_masters
new_etcd
nfs

[OSEv3:vars]
# if your target hosts are Fedora uncomment this
#ansible_python_interpreter=/usr/bin/python3
ansible_ssh_user=root
openshift_deployment_type=origin
openshift_image_tag=v3.11

#openshift_portal_net=172.30.0.0/16
# localhost likely doesn't meet the minimum requirements
#openshift_disable_check=disk_availability,memory_availability,docker_image_availability

#openshift_node_groups=[{'name': 'node-config-all-in-one', 'labels': ['node-role.kubernetes.io/master=true', 'node-role.kubernetes.io/infra=true', 'node-role.kubernetes.io/compute=true']}]
openshift_master_identity_providers=[{'name': 'htpasswd_auth', 'login': 'true', 'challenge': 'true', 'kind': 'HTPasswdPasswordIdentityProvider'}]
#openshift_master_htpasswd_file=/root/openshift-passwd

openshift_disable_check=disk_availability,memory_availability,docker_image_availability,docker_storage

openshift_master_api_port = 443
openshift_master_console_port = 443

#os_sdn_network_plugin_name=redhat/openshift-ovs-multitenant
os_sd_network_plugin_name=redhat/openshift-ovs-subnet

#deployment_subtype=registry
#openshift_hosted_infra_selector=""

openshift_hosted_router_replicas=1
openshift_hosted_registry_replicas=1
#
openshift_master_cluster_hostname=master.lab.example.com
openshift_master_cluster_public_hostname=master.lab.example.com
openshift_master_default_subdomain=apps.lab.example.com

openshift_enable_service_catalog=false

openshift_hosted_registry_storage_kind=nfs
openshift_hosted_registry_storage_access_modes=['ReadWriteMany']
openshift_hosted_registry_storage_nfs_directory=/exports
openshift_hosted_registry_storage_nfs_options='*(rw,root_squash)'
openshift_hosted_registry_storage_volume_name=registry
openshift_hosted_registry_storage_volume_size=10Gi

#openshift_hosted_etcd_storage_kind = nfs
#openshift_hosted_etcd_storage_nfs_options = '*(rw,root_squash,sync,no_wdelay)'
#openshift_hosted_etcd_storage_nfs_directory = /exports
#openshift_hosted_etcd_storage_volume_name = etcd-vol2
#openshift_hosted_etcd_storage_access_modes = ['ReadWriteOnce']
#openshift_hosted_etcd_storage_volume_size = 1G
#openshift_hosted_etcd_storage_labels={'storage': 'etcd'}

#openshift_master_cluster_method=native
#openshift_public_ip=192.168.0.157
# false
#ansible_service_broker_install=false
#openshift_enable_service_catalog=false
#template_service_broker_install=false
#openshift_logging_install_logging=false

#openshift_docker_options="--log-driver json-file --log-opt max-size=1M --log-opt max-file=3 --exec-opts native.cgroupdriver=systemd"



[masters]
192.168.0.43
[etcd]
192.168.0.43

[nfs]
192.168.0.43

[nodes]
# openshift_node_group_name should refer to a dictionary with matching key of name in list openshift_node_groups.
192.168.0.43 openshift_node_group_name="node-config-all-in-one"
192.168.0.157 openshift_node_group_name="node-config-all-in-one"
192.168.0.187 openshift_node_group_name="node-config-master-infra"

[new_nodes]

[new_masters]

[new_etcd]

一些配置项说明:

  1. openshift_deployment_type: 指定openshift的版本,openshift同时有开源版和商业版,这里的origin即开源版
  2. openshift_image_tag:指定使用的openshift的版本
  3. openshift_master_identity_providers:指定openshift的认证方式
  4. openshift_disable_check:openshift-ansible在执行安装时会对系统做预检,这里可以指定预检时跳过的检查项:
    • disk_availability:推荐master磁盘空间剩余量大于40GB。测试环境无法满足,跳过检测。
    • memory_availability:推荐master内存为16GB,node内存为8GB,测试环境无法满足,跳过检测。
    • docker_image_availability:需要的几个镜像未找到,选择跳过,装完集群后,在使用的时候再自行下载。
    • docker_storage:推荐选择一块磁盘空间存储镜像,这里选择跳过。采用docker默认的方式存储镜像。

事实上,部署前预检查配置还有专门的配置检查脚本:

ansible-playbook /usr/share/ansible/openshift-ansible/playbooks/prerequisites.yml

5. 执行部署

ansible-playbook /usr/share/ansible/openshift-ansible/playbooks/deploy_cluster.yml

至此,部署完成

6. 卸载

如果安装后需要卸载,可执行如下操作:

ansible-playbook /usr/share/ansible/openshift-ansible/playbooks/adhoc/uninstall.yml

7. 访问

可通过两种方式访问openshift集群,一个是命令行,即oc命令集,如下:

# 查看当前集群中的节点
oc get nodes

# 查看当前集群默认项目下的pod
oc get pods 

如果通过oc命令操作无权限,则需要将master节点上/etc/origin/master目录下的admin.kubeconfig文件拷贝至用户家目录下的一个隐藏目录.kube目录下,并命名为config:

mkdir ~/.kube
cp /etc/origin/master/admin.kubeconfig ~/.kube/config

另一种则可通过openshift提供的强大的图形界面功能:

curl https://master1.example.com:8443/console

这个时候,需要通过帐号密码登录,但我们刚安装好的openshift默认没有帐号密码。所以如果需要登录图形界面,需要先添加相关帐号。

openshift使用/etc/origin/master/htpasswd文件来保存帐号密码,下面我们创建一个超级管理员帐号:

# 创建admin用户
htpasswd -m /etc/origin/master/htpasswd admin
# 为用户授予超级管理员权限
oc adm policy add-cluster-role-to-user cluster-admin admin

然后即可通过该帐号登入web界面

注意事项及常见故障

注意事项

  • 操作系统语言不能为中文
  • lb节点和router节点不能放一块(即infra节点不能同时部署router和lb,因为它们都会占据80端口),同理,lb不要和master放一块
  • 需要开启networkmanager,openshift基于此配置网络
  • openshift-ansible也要求开启selinux,但可通过修改其源代码关闭此项检查
  • 确保master节点和node节点能够联网(需要从互联网下载软件包及拉取镜像)
  • 生产环境中,建议etcd和master放同一节点,或者独立部署,不建议又放master节点又放node节点(从openshift 4.1开始,强制要求etcd和master部署在同一节点)

其他安装说明

在我们的实验环境中,使用了单master单etcd节点,事实上,在生产环境中,推荐使用至少三master三etcd的配置。那么针对不同的集群部署方案,/etc/ansible/hosts的配置也有相应区别。具体可参考红帽官方文档

另外还需要说明的是,openshift的所有组件的部署其实都是基于容器的方式部署,而容器镜像都来自docker官方,所以需要确保网络的连通性和稳定性。好在当前国内有众多的加速器可用。

常见错误

在安装openshift-service-catalog时大概率失败,在失败后,打出的日志中显示etcd无法连接,在node节点上拿不到连接etcd的证书,错误忘记复制,在这里就不贴了。

直接说原因,因为这个证书只在主节点上存在,这一点确实很奇怪,至于什么原因,暂时不明,一个简单的解决办法是从主节点上直接复制etcd证书至所有node节点:

scp master:/etc/origin/master/master.etcd-c* node:/etc/origin/master/

当然也可以直接选择不安装openshift-service-catalog组件,在inventory中添加如下配置项即可:

openshift_enable_service_catalog=false

附录

参考:

posted @ 2020-05-20 15:05  breezey  阅读(1368)  评论(0编辑  收藏  举报