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广泛支持多种编程语言和框架, ...
随机推荐
- Python——关于定义过程
def sum(a,b): a = a + b return a print(sum(1,2)) s = 3 t = 5 print(sum(s,t)) 题目:你觉得前三行代码会输出什么? 1.输入两 ...
- MVC案例之多个请求对应一个servlet
CustomerServlet package com.aff.mvcapp.servlet; import java.io.IOException; import java.lang.reflec ...
- 前端练手小项目——网页版qq音乐仿写
qq音乐网页版仿写 一些步骤与注意事项 一开始肯定就是html+css布局和页面了,这段特别耗时间,耐心写完就好了 首先要说一下大致流程: 一定要先布局html!,所以一定要先分析页面布局情况,用不同 ...
- 基于nodejs+express+mysql+webstorm+html的 增删改查
一.工具准备 Nodejs框架,WebStorm.Mysql服务.Navicat.此篇文章只讲项目的搭建过程,至于Nodejs,WebStorm.Mysql的下载.安装与配置网上资源很多,请自行查阅, ...
- 《CEO说》读后感
<CEO说>读书心得(1至3章): 成功的企业和街头小贩有着共性的商业智慧,能够透过复杂的表象看到商业的本质,化繁为简,抓住企业经营的根本要素(现金净流入.利润.周转率.资产收益率.业务增 ...
- Netty学习笔记(番外篇) - ChannelHandler、ChannelPipeline和ChannelHandlerContext的联系
这一篇是 ChannelHandler 和 ChannelPipeline 的番外篇,主要从源码的角度来学习 ChannelHandler.ChannelHandler 和 ChannelPipeli ...
- 【极客思考】计算机网络:Wireshark抓包分析TCP中的三次握手与四次挥手
[摘要]本文重点分析计算机网络中TCP协议中的握手和挥手的过程. [前提说明] 前段时间突然看到了一篇关于TCP/IP模型的文章,心想这段时间在家里也用wireshark抓了点包,那么想着想着就觉得需 ...
- Flutter 动画鼻祖之CustomPaint
老孟导读:CustomPaint可以称之为动画鼻祖,它可以实现任何酷炫的动画和效果.CustomPaint本身没有动画属性,仅仅是绘制属性,一般情况下,CustomPaint会和动画控制配合使用,达到 ...
- JavaWeb项目:旅游网站【涉及各种知识】
JQuery异步请求(ajax) $.ajax({ // 请求方式为get或者post等 type: "GET", // 服务器响应的数据类型 dataType: "js ...
- Java实现 LeetCode 380 常数时间插入、删除和获取随机元素
380. 常数时间插入.删除和获取随机元素 设计一个支持在平均 时间复杂度 O(1) 下,执行以下操作的数据结构. insert(val):当元素 val 不存在时,向集合中插入该项. remove( ...