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广泛支持多种编程语言和框架, ...
随机推荐
- HTML开发实例-简单相亲网站开发(主体为table)
实现功能:简单的相亲网站: 清楚不常在,抓紧谈恋爱 我承诺 年满十八岁 单身 抱着严肃态度 寻找真诚的另一半 性别: 男 女 生日: --请选择年-- 2019 2020 2021 --请选择月-- ...
- python 比较常见的工具方法
下面是一些工作过程中比较常见的工具方法,但不代表最终答案.希望能对你有所帮助,如果您有更好更多的方法工具,欢迎推荐! 1. 按行读取带json字符串的文件 # -*- coding:utf-8 -*- ...
- 常用docker命令备忘录
查看镜像 docker images 查看运行中的容器 docker ps 删除镜像 docker rmi 容器id 直接删除所有镜像 docker rmi `docker images -q` 直接 ...
- Linux passwd 提权
利用条件,passwd 可写 ls -al /etc/passwd 利用方式: 生成密钥 openssl passwd -1 -salt test 123456 写入passwd echo 'tes ...
- Alpha冲刺 —— 5.2
这个作业属于哪个课程 软件工程 这个作业要求在哪里 团队作业第五次--Alpha冲刺 这个作业的目标 Alpha冲刺 作业正文 正文 github链接 项目地址 其他参考文献 无 一.会议内容 1.展 ...
- jchdl - GSL实例:FullAdder(使用HalfAdder实现)
https://mp.weixin.qq.com/s/5mcYAllizuxyr3QSNrotrw 全加器是能够计算低位进位的二进制加法电路.与半加器相比,全加器不只考虑本位计算结果是否有进位,也考虑 ...
- InnoSetup汉化版打包工具下载-附带脚本模板
InnoSetup汉化版打包工具下载地址: https://www.90pan.com/b1907264 脚本模板 ; 脚本用 Inno Setup 脚本向导 生成.; 查阅文档获取创建 INNO S ...
- Java实现 LeetCode 721 账户合并(并查集)
721. 账户合并 给定一个列表 accounts,每个元素 accounts[i] 是一个字符串列表,其中第一个元素 accounts[i][0] 是 名称 (name),其余元素是 emails ...
- Java实现 蓝桥杯 算法提高 周期字串
算法提高 周期字串 时间限制:1.0s 内存限制:256.0MB 问题描述 右右喜欢听故事,但是右右的妈妈总是讲一些"从前有座山,山里有座庙,庙里有个老和尚给小和尚讲故事,讲的什么呢?从前有 ...
- Java实现 蓝桥杯VIP 基础练习 芯片测试
问题描述 有n(2≤n≤20)块芯片,有好有坏,已知好芯片比坏芯片多. 每个芯片都能用来测试其他芯片.用好芯片测试其他芯片时,能正确给出被测试芯片是好还是坏.而用坏芯片测试其他芯片时,会随机给出好或是 ...