金鱼哥RHCA回忆录:DO280管理应用部署--管理image 、IS、Templates与章节实验

举报
金鱼哥 发表于 2022/08/29 14:30:39 2022/08/29
【摘要】 第七章 DO280管理应用部署--管理image 、IS、Templates与章节实验

🎹 个人简介:大家好,我是 金鱼哥,CSDN运维领域新星创作者,华为云·云享专家,阿里云社区·专家博主
📚个人资质:CCNA、HCNP、CSNA(网络分析师),软考初级、中级网络工程师、RHCSA、RHCE、RHCA、RHCI、ITIL😜
💬格言:努力不一定成功,但要想成功就必须努力🔥

🎈支持我:可点赞👍、可收藏⭐️、可留言📝


📜管理image 、IS、Templates

📑image介绍

在OpenShift中,image是一个可部署的runtime模板,它包含运行单个容器的所有需求,还包括imag功能的元数据。image可以通过多种方式管理,如tag、import、pull和update。

image可以跨多个主机部署在多个容器中。开发人员可以使用Docker构建image,也可以使用OpenShift构建工具。

OpenShift实现了灵活的image管理机制。一个image名称实际上可以引用同一image的许多不同版本。唯一的image由它的sha256哈希引用,Docker不使用版本号。相反,它使用tag来管理image,例如v1、v2或默认的latest tag。


📑IS

IS包括由tags标识的任意数量的容器images。它是相关image的统一虚拟视图,类似于Docker image仓库。开发人员有许多与image和IS交互的方法。例如,当添加或修改新image时,build和deployment可以接收通知,并通过运行新build或新deployment做出相应的动作。


📑标记image

OCP提供了oc tag命令,它类似于docker tag命令,但是,它是对IS而不是image进行操作。

可以向image添加tag,以便更容易地确定它们包含什么。tag是指定image版本的标识符。

示例:将Apache web服务器2.4版本的映像,可将该image执行以下标记。

apache: 2.4

如果仓库包含Apache web服务器的最新版本,他们可以使用latest标签来表示这是仓库中可用的最新image。

apache:latest

oc tag命令用于标签image:

[user@demo ~]$ oc tag source destination
  • source:现有tag或图像流中的图像。

  • destination:标签在一个或多个IS中的最新image。

示例:将ruby image的现有latest标记修改为当前版本v2.0标识,

[user@demo ~]$ oc tag ruby:latest ruby:2.0

📑删除tag

若要从image中删除标记,可使用-d参数。

[user@demo ~]$ oc tag -d ruby:latest

可以使用不同类型的标签,默认行为使用permanent tag,即源文件发生更改,该tag也会及时指向image,与目标tag无关。

tracking tag指示在导入image期间导入目标tag的元数据。要确保目标tag在源tag更改时得到更新,需使用–alias=true标识。

[user@demo ~]$ oc tag --alias=true source destination

要重新导入tag,可使用–scheduled=true标识。

[user@demo ~]$ oc tag --scheduled=true source destination

要配置Docker始终从内部仓库中获取image,可使用–reference-policy=local标志。默认情况下,image指向本地仓库。从而实现在之后调用image的时候可以快速pull。

[user@demo ~]$ oc tag --reference-policy=local source destination

📑建议的tag形式

在管理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

📑Templates介绍

模板描述一组对象,其中包含处理后生成对象列表的参数。可以处理模板来创建开发人员有权在项目中创建的任何内容,例如service、build、configuration和dc。

模板还可以定义一组标签,应用于它定义的每个对象。开发人员可以使用命令行界面或web控制台从模板创建对象列表。


📑Templates管理

开发人员可以用JSON或YAML格式编写模板,并使用命令行界面或web控制台导入它们。模板被保存到项目中,以供对该特定项目具有适当访问权限的任何用户重复使用。

示例:导入模板。

[user@demo ~]$ oc create -f filename

还可以在导入模板时分配标签,这意味着模板定义的所有对象都将被标记。

