OpenShift
OpenShift 分布式部署
OpenShift Slave节点配置
0、 节点ssh互信设置
Maste节点执行
1 | ssh-keygen |
1、 每个节点都需要安装docker,手动安装
2、设置每个节点的docker 存储,使用数据盘做为docker的存储
1 | \[root@origin-master member\]# cat /etc/sysconfig/docker-storage-setup |
3、
设置每个节点的docker 可信镜像地址/etc/sysconfig/docker(这一操作,可以在部署完成openshift后,进行修改,其中172.30.0.0/16为ansible配置,10.110.17.138:5000为外部的docker镜像源)
1 | OPTIONS='--insecure-registry=10.110.17.138:5000 --insecure-registry=172.30.0.0/16 ' |
4、在DNS为每个Node的配置
A记录参考配置:
1 | root@origin-dns:/etc/bind# cat /etc/bind/named.conf.local |
OpenShift Master节点配置
1、ansible-openshift 的配置文件/etc/ansible/hosts 增加一下配置,完成OpenShift节点的定义
1 | [OSEv3:children] |
2、
搭建NFS服务器:
1 | \[root@oc-master ~\]yum install nfs-utils |
重启NFS服务 systemctl restart nfs-server.service
客户端挂载
mount -t nfs 192.168.6.7:/opt/docker-registry/ /opt/docker-registry/
执行安装
在master节点操作
1 | 1、执行安装:ansible-playbook ~/openshift-ansible/playbooks/byo/config.yml |
2、执行卸载:ansible-playbook openshift-ansible/playbooks/adhoc/uninstall.yml
部署docker-Registry
Master节点配置nfs
注意:部署完成docker-registry后,不能再讲该服务进行删除,因为服务地址已经更新到etcd,该地址目前看来,无法实时更新
在master节点操作
oadm registry –config=/etc/origin/master/admin.kubeconfig –credentials=/etc/origin/master/openshift-registry.kubeconfig –service-account=registry –mount-host=/opt/docker-registry
部署监控metrics
1 使用 openshift-infra工程
1 | oc project openshift-infra |
2、
1 | oc secrets new metrics-deployer nothing=/dev/null |
3、
oc process -f metrics-deployer.yaml -v HAWKULAR_METRICS_HOSTNAME=hawkular-metrics.devops.inspur,USE_PERSISTENT_STORAGE=false | oc create -f –
参考demo
1 | #!/bin/bash |
当pod运行成功后,还需要修改/etc/origin/master/master-config.yaml文件,增加metric配置
通过浏览器访问控制台时,也会出现无法访问监控信息的情况,需要确认
(1) 浏览器能够解析hawkular-metrics.devops.inspur地址
(2) 使用浏览器访问改地址https://hawkular-metrics.devops.inspur/hawkular/metrics,加载https证书
部署Route
在master节点操作
oadm router haproxy-router –replicas=1 –credentials=/etc/origin/master/openshift-router.kubeconfig –service-account=router
增加用户:htpasswd /etc/origin/htpasswd admin
普通用户登录;oc login
系统管理员登录:
export KUBECONFIG=/etc/origin/master/admin.kubeconfig
oc login -u system:admin -n default
此时,整个环境搭建完成,
外部docker-Registry搭建
搭建一个V2版本的docker-registry
使用一台新的虚拟机,部署docker,部署docker registry
docker run -d -p 5000:5000 –name registry registry:2
注意:在该registry上传镜像时,需要制定子目录:例如例如10.110.17.138:5000/library/postgresql
管理OpenShift
导入镜像
导入的镜像都存放到了 openshift的内部镜像
1、从第三方仓库导入镜像
从第三方仓库导入的镜像,只是在OpenShift的内部镜像仓库中,保存了索引信息,真正使用的时候,还是要去第三方仓库下载,将外部镜像导入到OpenShift,可以指定命名空间进行导入
进行导入:oc create -**f image-streams-centos7-python-postgresql.**json **-**n demo
导入镜像使用的文件参考参考image-streams-centos7-python-postgresql.json
1 | { |
注意:外部的私有docker-registry 的镜像存储目录必须有子目录:例如10.110.17.138:5000/library/postgresql
2、登录OpenShift 内部docker-registry,导入镜像
1、在master节点获取,docker-registry服务的service ip
1 | \[root@origin-master image-streams\]# oc get svc |
2、查看OpenShift内部docker-registry所在的节点,并登录
1 | root@origin-slave3 ~\]# docker ps |
3、 以普通用户登录openshift,获取tocker
[**root@origin-slave3** ~**]**# oc whoami **-**t
YAiqVCwCIhMT6FoVXfhpnga4UBiud0Mwzz84-sW3Om8
4、
[**root@origin-slave3** ~]**# docker login **-**u admin **-**e admin@inspur.com **-**p YAiqVCwCIhMT6FoVXfhpnga4UBiud0Mwzz84-sW3Om8 **172.30.90.102:5000
WARNING**:** login credentials saved in /**root/.docker/config.**json
Login Succeeded
5、 上传镜像
1 | \[root@origin-slave3 ~\]# docker tag 10.110.17.138:5000/library/hello-openshift 172.30.90.102:5000/demo/hello-openshift |
部署Template
Template定义了一套部署应用的完成流程,包含打包、发布等,供开发者使用
部署template
oc create-f django-postgres.json -n openshif
Template 参考文件django-postgres.json,特别注意镜像的使用方法
1 | { |
应用管理:
创建应用:基于源码(首先将源码build成镜像),基于镜像,基于模板
基于源码创建:
1 | oc new-app myproject/my-ruby~https://github.com/openshift/ruby-hello-world.git (failed) |
基于镜像创建:
使用本地镜像创建:
1 | oc new-app 10.110.17.138:5000/centos --insecure-registry=true |
ImageStreamTag
Deployment
文件定义一个部署,例如,可以使用内部的镜像,也可以使用外部的镜像
1 | apiVersion: v1 |
持久化存储 PersistentVolume
搭建NFS服务器,只支持NFSV4
1 |
|
创建PV:persistentvolume
1 | **{** |
举例:jenkins使用创建的PV
1 | **{** |
Route使用
Route提供了外部访问服务的能力,此时需要外部dns的支持,dns的进行地址解析需要配置到haproxy-rouer所在的node节点IP
登录到haproxy-route所在的容器查看配置信息,确认是将每个应用的pod的IP地址配置到了haproxy的配置文件,完成负载均衡
1 | backend be\_http\_demo\_django-psql-example |
DNS 配置
DNS是基于ubuntu14.04 部署了bind9,参考配置:192.168.10.149为haproxy-router所在的节点IP(运行haproxy-router的容器所在的节点IP)
1 | root@origin**\-**dns**:/**etc**/**bind# cat **/**etc**/**bind**/**named**.**conf**.**local |
获取部署的应用对应的Router
1 | **\[**root@origin**\-**master image-streams**\]**\# oc get route **\-**n demo |
windows或者linux配置dns地址就可以访问该应用
S2I
参考(https://github.com/openshift/source-to-image)
简单了解了S2I的思路,类似CloudFoundry的BuildPack,S2I基于build image+source code,使用脚本将源码打入build image,作为应用的docker image。这里的build image 类似CloudFoundry的buildpack,build image里面内置了应用的运行环境例如tomcat、jre、nginx
例如运行python程序的buil image
https://github.com/openshift/sti-python/tree/master/2.7
制作Build Image的dockerFile:
1 | FROM openshift**/**base-centos7 |
不同开发环境需要提供不同的build image,如果同一开发环境下,应用对运行环境需求不同,也需要开发不同的build image。
S2I 虽然简化了应用部署的流程,但是增加了更多的定制化过程。
建议使用场景:平台提供固定的几种build image。