oc rollout pause deploy webapp //暂停rollout
oc rollout resume deploy webapp //恢
一、OpenShift概念
OpenShift是红帽的云开发平台即服务(PaaS)。自由和开放源码的云计算平台使开发人员能够创建、测试和运行他们的应用程序,并且可以把它们部署到云中。Openshift广泛支持多种编程语言和框架,如Java,Ruby和PHP等。另外它还提供了多种集成开发工具如Eclipse integration,JBoss Developer Studio和 Jenkins等。OpenShift 基于一个开源生态系统为移动应用,数据库服务等,提供支持。
OpenShift Online服务构建在Red Hat Enterprise Linux上。Red Hat Enterprise Linux提供集成应用程序,运行库和一个配置可伸缩的多用户单实例的操作系统,以满足企业级应用的各种需求。
二、容器
我们一般说的“容器”,都是“Linux容器”。
Linux容器是与系统其他部分隔离开的一系列进程。运行这些进程所需的所有文件都由另一个镜像提供,这意味着从开发到测试再到生产的整个过程中,Linux 容器都具有可移植性和一致性。因而,相对于依赖重复传统测试环境的开发渠道,容器的运行速度要快得多。容器比较普遍也易于使用,因此也成了 IT安全方面的重要组成部分
容器的本质,一句话解释,就是一组受到资源限制,彼此间相互隔离的进程。而隔离所用到的技术都是由linux内核本身提供的(所以说目前绝大部分的容器都是必须要跑在linux里面的)。其中namespace用来做访问隔离(每个容器进程都有自己独立的进程空间,看不到其他进程),cgroups用来做资源限制(cpu、内存、存储、网络的使用限制)。
Namespace让每个进程组有独立的PID, IPC和网络空间.Namespace通过 clone系统调用来实现的。
cgroups 是将进程分组管理的内核功能.通过cgroups可以隔离进程, 同时还可以控制进程的资源占用(CPU, 内存等等)情况在操作系统底层限制物理资源,起到 Container 的作用。进程可用的cpu资源由cpuset指定。
总的来说容器就是一种基于操作系统能力的隔离技术,这和基于hypervisor的虚拟化技术(能完整模拟出虚拟硬件和客户机操作系统)不同的。和传统虚拟化相比,容器启动很快,由于共享系统资源,一台主机可以运行上千个容器,并且容器镜像用类似git分发思想,用户更容易创建,分发,更新存储这些镜像。
三、OpenShift和容器的关联
openshift:基于Docker和K8s构建的容器云。
Openshift底层以Docker作为容器引擎驱动,以K8s作为容器编排引擎组件,并提供了开发语言,中间件,DevOps自动化流程工具和web console用户界面等元素,提供了一套完整的基于容器的应用云平台。构建内部应用市场,提供中间件、数据库自动化的流程,可以快速进行应用的构建、容器化和部署贯通从应用开发到测试、上线的流程。开发、测试、运维可以在一个平台上协作提高研发效率。
四、OpenShift架构
节点(Nodes)是RHEL/Atomic实例,应用(Apps)将运行在节点上
应用服务运行在每个节点的docker容器中
一个或多个docker容器可以运行在Pods中作为一个整体单元
Registries负责保存应用的images
Master为用户和客户端提供authenticated API
Master使用etcd提供服务发现
Master通过scheduler决定pod应该部署到哪个nodes上
Services允许相关的pods彼此进行连接和通讯
Pods可以为有状态的服务映射共享存储
Pods映射共享存储后,持久化的数据就保存到了存储中
Routing layer路由外部的应用请求到pods
开发人员和运维人员可以通过web, CLI或者IDE访问OpenShift
五、使用Openshift需了解的概念
Project:
在Openshift中,project对象用于分组和隔离相关的工作空间。我们可以将每一个独立的应用放到一个project中。
Openshift管理员可以以project为单位进行权限授权,资源配额等。
Deployments
Deployment对象提供了对普通应用程序的精细管理。
每一个服务,都会有一个Deployment对象,Deployment对象配置了服务部署,运行的信息。如果运行服务的容器实例出现异常,Deployment对象会自动根据配置信息自行修复。
Pods:
Pods是openshift继承于kubernate的概念。pod是在一台主机上一起部署的一个或多个容器,也是可以定义,部署和管理的最小计算单元。
Pod可以理解为docker容器+容器相关的配置(网络,存储,运行镜像,环境变量等等)。
Pod由Deployment拉起来,其配置内容继承于Deployment对象。
Services
Services也是Openshift继承于kubernate的概念。Services相当于是一个内部的负载均衡对象。它标识一组集群Pods,以便代理它接收到的连接。
部署于Openshift的应用,默认是使用集群化部署的。集群部署的应用,对外会提供一个统一的服务地址,通过这个服务地址,可以由负载功能将服务请求调度到具体的服务实例中。
通常情况下,每个Deployment使用一个Services,部分特殊部署的应用除外。
Routers
Router对象用于将openshift外部的访问请求引入到openshfit平台内部的应用。
Router对象是基于HaProxy实现的。
对于一个系统,可能会由很多部署单元(微服务)构成。这些部署单元,有些需要对Openshift平台的外部请求提供服务,而有些只在openshift平台内部被调用。对于需要对Openshift平台的外部请求提供服务的service,我们需要暴露一个外部访问地址。这个地址就是由router对象创建并提供服务的。
我们可以为一个Service的不同端口创建不同的Router,也可以为一个Service的同一个端口创建不同的Router。
Builds
Builds是OpenShift 中将输入参数转换为结果对象的过程。 大多数情况下,构建用于将源代码转换为可运行的容器镜像。
Buildconfig描述了应该创建新builds时的单个构建定义和一组触发器。 Builds对象由BuildConfig定义。
通俗来说,Builds是openshfit支持Devops而设计的一个对象。这个对象在CI过程中使用,用于定义自动构建容器镜像的动作。
Pipeline
Pipeline就是自动化流水线。流水线就是将实现Devops的相关工具按照顺序串联起来工作的一个工具对象。常见的实现DevOps的工具包括(但不限于):代码管理工具;编译构建工具;代码分析工具;制品管理工具;自动化测试工具;自动部署工具,自动监控工具等。
Pipeline也是openshfit支持Devops而设计的一个对象。
实际上,pipeline对象是与jenkin的流水线对应的。在openshift与jenkin集成之后,我们可以在openshift的pipeline对象中定能够以jenkin的pipeline。
Images
OpenShift 中的容器基于Docker格式的容器镜像。 images是一个包含运行单个容器的所有要求的二进制文件,以及描述其需求和功能的元数据。
如果我们要使用一个已获得的容器镜像部署应用,我们需要先将这个容器镜像包导入到openshift的project中。导入后,就会在openshift的images功能里面看到这个容器镜像。随后我们就可以直接使用这个镜像在openshift中快速部署应用。
六、OpenShift 部署基本操作命令
# 从仓库下载镜像
docker pull# 从docker registry server 中下拉image
#发布镜像到仓库
docker push# 将image 上传到 docker registry server 中
# 查看镜像
docker images: # 列出images
docker rmi: # 删除镜像
#打包镜像为文件
docker save –o xxxx.tar 镜像名
#解压镜像
docker load –i xxx.tar
#标记镜像
docker tag 原名 新名
七、发布微服务命令
①:获得容器镜像包:
在线容器镜像包的获得方式是docker pull# 从docker registry server 中下拉image
②:解压:
docker load -i redis4-base-centos.tar
③:打tag:
docker tag ocp-registry.szlanyou.local:5000/mp221/redis4-base-centos:v2 registry.dev.paas.dfl.com.cn:5000/dangqunxxgl-gh/redis4-base-centos:v2
④:推送到容器镜像仓库:
docker push registry.dev.paas.dfl.com.cn:5000/dangqunxxgl-gh/redis4-base-centos:v2
⑤:上载到openshift平台(请先使用oc login 命令登录openshift平台且已经切换到project中。):
oc login
oc project dangqunxxgl-gh
oc import-image redis4-base-centos –from=registry.dev.paas.dfl.com.cn:5000/dangqunxxgl-gh/redis4-base-centos:v2 –confirm -n dangqunxxgl-gh –insecure
说明:
redis4-base-centos是上载到openshift后openshift显示的镜像名;
dangqunxxgl-gh是上载的project名
七、常用命令
oc get nodes //获取集群所有节点
oc describe node node-name //查看对应节点详细信息,可以看到运行在该节点下的pod
oc get pods -n namespace-name //查看对应namespace下pod
oc get all //查看当前project下的所有资源
oc status //查看登录在哪个project下
oc get pods -o wide -n namespace-name //查看对应namespace下pod详情
oc describe pod pod-name -n namespace-name //查看pod详细信息
oc get limitrange -n namespace-name //获取对应namespace的limitrange配置文件
oc describe limitrange limitrange.config -n namespace-name //查看配置文件详情
oc edit limitrange limitrange.config -n namespace-name //修改limitrange配置
oc project project-name //切换到project
oc adm policy add-scc-to-user anyuid -z default //为该project下default账户开启anyuid,
可以使用root权限,一般是安装/运行某些软件时需要
oc adm policy remove-scc-from-user anyuid -z default //删除default的anyuid权限
oc get pod //查看该project下的pod
oc get service //查看该project下的service
oc get endpoints //查看该project下的Endpoints
oc delete pod pod-name -n namespace-name //重启pod
oc rollout history DeploymentConfig/dc-name //查看dc历史版本
oc rollout history DeploymentConfig/dc-name --revision=5 //回滚到5版本
oc scale dc pod-name --replicas=3 -n namespace //设置副本数为3
oc autoscale dc dc-name --min=2 --max=10 --cpu-percent=80 //设置自动伸缩最小2,最大10
oc get scc //查看scc
oc describe scc anyuid //查看anyuid详细信息,user即包含已经开启anyuid的project
oc describe clusterrole.rbac //查看集群管理员角色及权限
oc describe clusterrolebinding.rbac //查看用户组及绑定的角色
oc adm policy add-cluster-role-to-user cluster-admin username //添加username为cluster-admin
oc get routes --all-namespaces //查看所有namespace的route
oc logs -f pod-name //查看pod log
docker ps -a|grep pod-name //查看pod对应containerID
docker exec -it containerID /bin/sh //登录到container
oc new-project my-project //创建project
oc new-app https://github.com/sclorg/cakephp-ex //创建APP
oc status //查看当前项目状态
oc api-resources //查看server支持的api资源
oc adm must-gather //收集当前集群的状态信息
oc adm top pods //查看pod资源状态
oc adm top node //查看节点资源状态
oc adm top images //查看images使用情况
oc adm cordon node1 //标记node1为SchedulingDisabled
oc adm manage-node <node1> --schedulable = false //标记node1为unschedulable
oc adm manage-node node1 --schedulable //标记node1为schedulable
oc adm drain node1 //将node1进入维护模式
oc delete node //删除node
oc adm node-logs --role master -u NetworkManager.service //获取节点网络日志
oc get csr //查询CSR(certificate signing requests)
oc adm certificate approve csr-name //approve CSR
oc adm certificate deny csr_name //拒掉csr
oc get csr|xargs oc adm certificate approve csr //approve所有csr
echo 'openshift_master_bootstrap_auto_approve=true' >> /etc/ansible/hosts //设置自动approve csr
oc get project projectname //get project
oc describe project projectname //查看project信息
oc get pod pod-name -o yaml //查看pod-name yaml文件
oc get nodes --show-labels //查看节点label
oc label nodes node-name label-key=label-value //给node添加标签,pod也要有对应label(在第二层spec下添加nodeSelector),pod就会运行在指定的node上
oc label nodes node-name key=new-value --overwrite //更新指定key值的label
oc label nodes node-name key- //删除指定key值的label
oadm manage-node node-name --list-pods //查看运行在某node上的所有pod
oadm manage-node node-name --schedulable=false //mark node as unschedulable
oc get svc //查看service
oc patch dc dc-name -p '{"spec":{"template":{"spec":{"containers":[{"name":"dc-name","securityContext":{"runAsUser": 1000160000}}],"securityContext":{"runAsUser": 1000160000,"fsGroup": 1000160000}}}}}' //修改dc-name yaml文件
oc login --token=iz56jscHZp9mSN3kHzjayaEnNo0DMI_nRlaiJyFmN74 --server=https://console.qa.c.sm.net:8443 //使用命令行登录openshift,token是用你自己的账户在登录网址时生成的token
oc rsh -t //查看token
oc rsh pod-name //使用命令行登录pod
oc whoami --show-server //查看当前登录的服务地址
oc whoami //查看当前登录账户
oc get dc -n namespace //查看deployment config
oc get deploy -n namespace //查看deploy
oc edit deploy/deployname -o yaml -n namespace //编辑deploy yaml文件
oc get cronjob //查看cronjob
oc edit cronjob/cronjob-name -n namespace-name //编辑cronjob
oc describe cm/configmap-name -n namespace-name //查看cronjob
oc get configmap -n namespace-name //查询configmap
oc get cm -n namespace-name //查询configmap
cat /etc/origin/master/master-config.yaml|grep cidr //查看集群pod网段规划
oc edit vm appmngr54321-poc-msltoibh -n appmngr54321-poc -o yaml //编辑VM yaml文件
oc serviceaccounts get-token sa-name //获取sa-name的token
oc login url --token=token //使用token登录
oc scale deployment deployment-name --replicas 5 //扩展pod副本数量
oc config view //查看config
TOKEN=$(oc get secret $(oc get serviceaccount default -o jsonpath='{.secrets[0].name}') -o jsonpath='{.data.token}' | base64 --decode ) //get token
APISERVER=$(oc config view --minify -o jsonpath='{.clusters[0].cluster.server}') //get apiserver
curl $APISERVER/api --header "Authorization: Bearer $TOKEN" --insecure //curl API
oc api-versions //get api versions
oc api-resources //get api-resources
oc get hpa --all-namespaces//查询HPA
oc describe hpa/hpaname -n namespace //查看HPA,可以看到Metrics,Events
oc create serviceaccount caller //创建sa
oc adm policy add-cluster-role-to-user cluster-admin -z caller //赋予cluster-admin权限
oc serviceaccounts get-token caller //get sa token
echo $KUBECONFIG //获取kubeconfig文件位置
oc get cm --all-namespaces -l app=deviation //根据labelselector筛选cm
oc describe PodMetrics podname //查询pod CPU/mem usage,openshift4.X适用
oc api-resources -o wide //查看shortnames、apiGroup、verbs
oc delete pod --selector logging-infra=fluentd //按selector删除
oc get pods -n logger -w //watch 某个pod状态
oc whoami //查看当前登录账户
oc explain pv.spec //查看资源对象的定义
oc get MutatingWebhookConfiguration //查看MutatingWebhook
oc get ValidatingWebhookConfiguration //查看ValidatingWebhook
————————————————
版权声明:本文为CSDN博主「竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生。」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_21127151/article/details/127369605
No Comments