[user@demo ~]$ oc create -f filename -l name=mylabel

在这里插入图片描述

①将文件定义为模板。

②指定模板的名称。

③将标签应用到模板。标签可以用于搜索和分组。

④将pod声明为此模板的资源。

⑤为模板中定义的pod定义环境变量。

⑥设置模板参数。参数允许一个值由用户提供或在模板实例化时生成。


📑使用模板

OCP提供了许多默认的instant app和QuickStart模板,允许开发人员为不同的语言快速创建新的应用程序。为Rails (Ruby)、Django (Python)、Node.js、CakePHP (PHP)和Dancer (Perl)提供了模板。

要列出集群中的可用模板,请运行oc get templates命令。参数-n指定要使用的项目。

[user@demo ~]$ oc get templates -n openshift

开发人员还可以使用web控制台浏览模板,当您选择模板时,可以调整可用的参数来自定义模板定义的资源。

在这里插入图片描述

在这里插入图片描述


📜课本练习

📑环境准备

[student@workstation ~]$ lab install-prepare setup
[student@workstation ~]$ cd /home/student/do280-ansible
[student@workstation do280-ansible]$ ./install.sh

提示:若已经拥有一个完整环境,可不执行


📑本练习准备

[student@workstation ~]$ lab schedule-is setup

📑创建项目

[student@workstation ~]$ oc login -u developer -p redhat https://master.lab.example.com
[student@workstation ~]$ oc new-project schedule-is

📑创建应用

[student@workstation ~]$ oc new-app --name=phpmyadmin --docker-image=registry.lab.example.com/phpmyadmin/phpmyadmin:4.7

📑创建服务账户

[student@workstation ~]$ oc login -u admin -p redhat
[student@workstation ~]$ oc project schedule-is
[student@workstation ~]$ oc create serviceaccount phpmyadmin-account

📑授权特权运行

[student@workstation ~]$ oc adm policy add-scc-to-user anyuid -z phpmyadmin-account

📑更新pod

[student@workstation ~]$  oc login -u developer
[student@workstation ~]$ oc patch dc/phpmyadmin --patch '{"spec":{"template":{"spec":{"serviceAccountName": "phpmyadmin-account"}}}}'

# 更新负责管理phpmyadmin部署的dc资源,以便使用新创建的服务帐户。可以使用oc patch或oc edit命令。此命令可以从/home/student/DO280/labs/secure-review文件夹中的patch-dc.sh脚本中复制。

[student@workstation ~]$ oc get pods
NAME                 READY     STATUS    RESTARTS   AGE
phpmyadmin-2-q8b48   1/1       Running   0          54s

# name后的2表示这个pod是第二次部署,即进行过迭代。


📑更新内部仓库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
[student@workstation schedule-is]$ docker images
REPOSITORY                                      TAG                 IMAGE ID            CREATED             SIZE
<none>                                          <none>              93d0d7db5ce2        2 years ago         166 MB

📑tag镜像

[student@workstation schedule-is]$ docker tag 93d0d7db5ce2 docker-registry-default.apps.lab.example.com/schedule-is/phpmyadmin:4.7
[student@workstation schedule-is]$ docker images
REPOSITORY                                                            TAG                 IMAGE ID            CREATED             SIZE
docker-registry-default.apps.lab.example.com/schedule-is/phpmyadmin   4.7                 93d0d7db5ce2        2 years ago         166 MB

📑登录docker仓库

[student@workstation schedule-is]$ TOKEN=$(oc whoami -t)
[student@workstation schedule-is]$ echo $TOKEN
VdZV4A6ySzwTVDn-rR717O4Je1mT7jEbHtjeNnuy8nQ
[student@workstation schedule-is]$ docker login -u developer -p ${TOKEN} docker-registry-default.apps.lab.example.com
Error response from daemon: Get https://docker-registry-default.apps.lab.example.com/v1/users/: x509: certificate signed by unknown authority
# docker仓库会提示因为是自签名证书,因此判定为不安全的方式。

