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

附錄

參考:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM