1、Project 和 Namespace

在 Kubernetes 中使用命名空间(Namespace)的概念来分隔资源 。 在同一个命名空间中,某一个对象的名称在其分类中必须是唯一的,但是分布在不同命名空间中的对象则可以同名 。 OpenShift 中继承了 Kubernetes命名空间的概念,而且在其之上定义了 Project对象的概念 。每一个 Project会和一个 Namespace相关联,甚至可以简单地认为,Project就是Namespace。

常用命令:oc project (查看用户当前所在的project)、oc get projects (查看所有项目)、oc project <project-name> (切换到指定项目)

2、Pod

在 OpenShift 上运行的容器会被一种叫 Pod 的对象所“包裹”,用户不会直接看到 Docker 容器本身。从技术上来说, Pod其实也是一种特殊的容器。

常用命令:oc get pod (查看所有pod)、oc describe pod <pod-name> (查看该pod的详细信息)

oc logs <pod-name> (查看pod的log)、oc rsh <pod-name> (可以进入pod内部执行命令)

3、Service

容器是一个非持久化的对象。所有对容器的修改在容器销毁后默认都会丢失。同一个Docker镜像实例化形成容器后,会恢复到这个镜像初始定义的状态,并且获取一个新的IP地址。

为了克服容器变化引发的连接信息的变化, Kubernetes 提供了一种叫 Service (服务) 的组件。当部署某个应用时,我们会为该应用创建一个 Service对象。 Service对象会与该应用的一个或多个 Pod关联。 同时每个 Service会被分配到一个IP地址,这个IP地址是相对恒定的。通过访问这个 IP 地址及相应的端口(或者service域名),请求就会被转发到对应 Pod 的相应端口。

注意⚠️:Service提供了一个通往后端 Pod集群的稳定的人口,但是 Service的 IP地址只是集群内部的节点及容器可见(外部不可达)。 对于外部的应用或者用户来说,这个地址是不可达的。(Service域名的格式是 <SERV工CE NAME> . <PROJECT NAME> . svc.cluster.local)

测试==》通过oc rsh <pod-name>进入pod内部执行命令:curl <service-ip>:<service-port>,可以看到访问成功。

常用命令:oc get svc (查看当前项目下的所有service列表)

4、Router 和 Route

一个 Route 会与一个 Service 相关联,并且绑定一个域名(外部可达)。Route规则会被 Router 加载。 当用户通过指定域名访问应用时,域名会被解析并指向 Router所在的计算节点上 。 Router获取这个请求,然后根据 Route 规则定义转发给与这个域名对应的Service。然后Service会接着做一个load banlance,转发请求到后端所关联的 Pod 容器实例。

PS:其实 Router 组件就是一个运行在容器内的 Haproxy,是一个特殊定制的 Haproxy。

常用命令:oc get route (查看项目中所有的route)

5、Secure Route(开启HTTPS)

Secure Route其实是route的一种,只不过是开启了TLS termination。注:TLS(Transport Layer Security)传输层安全性协议,其前身是安全套接层(Secure Sockets Layer,缩写作SSL)是一种安全协议,目的是为互联网通信提供安全及数据完整性保障。

三种TLS termination type:

1⃣️Edge:TLS在router上被终结,然后非SSL网络包被转发给后端pod。因此需要在 router 上安装 TLS 证书。不安装的话,会使用 router 的默认证书。(即在Route上安装certificate证书,pod内部程序不安装证书,因此外部是https,内部是http)

2⃣️passthrough:加密网络包直接被发给 pod,router 上不做TLS 终结,因此不需要在 router 上配置证书或密钥。(即在Route上不安装证书,在pod内部安装证书,因此外部是http,内部是https)

3⃣️Re-encryption:是 edge 的一种变种。首先 router 上会使用一个证书做 TSL 终结,然后使用另外的证书再进行加密,然后发给后端 pod。因此,整个网络路径都是加密的。(内外部全部https)

注意⚠️:使用Secure Route,访问路径都是https。

6、Persistent Storage

容器默认是非持久化的,所有的修改在容器销毁时都会丢失。 但现实是传统的应用大多都是有状态的,因此要求某些容器内的数据必须持久化,容器云平台(OCP:openshift container platform)必须为容器提供持久化储存( persistent storage)。

OpenShift 除了支持 Docker 持久化卷的挂载方式外,还提供了一种持久化供给模型,即 Persistent Volume (持久化卷, PV)及 Persistent Volume Claim (持久化卷请求, PVC)模型 。

在 PV 和 PVC 模型中,集群管理员会创建大量不同大小和不同特性的 PV。 用户在部署应用时,显式声明对持久化的需求,创建  PVC。用户在 PVC 中定义所需存储的大小、访问方式(只读或可读可写;独占或共享) 。OpenShift 集群会自动寻找符合要求的 PV 与 PVC 自动对接 。

常用命令:oc get pv (查看所有持久化卷,需要admin权限)、oc get pvc(查看所有持久化卷请求)

7、Registry