📑修改信任

本环境使用/home/student/DO280/labs/schedule-is文件夹中的trust_internal_registry.sh脚本,配置docker仓库信任OpenShift内部仓库。

[student@workstation schedule-is]$ ./trust_internal_registry.sh 
Fetching the OpenShift internal registry certificate.
done.

Copying certificate to the correct directory.
done.

System trust updated.

Restarting docker.
done.

📑登录并推送image

[student@workstation schedule-is]$ docker login -u developer -p ${TOKEN} docker-registry-default.apps.lab.example.com
Login Succeeded
[student@workstation schedule-is]$ docker push docker-registry-default.apps.lab.example.com/schedule-is/phpmyadmin
…………
730b09e0430c: Pushed 
f06b58790eeb: Pushed 
cd7100a72410: Pushed 
4.7: digest: sha256:b003fa5555dcb0a305d26aec3935b3a1127179ea8ad9d57685df4e4eab912ca8 size: 3874
[student@workstation schedule-is]$ 

📑确认更新

验证当源image更新后,是否能自动触发OpenShift进行pod更新。

[student@workstation schedule-is]$ oc get pod
NAME                 READY     STATUS    RESTARTS   AGE
phpmyadmin-3-gp5sw   1/1       Running   0          51s

📜章节实验

📑环境准备

[student@workstation ~]$ lab install-prepare setup
[student@workstation ~]$ cd /home/student/do280-ansible
[student@workstation do280-ansible]$ ./install.sh

提示:若已经拥有一个完整环境,可不执行


📑本练习准备

[student@workstation ~]$ lab manage-review setup

📑确认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    16d       v1.9.1+a0ce1bc657   
node1.lab.example.com    Ready     compute   16d       v1.9.1+a0ce1bc657   infra
node2.lab.example.com    Ready     compute   16d       v1.9.1+a0ce1bc657   infra

📑修改region标签

[student@workstation ~]$ oc label node node1.lab.example.com \
region=services --overwrite=true
node "node1.lab.example.com" labeled
[student@workstation ~]$ oc label node node2.lab.example.com \
region=applications --overwrite=true
node "node2.lab.example.com" labeled
[student@workstation ~]$ oc get nodes -L region
NAME                     STATUS    ROLES     AGE       VERSION             REGION
master.lab.example.com   Ready     master    18d       v1.9.1+a0ce1bc657   
node1.lab.example.com    Ready     compute   18d       v1.9.1+a0ce1bc657   services
node2.lab.example.com    Ready     compute   18d       v1.9.1+a0ce1bc657  applications

📑创建项目

[student@workstation ~]$ oc new-project manage-review

📑创建应用

[student@workstation ~]$ oc new-app -i php:7.0 http://registry.lab.example.com/version

📑扩展应用

[student@workstation ~]$ oc scale dc/version --replicas=3
deploymentconfig "version" scaled
[student@workstation ~]$ oc get pod -o wide
NAME              READY     STATUS      RESTARTS   AGE       IP            NODE
version-1-94ptg   1/1       Running     0          4m        10.129.1.20   node2.lab.example.com
version-1-build   0/1       Completed   0          5m        10.129.1.18   node2.lab.example.com
version-1-jt2tj   1/1       Running     0          9s        10.129.1.21   node2.lab.example.com
version-1-zrzcm   1/1       Running     0          9s        10.129.1.22   node2.lab.example.com

结论:应用程序pod并没有均分在两个集群node节点之间,因为每个节点属于不同的region,并且默认的OpenShift调度器配置打开了区域粘性。


📑调度pod

[student@workstation ~]$ oc export dc version -o yaml > version-dc.yml	 #导出yaml
[student@workstation ~]$ vim version-dc.yml
……
  template:
    metadata:
……
    spec:
      nodeSelector:		#添加节点选择器
        region: applications
……

📑迭代部署

