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广泛支持多种编程语言和框架, ...
随机推荐
- 【JavaScript数据结构系列】07-循环链表CircleLinkedList
[JavaScript数据结构系列]07-循环链表CircleLinkedList 码路工人 CoderMonkey 转载请注明作者与出处 1. 认识循环链表 首节点与尾节点相连的,就构成循环链表.其 ...
- [ES6系列-07]Generator Function: 生成器函数
[原创]码路工人 Coder-Power 大家好,这里是码路工人有力量,我是码路工人,你们是力量. github-pages 博客园cnblogs Generator function 生成器函数是E ...
- Black Hat Python之#2:TCP代理
在本科做毕设的时候就接触到TCP代理这东西,当时需要使用代理来对发送和收到的数据做修改,同时使用代理也让我对HTTP协议有了更深的了解. TCP Proxy用到的一个主要的东西就是socket.pro ...
- SSL/TLS/WTLS
转载来自http://blog.csdn.net/fw0124/article/details/8470940 一 前言 首先要澄清一下名字的混淆: 1 SSL(Secure Socket Layer ...
- Windows平台搭建Git服务教程详解
引言 软件企业的核心就是代码,如何确保代码的安全?如何在团队开发中协同工作?为解决这些问题,我们需要采用相应的管理工具来满足管理的需求.探长从最初的VSS.SVN.TFS到现在的Git存储一路走来,感 ...
- Java实现 LeetCode 827 最大人工岛(DFS+暴力模拟)
827. 最大人工岛 在二维地图上, 0代表海洋, 1代表陆地,我们最多只能将一格 0 海洋变成 1变成陆地. 进行填海之后,地图上最大的岛屿面积是多少?(上.下.左.右四个方向相连的 1 可形成岛屿 ...
- Java实现 蓝桥杯VIP 算法提高 十进制转八进制数
import java.util.Scanner; public class 十进制转八进制 { public static void main(String[] args) { Scanner sc ...
- Java实现 蓝桥杯VIP 算法训练 Hanoi问题
问题描述 如果将课本上的Hanoi塔问题稍做修改:仍然是给定N只盘子,3根柱子,但是允许每次最多移动相邻的M只盘子(当然移动盘子的数目也可以小于M),最少需要多少次? 例如N=5,M=2时,可以分别将 ...
- Java实现 蓝桥杯VIP 算法训练 采油区域
算法训练 采油区域 时间限制:2.0s 内存限制:512.0MB 提交此题 查看参考代码 采油区域 Siruseri政府决定将石油资源丰富的Navalur省的土地拍卖给私人承包商以建立油井.被拍卖的整 ...
- Java实现 LeetCode 220 存在重复元素 III(三)
220. 存在重复元素 III 给定一个整数数组,判断数组中是否有两个不同的索引 i 和 j,使得 nums [i] 和 nums [j] 的差的绝对值最大为 t,并且 i 和 j 之间的差的绝对值最 ...