一、资源规划
Hostname | IP | OS | CPU | Mem | Disk |
---|---|---|---|---|---|
master | 192.168.78.131 | CentOS7.9 | 2vCPU | 4G | 60G |
node1 | 192.168.78.132 | CentOS7.9 | 2vCPU | 4G | 60G |
node2 | 192.168.78.133 | CentOS7.9 | 2vCPU | 4G | 60G |
二、安装过程:
2.1 前期配置
开启所有节点的 SELinux
(所有主机执行)
grep -v ^# /etc/selinux/config | grep -v ^$
# 显示如下则证明已经开启了 SELinux,否则照此修改配置,并重启主机
SELINUX=enforcing
SELINUXTYPE=targeted
确保所有的节点都已经开启 SELinux
所有节点关闭防火墙(所有主机执行)
systemctl stop firewalld && systemctl disable firewalld
修改 /etc/hosts文件(Master主机执行)
vi /etc/hosts
# 新增如下内容
192.168.78.131 master.lab.unicom.com master
192.168.78.132 node1.lab.unicom.com node1
192.168.78.133 node2.lab.unicom.com node2
复制到其他节点(Master主机执行)
for i in 2 3;do scp /etc/hosts root@192.168.78.13$i:/etc;done
配置免密登录(Master主机执行)
ssh-keygen -t rsa -P ''
ssh-copy-id master
ssh-copy-id master.lab.unicom.com
复制到其他节点(Master主机执行)
for i in {1..3};do ssh-copy-id 192.168.26.13$i;done
for i in {1..2};do ssh-copy-id node$i;done
for i in {1..2};do ssh-copy-id node$i.lab.unicom.com;done
2.2 安装依赖包
安装 OpenShift 依赖的软件包(所有主机执行)
yum -y install wget git net-tools bind-utils iptables-services bridge-utils bash-completion kexec-tools sos psacct bash-completion.noarch python-passlib NetworkManager vim
安装docker(所有主机执行)
yum -y install docker-1.13.1
配置 Docker 镜像仓库地址(所有主机执行)
cat > /etc/docker/daemon.json<<EOF
{
"registry-mirrors" : [
"https://registry.docker-cn.com",
"https://docker.mirrors.ustc.edu.cn",
"http://hub-mirror.c.163.com",
"https://cr.console.aliyun.com/",
"https://0trl8ny5.mirror.aliyuncs.com"ps -ef
]
}
EOF
重启 Docker 使得配置地址生效(所有主机执行)
systemctl daemon-reload && systemctl restart docker && systemctl enable docker
Master 主机上安装 Ansible
yum -y install epel-release
yum -y install centos-release-ansible-28.noarch
yum list ansible --showduplicates
yum -y install ansible-2.8.6
# 查看ansible版本
ansible --version
2.3 安装/配置 openshift
Master 主机上下载安装 openshift-ansible-3.11.764-1.tar.gz
下载 openshift-ansible-3.11.764-1.tar.gz
安装包,解压后文件夹重命名
wget ttps://github.com/openshift/openshift-ansible/archive/refs/tags/openshift-ansible-3.11.764-1.tar.gz
tar -zxvf openshift-ansible-3.11.764-1.tar.gz
mv openshift-ansible-openshift-ansible-3.11.764-1/ openshift-ansible
编写ansible Inventory文件(Master 主机)
vim /etc/ansible/hosts
# 修改内容如下
[OSEv3:children]
masters
nodes
etcd
[OSEv3:vars]
ansible_ssh_user=root
# 使用origin社区版
openshift_deployment_type=origin
deployment_type=origin
# 指定安装版本
openshift_release=v3.11
# 指定默认域名,访问时需要使用该域名,无dns服务器时需要手动添加本地hosts文件
openshift_master_default_subdomain=lab.unicom.com
# 禁止磁盘、内存、镜像的检查
openshift_disable_check=disk_availability,docker_storage,memory_availability
# disk_availability: 报错信息是推荐的master磁盘空间剩余量大于40GB。测试环境无法满足;跳过检测
# memory_availability: 报错信息是推荐的master内存为16GB;node内存为8GB;测试环境无法满足;跳过检测
# docker_image_availability: 报错信息是需要的几个镜像未找到;选择跳过;装完集群后;在使用的时候再自行下载
# docker_storage: 报错信息是推荐选择一块磁盘空间存储镜像;这里选择跳过。采用docker默认的方式存储镜像
openshift_master_identity_providers=[{'name': 'htpasswd_auth', 'login': 'true', 'challenge': 'true', 'kind': 'HTPasswdPasswordIdentityProvider'}]
openshift_master_htpasswd_file=/etc/origin/master/htpasswd
# ntp时间同步
openshift_clock_enabled=true
# 节点配额
openshift_node_groups.edits={'pods-per-core': ['10']}
# 主机组
[masters]
master openshift_schedulable=True
# 节点的主机组,包含region和infra
[nodes]
master openshift_node_groups.labels="{'region': 'infra'}"
node1 openshift_node_groups.labels="{'region': 'infra', 'zone': 'default'}"
node2 openshift_node_groups.labels="{'region': 'infra', 'zone': 'default'}"
master openshift_node_group_name='node-config-master'
node1 openshift_node_group_name='node-config-compute'
node2 openshift_node_group_name='node-config-compute'
# 至少有一个节点需要是node-config-infra
node2 openshift_node_group_name='node-config-infra'
[etcd]
master
部署前检测
# 提前创建密码保存文件,不然待会会报错
mkdir -p /etc/origin/master/
touch /etc/origin/master/htpasswd
[root@master ~]# ansible-playbook -i /etc/ansible/hosts /root/openshift-ansible/playbooks/prerequisites.yml
# 执行结束后若无问题会显示localhost、master、node1、node2的failed=0,Initialization : Complete (0:01:33)
# 若有问题,排错后多次执行
正式部署
ansible-playbook -i /etc/ansible/hosts /root/openshift-ansible/playbooks/deploy_cluster.yml
# 部署过程中会出现pull faild发生retry,等待重试完成即可
三、openshift 验证
# 安装完成结果检查
oc get nodes
node2
节点的 roles
类型不对,需要将 node2
打上 compute
标签,因为它也是计算节点
oc label node node2 node-role.kubernetes.io/compute=true
再次检查
# 查看pods
oc get pods
使用管理员登录集群并创建管理员账号
oc login -u system:admin
# 检查登录用户
oc whoami
# 创建管理员账号
htpasswd -b /etc/origin/master/htpasswd admin redhat
# 使用新用户登录集群
oc login -u admin -p redhat
# 检查登录用户
oc whoami
# admin
使用浏览器访问 OpenShift Web Console
注意:需要提前为宿主机设置hosts
# OpenShift
192.168.78.131 master.lab.unicom.com
使用宿主机浏览器访问:https://master.lab.unicom.com:8443/
使用用户名密码(admin/redhat)访问即可
快速创建一个小的应用
注意:需要提前为宿主机设置hosts
# 用户登录
oc login -u admin -p redhat
# 创建项目、切换至该项目
oc new-project hello
oc project hello
# 拉取镜像
docker pull docker.io/openshift/hello-openshift
# 通过镜像创建应用
oc new-app docker.io/openshift/hello-openshift
# 获取pod 的详细信息
oc status
# 访问该服务
curl 172.30.223.69:8080
四、openshift常用操作命令
#通过CLI登陆openshift
oc login https://10.19.169.XX:8443 -u username -p password
#退出登陆
oc logout
#查看所有的proeject信息
oc projects
#创建新的project
oc new-project myproject
#切换project空间到myproject下
oc project myproject
#查看project下的服务状态
oc status
#查看project下的所有服务
oc get svc -n myproject
#查看project下的pod信息
oc get pods -n myproject
#获取project下服务的buildconfig信息,一个build就是一个把输入参数转化为输出结果的过程。通常,这个过程用于把source code转化为一个执行的image。
oc describe bc bcname
#获取project下服务的deploymentconfig信息,DeploymentConfig定义了在Openshift部署什么,如何运行。
oc describe dc dcname
#将pod内部服务对外暴露
oc expose svc servicename
#查看服务的build config日志
oc logs -f bc/servicename
#查看服务的deploy config日志
oc logs -f dc/servicename
#在project下基于jdk8镜像和GitLab代码 创建app,new-app 为微服务应用创建了相应的bc、dc和svc
oc new-app openshift/redhat-openjdk18-openshift~http://10.119.169.XX/ChinaTechnologyPlatform/XX.git --allow-missing-imagestream-tags --strategy=source
#根据is创建app
oc new-app -i openshift/custom-mysql:latest -p MYSQL_USER=workflow -p MYSQL_PASSWORD=Kpmg#1234 -p MYSQL_DATABASE=workflowdb -p MYSQL_ROOT_PASSWORD=Kpmg#1234 -p MYSQL_LOWER_CASE_TABLE_NAMES=1 --name=“mysqlserver” -n workflow-service-dev
#基于template模板创建应用
oc new-app --template=jenkins-persistent -n jenkins-pipeline
#查看project下的pod信息
oc get pods
#查看模板信息
oc get template
#openshift模板导出
oc export bc,dc,svc,is,route -o json –as-template=”test-template” > ~/test-template.yaml
#扩展容器pod数
oc scale dc service-name --replicas=5
#编辑template模板
oc edit template templatename
#登陆pod内部
oc exec podname -it – bash -li
#创建template
可以通过openshift的web console台导入
#给pv 打上标签disktype=ssd
oc label pv pv002 disktype=ssd
#查看pv上的标签
oc get pv --show-labels
#回滚到最近部署成功的版本
oc rollout undo dc/dcname
#获取dc部署版本信息
oc rollout history dc/dcname
#回滚到指定的版本
oc rollout undo dc/dcname --to-revision=2
创建一个imagestream 并将内部镜像仓库的镜像同步到imagestream中
#创建imagestrem
oc create imagestream custom-mysql
#创建imagestream tag和内部镜像关联上
oc tag registry.example.com/custom-mysql:latest custom-mysql:latest
#同步已有镜像到imagestream
oc import-image custom-mysql:latest --insecure -n openshift