[student@workstation ~]$ oc replace -f version-dc.yml
deploymentconfig "version" replaced

📑确认验证

[student@workstation ~]$ oc get pod -o wide
NAME              READY     STATUS        RESTARTS   AGE       IP            NODE
version-1-94ptg   0/1       Terminating   0          15m       10.129.1.20   node2.lab.example.com
version-1-build   0/1       Completed     0          16m       10.129.1.18   node2.lab.example.com
version-2-dhvmq   1/1       Running       0          13s       10.129.1.24   node2.lab.example.com
version-2-fnsvh   1/1       Running       0          6s        10.129.1.26   node2.lab.example.com
version-2-jgpll   1/1       Running       0          9s        10.129.1.25   node2.lab.example.com

验证是否启动了新的部署,并且在node2节点上运行了一组新的版本pod。等待所有三个新的应用程序pod都准备好并运行


📑修改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    18d       v1.9.1+a0ce1bc657   
node1.lab.example.com    Ready     compute   18d       v1.9.1+a0ce1bc657   applications
node2.lab.example.com    Ready     compute   18d       v1.9.1+a0ce1bc657   applications

📑终止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   18d       v1.9.1+a0ce1bc657
[student@workstation ~]$ oc get nodes -L region2
NAME                     STATUS                     ROLES     AGE       VERSION             REGION2
master.lab.example.com   Ready                      master    18d       v1.9.1+a0ce1bc657 
node1.lab.example.com    Ready                      compute   18d       v1.9.1+a0ce1bc657 
node2.lab.example.com    Ready,SchedulingDisabled   compute   18d       v1.9.1+a0ce1bc657 

📑删除pod

删除node2的pod,并使用node1创建的pod替换。

[student@workstation ~]$ oc adm drain node2.lab.example.com --delete-local-data
node "node2.lab.example.com" already cordoned
WARNING: Deleting pods with local storage: version-1-build
pod "version-1-build" evicted
pod "router-1-gns92" evicted
pod "version-2-dhvmq" evicted
pod "version-2-jgpll" evicted
pod "version-2-fnsvh" evicted
node "node2.lab.example.com" drained

📑查看pod

[student@workstation ~]$ oc get pod -o wide
NAME              READY     STATUS    RESTARTS   AGE       IP             NODE
version-2-85489   1/1       Running   0          42s       10.128.0.213   node1.lab.example.com
version-2-l7qbn   1/1       Running   0          42s       10.128.0.214   node1.lab.example.com
version-2-m2zbr   1/1       Running   0          41s       10.128.0.215   node1.lab.example.com

📑暴露服务并验证

[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>

📑评分并还原环境

[student@workstation ~]$ lab manage-review grade
[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    18d       v1.9.1+a0ce1bc657   
node1.lab.example.com    Ready     compute   18d       v1.9.1+a0ce1bc657   infra
node2.lab.example.com    Ready     compute   18d       v1.9.1+a0ce1bc657   infra
[student@workstation ~]$ oc delete project manage-review

💡总结

RHCA认证需要经历5门的学习与考试,还是需要花不少时间去学习与备考的,好好加油,可以噶🤪。

以上就是【金鱼哥】对 第七章 DO280管理应用部署–管理image 、IS、Templates与章节实验 的简述和讲解。希望能对看到此文章的小伙伴有所帮助。

💾红帽认证专栏系列:
RHCSA专栏:戏说 RHCSA 认证
RHCE专栏:戏说 RHCE 认证
此文章收录在RHCA专栏:RHCA 回忆录

如果这篇【文章】有帮助到你,希望可以给【金鱼哥】点个赞👍,创作不易,相比官方的陈述,我更喜欢用【通俗易懂】的文笔去讲解每一个知识点。

如果有对【运维技术】感兴趣,也欢迎关注❤️❤️❤️ 【金鱼哥】❤️❤️❤️,我将会给你带来巨大的【收获与惊喜】💕💕!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。