Openshift 上运行nginx

Openshift运行平台

OpenShift playground:
https://developers.redhat.com/courses/explore-openshift/openshift-playground

Openshift运行nginx(1)

// 1. 运行nginx
oc run nginx --image=nginx --labels="app=nginx"
// 2. 获取pod yaml信息(理解里边每一行参数意义)-o 即output
oc get pods nginx -o yaml
// 3. 进入nginx 容器 & ping nginx,即可访问到页面;
oc rsh nginx
curl http://localhost
// 4. 创建service
oc create service clusterip nginx --tcp=8080:80
oc get svc
// 5. 创建route,路由可以通过一个公开可访问的URL访问你的应用程序。
oc expose service nginx
oc get route
// 6. 打开浏览器, 输入网址:http://nginx-default.crc-lgph7-master-0.crc.fc4pxfk1oge7.instruqt.io/, 你将看到 nginx 的页面。

理解

  1. 在openshift上运行nginx与在单机平台docker上其实一样,只是在运行之前,需要master指定当前有几个node,以及image会在哪个node上运行。这是master上的 Scheduler 第一步需要做的。然后利用node的接口crictl去下载image,再run image。
  2. Pod是Kubernetes中可以创建和部署的最小单位。 Pod为一个或多个 container 的组合,K8S为了便于管理 container,将他们封装为 pod。
  3. Service 是内部的负载均衡器。 Service 是一种抽象的方式,将一组 Pod 上运行的应用程序公开为网络服务。使用 Kubernetes,您无需修改应用程序即可使用不熟悉的服务发现机制。Kubernetes 为 Pod 提供了自己的 IP 地址和一组 Pod 的单个 DNS 名称,并且可以在它们之间进行负载平衡。
    Service 与Pod的绑定是通过lable,两者有相同的lable ,就可以通过lable找到对应的pod,具体可以在pod yaml 里体现;
    Service & pod
    4.要想获取openshift-ingress 的log,需要去openshift-ingress-operator项目下开启log模式,再次刷新页面,就会有访问log生成;https://docs.openshift.com/container-platform/4.10/networking/ingress-operator.html#nw-configure-ingress-access-logging_configuring-ingress
  logging:
    access:
      destination:
        type: Container

查看log命令:

oc logs xxx -c logs     //xxx 是pod 名字,后边的logs是container名字
  1. 访问顺序:user --> load balance --> ingress --> service --> pod;

Openshift运行nginx(2)

  1. 切换到Developer下,新建项目nginx;

  2. 点击 Container images;
    在这里插入图片描述

  3. Deployment 在k8s和openshift 平台都有,DeploymentConfig k8s 平台上没有,所以选Deployment ,在k8s 上也可以兼容;
    在这里插入图片描述在这里插入图片描述

  4. 这种方式下,open shift会默认给我们创建service和route;
    点击create;
    会发现与运行异常;
    在这里插入图片描述
    在这里插入图片描述

  5. 看log会发现pod没运行起来,原因是nginx 容器需要用root权限去运行,然而openshift为了安全,默认情况下不会让用户以root去运行,而非root用户没有权限开启nginx的80端口,导致报错;
    在这里插入图片描述
    在这里插入图片描述

  6. 为什么 OpenShift 集群运行 ngxin (1) 成功, 然而 OpenShift 集群运行 ngxin(2) 失败

    根本原因就是上述两种方式运行 nginx pod 的 Security Context Constraints (scc) 不一样,第一种方式的 scc 策略是 openshift.io/scc: anyuid, 而第二种方式的 scc 策略是 openshift.io/scc: restricted 。

    如何解决OpenShift 集群运行 ngxin(2)的错误:

    重新构建一个 non-root 用户可以运行的 nginx 镜像。

    给 service account default 用户添加 anyuid 的 scc。其命令是 oc adm policy add-scc-to-user anyuid -z default

    并且这种有controller方式运行的nginx 在delete pod后可以自动重新启动pod;
    在这里插入图片描述

  7. 运行成功;
    在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值