007.OpenShift管理应用部署
一 REPLICATION CONTROLLERS
1.1 RC概述
- 所需的副本数量
- 用于创建复制pod的pod定义
- 用于标识后续管理操作的selector
1.2 从DC创建RC
1.3 pod副本数控制
1.4 自动伸缩pod
二 扩展程序实验
2.1 前置准备
2.2 创建应用
[student@workstation ~]$ oc login -u developer -p redhat https://master.lab.example.com
[student@workstation ~]$ oc new-project scaling
[student@workstation ~]$ oc new-app -o yaml -i php:7.0 \
http://registry.lab.example.com/scaling > ~/scaling.yml #将部署的yaml导出至本地
[student@workstation ~]$ vi ~/scaling.yml
……
spec:
replicas: 3
selector:
app: scaling
deploymentconfig: scaling #修改副本数
……
[student@workstation ~]$ oc create -f ~/scaling.yml #以修改副本数后的yaml部署应用
2.3 监视部署
[student@workstation ~]$ watch -n 3 oc get builds
Every 3.0s: oc get builds Mon Jul 22 11:12:02 2019 NAME TYPE FROM STATUS STARTED DURATION
scaling-1 Source Git@0bdae71 Complete About a minute ago 1m0s
[student@workstation ~]$ oc get pods
NAME READY STATUS RESTARTS AGE
scaling-1-build 0/1 Completed 0 2m
scaling-1-ft249 1/1 Running 0 1m
scaling-1-gjvkp 1/1 Running 0 1m
scaling-1-mtrxr 1/1 Running 0 1m
2.4 暴露服务
[student@workstation ~]$ oc expose service scaling \
--hostname=scaling.apps.lab.example.com
2.5 web查看相关信息
2.6 测试负载均衡
[student@workstation ~]$ for i in {1..5};do curl -s \http://scaling.apps.lab.example.com | grep IP;done #多次请求
<br/> Server IP: 10.128.0.17
<br/> Server IP: 10.129.0.35
<br/> Server IP: 10.129.0.36
<br/> Server IP: 10.128.0.17
<br/> Server IP: 10.129.0.35
2.7 扩容应用
[student@workstation ~]$ oc describe dc scaling | grep Replicas
Replicas: 3
Replicas: 3 current / 3 desired
[student@workstation ~]$ oc scale --replicas=5 dc scaling
[student@workstation ~]$ oc get pods -o wide
2.8 测试负载均衡
[student@workstation ~]$ for i in {1..5};do curl -s \http://scaling.apps.lab.example.com | grep IP;done #多次请求
<br/> Server IP: 10.128.0.17
<br/> Server IP: 10.128.0.18
<br/> Server IP: 10.129.0.35
<br/> Server IP: 10.129.0.36
<br/> Server IP: 10.129.0.37
三 pod调度控制
3.1 pod调度算法
3.2 调度算法步骤
- 过滤节点
- 对过滤后的节点列表进行优先级排序
- 选择最合适的节点。
3.3 调度拓扑
- 从相同的RC创建的或从相同的DC创建的pod副本调度至具有相同region标签值的节点中运行。
- 副本Pod调位至具有不同zone标签的节点中运行。
$ oc label node1 region=ZheJiang zone=Cloud1A --overwrite
$ oc label node node2 region=ZheJiang zone=Cloud1A --overwrite
$ oc label node node3 region=ZheJiang zone=Cloud2A --overwrite
$ oc label node node4 region=ZheJiang zone=Cloud2A --overwrite
$ oc label node node5 region=HuNan zone=Cloud1B --overwrite
$ oc label node node6 region=HuNan zone=Cloud1B --overwrite
$ oc label node node7 region=HuNan zone=Cloud2B --overwrite
$ oc label node node8 region=HuNan zone=Cloud2B --overwrite
$ oc get node node1.lab.example.com -L region
$ oc get node node1.lab.example.com -L region -L zone #支持oc get跟多个-L选项
3.4 UNSCHEDULABLE节点
$ oc adm manage-node --schedulable=false node2.lab.example.com
$ oc adm drain node2.lab.example.com
$ oc adm manage-node --schedulable=true node2.lab.example.com
3.5 控制pod位置
$ oc patch dc myapp --patch '{"spec":{"template":{"nodeSelector":{"env":"qa"}}}}'
3.5 管理默认项目
- 使用region=infra标签标记专用节点;
- 为缺省名称空间配置缺省节点选择器。
$ oc annotate --overwrite namespace default \
openshift.io/node-selector='region=infra'
四 控制Pod调度
4.1 前置准备
4.2 本练习准备
[student@workstation ~]$ lab schedule-control setup
[student@workstation ~]$ oc login -u admin -p redhat https://master.lab.example.com
4.3 查看region
[student@workstation ~]$ oc get nodes -L region
NAME STATUS ROLES AGE VERSION REGION
master.lab.example.com Ready master 2d v1.9.1+a0ce1bc657
node1.lab.example.com Ready compute 2d v1.9.1+a0ce1bc657 infra
node2.lab.example.com Ready compute 2d v1.9.1+a0ce1bc657 infra
4.4 创建project
[student@workstation ~]$ oc new-project schedule-control
4.5 创建应用
[student@workstation ~]$ oc new-app --name=hello \
--docker-image=registry.lab.example.com/openshift/hello-openshift
4.6 扩展应用
[student@workstation ~]$ oc scale dc hello --replicas=5
deploymentconfig "hello" scaled
[student@workstation ~]$ oc get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE
hello-1-c5z2n 1/1 Running 0 7s 10.128.0.21 node1.lab.example.com
hello-1-hhvp7 1/1 Running 0 34s 10.129.0.38 node2.lab.example.com
hello-1-jqrkb 1/1 Running 0 7s 10.128.0.20 node1.lab.example.com
hello-1-tgmbr 1/1 Running 0 7s 10.129.0.39 node2.lab.example.com
hello-1-z2bn7 1/1 Running 0 7s 10.128.0.22 node1.lab.example.com
4.7 修改节点label
[student@workstation ~]$ oc label node node2.lab.example.com region=apps --overwrite=true
[student@workstation ~]$ oc get nodes -L region #确认修改
NAME STATUS ROLES AGE VERSION REGION
master.lab.example.com Ready master 2d v1.9.1+a0ce1bc657
node1.lab.example.com Ready compute 2d v1.9.1+a0ce1bc657 infra
node2.lab.example.com Ready compute 2d v1.9.1+a0ce1bc657 apps
4.8 导出dc
[student@workstation ~]$ oc get dc hello -o yaml > dc.yaml
4.9 修改node2调度策略
[student@workstation ~]$ vi dc.yaml
……
template:
……
spec:
nodeSelector: #添加节点选择器
region: apps
……
4.10 应用更新
[student@workstation ~]$ oc apply -f dc.yaml
4.11 确认验证
[student@workstation ~]$ oc get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE
hello-2-4c2gv 1/1 Running 0 40s 10.129.0.42 node2.lab.example.com
hello-2-6966b 1/1 Running 0 38s 10.129.0.43 node2.lab.example.com
hello-2-dcqbr 1/1 Running 0 36s 10.129.0.44 node2.lab.example.com
hello-2-dlf8k 1/1 Running 0 36s 10.129.0.45 node2.lab.example.com
hello-2-rnk4w 1/1 Running 0 40s 10.129.0.41 node2.lab.example.com
4.12 修改node1调度策略
[student@workstation ~]$ oc label node node1.lab.example.com region=apps --overwrite=true
[student@workstation ~]$ oc get node -L region
NAME STATUS ROLES AGE VERSION REGION
master.lab.example.com Ready master 2d v1.9.1+a0ce1bc657
node1.lab.example.com Ready compute 2d v1.9.1+a0ce1bc657 apps
node2.lab.example.com Ready compute 2d v1.9.1+a0ce1bc657 apps
4.13 终止node2
[student@workstation ~]$ oc adm manage-node --schedulable=false node2.lab.example.com
NAME STATUS ROLES AGE VERSION
node2.lab.example.com Ready,SchedulingDisabled compute 2d v1.9.1+a0ce1bc657
4.14 删除pod
[student@workstation ~]$ oc adm drain node2.lab.example.com --delete-local-data
4.15 查看pod
[student@workstation ~]$ oc get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
hello-2-bjsj4 1/1 Running 0 51s 10.128.0.25 node1.lab.example.com
hello-2-kmmmn 1/1 Running 0 50s 10.128.0.23 node1.lab.example.com
hello-2-n6wvj 1/1 Running 0 51s 10.128.0.24 node1.lab.example.com
hello-2-plr65 1/1 Running 0 50s 10.128.0.26 node1.lab.example.com
hello-2-xsz68 1/1 Running 0 51s 10.128.0.27 node1.lab.example.com
五 管理IS、image、Templates
5.1 image介绍
5.2 IS
5.3 标记image
5.4 删除tag
5.5 建议的tag形式
描述
|
示例
|
Revision
|
myimage:v2.0.1
|
Architecture
|
myimage:v2.0-x86_64
|
Base Image
|
myimage:v1.2-rhel7
|
Latest Image
|
myimage:latest
|
Latest Stable
|
Image myimage:stable
|
5.6 Templates介绍
5.7 Templates管理
5.8 使用模板
六 管理IS
6.1 前置准备
6.2 本练习准备
[student@workstation ~]$ lab schedule-is setup
6.3 创建项目
[student@workstation ~]$ oc login -u developer -p redhat \
https://master.lab.example.com
[student@workstation ~]$ oc new-project schedule-is
6.4 创建应用
[student@workstation ~]$ oc new-app --name=phpmyadmin \
--docker-image=registry.lab.example.com/phpmyadmin/phpmyadmin:4.7
6.5 创建服务账户
[student@workstation ~]$ oc login -u admin -p redhat
[student@workstation ~]$ oc project schedule-is
[student@workstation ~]$ oc create serviceaccount phpmyadmin-account
6.6 授权特权运行
[student@workstation ~]$ oc adm policy add-scc-to-user anyuid \
-z phpmyadmin-account
6.7 更新pod
[student@workstation ~]$ oc login -u developer
[student@workstation ~]$ oc patch dc/phpmyadmin --patch \
'{"spec":{"template":{"spec":{"serviceAccountName": "phpmyadmin-account"}}}}'
[student@workstation ~]$ oc get pods #确认验证
NAME READY STATUS RESTARTS AGE
phpmyadmin-2-vh29z 1/1 Running 0 3m
6.8 更新内部仓库image
[student@workstation ~]$ cd /home/student/DO280/labs/schedule-is/
[student@workstation schedule-is]$ ls
phpmyadmin-latest.tar trust_internal_registry.sh
[student@workstation schedule-is]$ docker load -i phpmyadmin-latest.tar
#使用docker load命令加载新的image。
[student@workstation schedule-is]$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> 93d0d7db5ce2 13 months ago 166 MB
6.9 tag镜像
[student@workstation schedule-is]$ docker tag 93d0d7db5ce2 \
docker-registry-default.apps.lab.example.com/schedule-is/phpmyadmin:4.7
#打完标记进行推送。
6.10 登录docker仓库
6.11 修改信任
[student@workstation schedule-is]$ ./trust_internal_registry.sh
6.12 推送image
[student@workstation schedule-is]$ docker push \
docker-registry-default.apps.lab.example.com/schedule-is/phpmyadmin:4.7
6.13 确认更新
[student@workstation schedule-is]$ oc get pods
NAME READY STATUS RESTARTS AGE
phpmyadmin-3-hnfjk 1/1 Running 0 23s
七 管理应用部署实验
7.1 前置准备
7.2 本练习准备
[student@workstation ~]$ lab manage-review setup
7.3 确认region
[student@workstation ~]$ oc login -uadmin -predhat https://master.lab.example.com
[student@workstation ~]$ oc get nodes -L region
NAME STATUS ROLES AGE VERSION REGION
master.lab.example.com Ready master 2d v1.9.1+a0ce1bc657
node1.lab.example.com Ready compute 2d v1.9.1+a0ce1bc657 infra
node2.lab.example.com Ready compute 2d v1.9.1+a0ce1bc657 infra
7.4 修改region
[student@workstation ~]$ oc label node node1.lab.example.com region=services --overwrite=true
[student@workstation ~]$ oc label node node2.lab.example.com region=applications --overwrite=true
[student@workstation ~]$ oc get nodes -L region
NAME STATUS ROLES AGE VERSION REGION
master.lab.example.com Ready master 2d v1.9.1+a0ce1bc657
node1.lab.example.com Ready compute 2d v1.9.1+a0ce1bc657 services
node2.lab.example.com Ready compute 2d v1.9.1+a0ce1bc657 applications
7.5 创建项目
[student@workstation ~]$ oc new-project manage-review
7.6 创建应用
[student@workstation ~]$ oc new-app -i php:7.0 \
http://registry.lab.example.com/version
7.7 扩展应用
[student@workstation ~]$ oc scale dc version --replicas=3
[student@workstation ~]$ oc get pods -o wide #确认验证
NAME READY STATUS RESTARTS AGE IP NODE
version-1-9626w 1/1 Running 0 40s 10.129.0.55 node2.lab.example.com
version-1-build 0/1 Completed 0 1m 10.129.0.52 node2.lab.example.com
version-1-f6vj2 1/1 Running 0 40s 10.129.0.56 node2.lab.example.com
version-1-mrhk4 1/1 Running 0 45s 10.129.0.54 node2.lab.example.com
7.8 调度pod
[student@workstation ~]$ oc export dc version -o yaml > version-dc.yml #导出yaml
spac
……
template:
metadata:
……
spec:
nodeSelector: #添加节点选择器
region: applications
……
7.9 迭代部署
[student@workstation ~]$ oc replace -f version-dc.yml #迭代
7.10 确认验证
[student@workstation ~]$ oc get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE
version-1-build 0/1 Completed 0 15m 10.129.0.52 node2.lab.example.com
version-2-2bmqq 1/1 Running 0 58s 10.129.0.60 node2.lab.example.com
version-2-nz58r 1/1 Running 0 1m 10.129.0.59 node2.lab.example.com
version-2-rlj2h 1/1 Running 0 1m 10.129.0.58 node2.lab.example.com
7.11 修改region
[student@workstation ~]$ oc label node node1.lab.example.com region=applications --overwrite=true
[student@workstation ~]$ oc get nodes -L region #确认验证
NAME STATUS ROLES AGE VERSION REGION
master.lab.example.com Ready master 2d v1.9.1+a0ce1bc657
node1.lab.example.com Ready compute 2d v1.9.1+a0ce1bc657 applications
node2.lab.example.com Ready compute 2d v1.9.1+a0ce1bc657 applications
7.12 终止node2
[student@workstation ~]$ oc adm manage-node --schedulable=false node2.lab.example.com
NAME STATUS ROLES AGE VERSION
node2.lab.example.com Ready,SchedulingDisabled compute 2d v1.9.1+a0ce1bc657
7.13 删除pod
[student@workstation ~]$ oc adm drain node2.lab.example.com --delete-local-data
7.14 查看pod
[student@workstation ~]$ oc get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
version-2-d9fhp 1/1 Running 0 3m 10.128.0.34 node1.lab.example.com
version-2-jp5gr 1/1 Running 0 3m 10.128.0.35 node1.lab.example.com
version-2-z5lv5 1/1 Running 0 3m 10.128.0.33 node1.lab.example.com
7.15 暴露服务
[student@workstation ~]$ oc expose service version --hostname=version.apps.lab.example.com
[student@workstation ~]$ curl http://version.apps.lab.example.com #确认测试
<html>
<head>
<title>PHP Test</title>
</head>
<body>
<p>Version v1</p>
</body>
</html>
7.16 确认验证
[student@workstation ~]$ lab manage-review grade #环境脚本判断
7.17 还原环境
[student@workstation ~]$ oc adm manage-node --schedulable=true node2.lab.example.com
[student@workstation ~]$ oc label node node1.lab.example.com region=infra --overwrite=true
[student@workstation ~]$ oc label node node2.lab.example.com region=infra --overwrite=true
[student@workstation ~]$ oc get node -L region
NAME STATUS ROLES AGE VERSION REGION
master.lab.example.com Ready master 2d v1.9.1+a0ce1bc657
node1.lab.example.com Ready compute 2d v1.9.1+a0ce1bc657 infra
node2.lab.example.com Ready compute 2d v1.9.1+a0ce1bc657 infra
[student@workstation ~]$ oc delete project manage-review
007.OpenShift管理应用部署的更多相关文章
- 002.OpenShift安装与部署
一 前置条件说明 1.1 安装准备概述 Red Hat OpenShift容器平台是由Red Hat作为RPM包和容器映像两种类型存在.RPM包使用订阅管理器从标准Red Hat存储库(即Yum存储库 ...
- 009.OpenShift管理及监控
一 资源限制 1.1 pod资源限制 pod可以包括资源请求和资源限制: 资源请求 用于调度,并控制pod不能在计算资源少于指定数量的情况下运行.调度程序试图找到一个具有足够计算资源的节点来满足pod ...
- 使用tomcat manager 管理和部署项目
在部署tomcat项目的时候,除了把war文件直接拷贝到tomcat的webapp目录下,还有一种方法可以浏览器中管理和部署项目,那就是使用tomcat manager. 默认情况下,tomcat m ...
- VM Depot 新功能:直接通过 Windows Azure 管理门户部署虚拟机
发布于 2014-05-09 作者 陈 忠岳 想要尝试 VM Depot 上数以百计的各类开源虚拟机,却因为复杂的命令行操作而感到烦恼?微软开放技术想您所想,及时推出 VM Depot 最新功能 ...
- Mesos+Zookeeper+Marathon的Docker管理平台部署记录(2)- 负载均衡marathon-lb
之前介绍了Mesos+Zookeeper+Marathon的Docker管理平台部署记录(1)的操作,多余的废话不说了,下面接着说下在该集群环境下的负载均衡marathon-lb的部署过程: 默认情况 ...
- Mesos+Zookeeper+Marathon的Docker管理平台部署记录(1)
随着"互联网+"时代的业务增长.变化速度及大规模计算的需求,廉价的.高可扩展的分布式x86集群已成为标准解决方案,如Google已经在几千万台服务器上部署分布式系统.Docker及 ...
- 【Tomcat】使用tomcat manager 管理和部署项目,本地部署项目到服务器
在部署tomcat项目的时候,除了把war文件直接拷贝到tomcat的webapp目录下,还有一种方法可以浏览器中管理和部署项目,那就是使用tomcat manager. 默认情况下,tomcat m ...
- openshift 平台上部署 gitlab代码仓库服务
背景: 本文档将以在openshift 平台上部署 gitlab 服务来验证集群各个服务组件的可用性以及熟悉openshift的使用方法.服务部署方式可以多种多样,灵活部署.本篇以常见的镜像部署方式来 ...
- OPENSHIFT V3 免费部署 Java-Web
OpenShift是红帽的云开发平台即服务(PaaS).自由和开放源码的云计算平台使开发人员能够创建.测试和运行他们的应用程序,并且可以把它们部署到云中.Openshift广泛支持多种编程语言和框架, ...
随机推荐
- Vue 百度地图显示规划路线
Vue 百度地图显示规划路线 1.首选引入相应的文件(建议单页面引入)(如有问题找上一篇博客园) 2.区别就是需要多引入几根不同的文件 import { BaiduMap, BmScale, BmGe ...
- 读Pyqt4教程,带你入门Pyqt4 _013
你是否曾经看着应用程序并思考特定的GUI项是如何产生的?大概每位程序员都这样过.然后你能看到你喜欢的GUI库提供的一系列窗口组件,但是你无法找到它.工具包通常仅仅提供最常用的窗口组件,比如按钮.文本组 ...
- webmin RCE漏洞利用及分析
Webmin是目前功能最强大的基于Web的Unix系统管理工具.管理员通过浏览器访问Webmin的各种管理功能并完成相应的管理动作. 利用条件:webmin <= 1.910 原因:官网 Sou ...
- 01 . Redis简介及部署主从复制
简介 Remote Dictionary Server, 翻译为远程字典服务, Redis是一个完全开源的基于Key-Value的NoSQL存储系统,他是一个使用ANSIC语言编写的,遵守BSD协议, ...
- 循序渐进VUE+Element 前端应用开发(5)--- 表格列表页面的查询,列表展示和字段转义处理
在我们一般开发的系统界面里面,列表页面是一个非常重要的综合展示界面,包括有条件查询.列表展示和分页处理,以及对每项列表内容可能进行的转义处理,本篇随笔介绍基于Vue +Element基础上实现表格列表 ...
- itext7史上最全实战总结
1. itext7史上最全实战总结 1.1. 前言 最近有个需求需要我用Java手动写一份PDF报告,经过考察几种pdf开源代码,最终选取了itext7,此版本为7.1.11,由于发现网上关于该工具的 ...
- dell5460笔记本电脑ubuntu18.04系统音频驱动的安装和使用
一.背景: 近期使用dell5460笔记本在ubuntu系统下观看视频,发现没有声音,考虑安装音频驱动. 二.音频驱动的安装 linux系统的音频驱动基于ALSA(即Advanced Linux So ...
- MethodHandle(方法句柄)系列之三:invoke和invokeExact的区别
先把代码贴上来,用的是一样的代码 /** * * @author LiuYeFeng<897908343@qq.com> * @date 2015年4月8日 下午10:41:13 * @C ...
- Java实现 LeetCode 461 汉明距离
461. 汉明距离 两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目. 给出两个整数 x 和 y,计算它们之间的汉明距离. 注意: 0 ≤ x, y < 231. 示例: 输入 ...
- Java实现 LeetCode 268 缺失数字
268. 缺失数字 给定一个包含 0, 1, 2, -, n 中 n 个数的序列,找出 0 - n 中没有出现在序列中的那个数. 示例 1: 输入: [3,0,1] 输出: 2 示例 2: 输入: [ ...