OpenShift 提供了一个内部的 Docker 镜像仓库( Registry),该镜像仓库用于存放用户通过内置的 Source to Image 镜像构建流程所产生的镜像 。每当 S2I 完成镜像构建,就会向内部的镜像仓库推送构建完成的镜像 。

Registry 组件默认以容器的方式提供,因此我们可以通过 oc get pod -n default 查看 Registry 容器的状态。同理,通过 oc get svc -n default 可以查看 Registry 容器对应的 Service 信息。

8、Source to Image (S2I)

一个典型的 S21 流程包含了以下几个步骤。

1⃣️ 用户输入源代码仓库的地址。

2⃣️ 用户选择 S2I 构建的基础镜像(又称为 Builder 镜像)。 Builder镜像中包含了操作系统、编程语言、框架等应用所需的软件及配置。 OpenShift 默认提供了多种编程语言的 Builder 镜像,如 Java、 PHP、 Ruby、 Python、 Perl等。 用户也可以根据自身需求定制自己的 Builder镜像,并发布到服务目录中供用户选用 。

3⃣️ 用户或系统触发 S2I 构建 。 OpenShift 将实例化 S2I 构建执行器 。

4⃣️ S2I 构建执行器将从用户指定的代码仓库下载源代码。

5⃣️ S2I 构建执行器实例化 Builder 镜像。 代码将会被注入 Builder 镜像中。

6⃣️ Builder 镜像将根据预定义的逻辑执行源代码的编译、构建并完成部署。

7⃣️ S2I构建执行器将完成操作的 Builder 镜像去生成新的 Docker 镜像。

8⃣️ S2I构建执行器将新的镜像推送到 OpenShift 内部的镜像仓库(Registry)。

9⃣️ S2I构建执行器更新该次构建相关的 Image Stream 信息。

注:S2I 构建完成后,根据用户定义的部署逻辑, OpenShift将把镜像实例化部署到集群中 。 除了接受源代码仓库地址作为输入外, S2I还接受 Dockerfile 以及二进制文件作为构建的输入。 用户甚至可以完全自定义构建逻辑来满足特殊的需求。

9、Image Stream

OpenShift 定义了 Image Stream 的概念来管理一组镜像的集合 。 在一个 Image Stream 中可以定义多个镜像名称和 Tag,然后再指向实际的 Docker镜像。通过 oc get / describe is 命令来查看 Image Stream 信息。

10、镜像构建:Build Config 与 Build

Build Config 用于指导应用构建过程,包括源码位置、构建策略、构建触发配置等。通过 oc get bc 可以查看所有的 build config 信息。如果想进一步获取某个 Build Config 的具体配置信息可使用 oc get bc <build-config-name> -o yaml 命令。

Build Config 只是静态的配置信息 。 OpenShift 根据这个静态的配置信息可以触发多次实际的构建实例,构建的实例称为 Build。 一个 Build Config 可以被多次触发, 生成多个Build。通过 oc get build 命令,可以查看生成的 build 列表。执行 oc logs build/<build-name> 命令,可以查看本次 build 的详细信息。如果想执行一次新的构建,可使用 oc new-build <svc-name> 命令。

11、镜像部署:Deployment Config 与 Deploy

Deployment Config 描述了镜像部署的参数和要求。通过 oc get dc 命令可以查看项目中的 Deployment Config 列表。执行 oc get dc <svc-name> -o yaml 命令,可以查看该 DeploymentConfig 的详细定义 。在 Deployment Config 中会定义 Trigger (触发器),使部署在某些特定条件下自动触发,如 S2I 完成时。

每个 Deployment Config 可以被多次触发,每一次触发称为一个 Deploy。 每一次 Deploy 都会生成一个 Replication Controller 对象,用以监控容器的状态。 Replication Controller (复制控制器)是 Kubernetes 中的一个组件,其负责监控容器的实际数量。通过 oc get rc 可以查看 Replication Controller 列表。

Openshift 的更新部署策略有 Rolling 和 Recreate 两种。

1⃣️ Rolling(滚动更新)是指 Openshift 在部署时,会等一定数量的新版本容器实例启动完毕后,在终结一定数量的老版本容器实例,通过这种方式对容器集群中的实例进行逐一替换更新。这种方式可以保证应用在更新发布的过程中不会出现服务中断。

2⃣️ Recreate(重新创建)是指在更新时将所有老容器应用先停止,然后再启动一批新版本的容器实例。

12、Replication Controller

在 OpenShift 中,每一个部署的应用的容器实例数量在其 Deployment Config 中定义。实际部署时,OpenShift 为每次的部署实例化一个 Replication Controller,并将该数值传递给相关联的 Replication Controller。 Replication Controller是 Kubernetes 的一个组件,其负责维护容器实例的数量 。

可以通过 oc scale dc <service-name> --replicas=n 命令来将该 service 应用弹性伸缩为 n 个实例。

其他

oc login/logout 登录/登出OCP

如何触发部署:oc tag --source=docker <docker-registry>/<project-name>:<tag> <ocp-project-name>/<ocp-service-name>:<tag>

更多

Openshift入门:核心流程及服务部署/发现/发布/治理详解

Openshift入门:应用数据持久化(PV及PVC)

Openshift入门:基本概念解析相关推荐

  1. Apache Flink 零基础入门(一):基础概念解析

    Apache Flink 的定义.架构及原理 Apache Flink 是一个分布式大数据处理引擎,可对有限数据流和无限数据流进行有状态或无状态的计算,能够部署在各种集群环境,对各种规模大小的数据进行 ...

  2. vuex 源码分析_前端入门之(vuex-router-sync解析)

    前端入门之(vuex-router-sync解析) 发布时间:2018-11-14 13:31, 浏览次数:513 , 标签: vuex router sync 前言:vue全家桶的内容我们已经研究过 ...

  3. 四.MongoDB 概念解析

    1.MongoDB 概念解析 不管我们学习什么数据库都应该学习其中的基础概念,在mongodb中基本的概念是文档.集合.数据库,下面我们依次介绍. 下表将帮助您更容易理解Mongo中的一些概念: SQ ...

  4. 【深度学习】梯度和方向导数概念解析(代码基于Pytorch实现)

    [深度学习]梯度和方向导数概念解析(代码基于Pytorch实现) 文章目录 1 方向导数 2 梯度 3 自动求导实现 4 梯度下降4.1 概述4.2 小批量梯度下降 5 总结 1 方向导数 方向导数的 ...

  5. 【数字信号处理】相关系数 ( 相关系数概念解析 | 信号能量常数 | 共轭序列 | 序列在相同时刻的相关性 )

    文章目录 一.相关系数概念 二.相关系数概念解析 1.信号能量常数 2.共轭序列 3.序列在相同时刻的相关性 一.相关系数概念 " 相关系数 " 英文名称是 " Corr ...

  6. Webpack核心概念解析

    原文链接:banggan.github.io/2019/05/09/- Webpack核心概念解析 终于忙完了论文,可以愉快的开始学习了,重拾起重学前端.webpack以及Vue的源码解读作为入职前的 ...

  7. 【Alljoyn】Alljoyn学习笔记五 AllJoyn开源技术基础概念解析

    AllJoyn开源技术基础概念解析 摘要: 总线(Bus) 实现P2P通信的基础 AllJoyn 的底层协议类似于D-Bus,相当于是跨设备分布式的 D-Bus 总线附件(Bus Attachment ...

  8. python程序实例讲解_python入门编程实例 python入门编程实例解析

    python入门编程实例 python入门编程实例解析 python入门编程实例及解析: 题目:有1.2.3.4四个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 程序分析:可填在百位.十 ...

  9. Java中堆、栈、常量池等概念解析

    Java中堆.栈.常量池等概念解析 程序运行时,我们最好对数据保存到什么地方做到心中有数.特别要注意的是内存的分配.有六个地方都可以保存数据: (1) 寄存器.这是最快的保存区域,因为它位于和其他所有 ...

最新文章

  1. java对象是 什么的集合_java持有对象-集合类
  2. html的悬浮框 贼简单 记录一下
  3. boost::histogram::make_weighted_histogram用法的测试程序
  4. 【语义分割】全卷积网络(Fully Convolutional Networks, FCN)详解
  5. 腾讯:人们回归工作导致四季度游戏收入减缓
  6. Find命令使用实例
  7. pulseaudio-点点滴滴
  8. U盘启动盘制作工具哪个好用_U盘PE系统哪个纯净干净无捆绑?
  9. Android Nginx Retrofit+Okhttp.HTTP 504 Unsatisfiable Request (only-if-cached)
  10. 阿里云硬盘挂载与扩容
  11. 鼠标划过显示鼠标移出隐藏效果
  12. ansys一段时间后进入model报错:ansysWBU.exe encountered a problem.
  13. IntelliJ IDEA 设置编码为utf-8编码(各种中文乱码问题解决)
  14. 摩尔定律,梅特卡夫定律和科斯定律
  15. Windows系统及硬件信息读取
  16. 【Simulink教程案例7】基于Simulink的滑模控制器设计与实现
  17. Hadoop YARN中 VCores used 与 VCores Avail 数量不相符, YARN WebUI中显示的VCores数不对
  18. 2012年七月GBin1月刊
  19. 图像处理:模糊图像判断
  20. php 服务器 css 失效,如何解决css文件失效的方法

热门文章

  1. STM32F429 21. LTDC 液晶屏幕
  2. 【Machine Learning 学习笔记】Stochastic Dual Coordinate Ascent for SVM 代码实现
  3. Windows系统盘空间大清理
  4. 计算机与plc通信参数,PLC与PC计算机通信
  5. Java SE 008 理解面向对象程序设计 (Inside Object Oriented Programming)
  6. fofa第一个查找漏洞
  7. Oracle- imp/impdp导入dmp文件
  8. IE浏览器中img标签不显示图片
  9. 2023美国大学生数学建模竞赛(美赛)思路代码
  10. pycharm找不到conda可执行文件