超速救援队

如果您在OpenShift方面很特别,那么这篇文章不太可能给您带来太多启示。 但是,如果您刚刚开始掌握它,那么它将为您节省很多时间和神经。 我们请西班牙Red Hat办公室的云顾问Jorge TudelaGonzálezde Riancho为oc实用程序编写了一些生活技巧。



这是一个很酷的团队,经过深思熟虑,强大,灵活,并且如您所见,它具有许多值得尝试的隐藏功能。

1.首先,调试


当我不知道发生了什么或收到无法理解的错误消息时,我总是使用--loglevell标志,该标志允许登录到stderr。 根据此标志的值,您可以查看curl API Rest调用,API Rest响应的内容,甚至更详细的信息。



$ oc --loglevel 7 get pod
...
I0216 21:24:12.027793 973 cached_discovery.go:72] returning cached discovery info from /home/jtudelag/.kube/192.168.42.77_8443/v1/serverresources.json
I0216 21:24:12.028046 973 round_trippers.go:383] GET https://192.168.42.77:8443/api/v1/namespaces/myproject/pods
I0216 21:24:12.028052 973 round_trippers.go:390] Request Headers:
I0216 21:24:12.028057 973 round_trippers.go:393] Accept: application/json
I0216 21:24:12.028061 973 round_trippers.go:393] User-Agent: oc/v1.7.6+a08f5eeb62 (linux/amd64) kubernetes/c84beff
I0216 21:24:12.053230 973 round_trippers.go:408] Response Status: 200 OK in 25 milliseconds
I0216 21:24:12.055143 973 cached_discovery.go:119] returning cached discovery info from /home/jtudelag/.kube/192.168.42.77_8443/servergroups.json
I0216 21:24:12.055228 973 cached_discovery.go:72] returning cached discovery info from /home/jtudelag/.kube/192.168.42.77_8443/authentication.k8s.io/v1/serverresources.json
I0216 21:24:12.055288 973 cached_discovery.go:72]
...

例如,对OCP对象进行修补时,日志级别9非常方便,因为它使您可以查看修补程序本身(API请求的内容)。

例如,如果某个补丁将服务标签更改为“ app:hello-jorge”,则它将如下所示:

$ oc --loglevel 9 edit svc hello-openshift
...
I0216 21:33:15.786463 1389 request.go:994] Request Body: {"metadata":{"labels":{"app":"hello-jorge"}}}
I0216 21:33:15.786590 1389 round_trippers.go:386] curl -k -v -XPATCH -H "Accept: application/json" -H "Content-Type: application/strategic-merge-patch+json" -H "User-Agent: oc/v1.7.6+a08f5eeb62 (linux/amd64) kubernetes/c84beff" https://192.168.42.77:8443/api/v1/namespaces/myproject/services/hello-openshift
I0216 21:33:15.797185 1389 round_trippers.go:405] PATCH https://192.168.42.77:8443/api/v1/namespaces/myproject/services/hello-openshift 200 OK in 10 milliseconds
...

注意事项 在绝望时,您可以一次开车几个而不是九个。 oc命令的输出不会因此改变,但是您可能会感觉更好。

$ oc --loglevel 9999 get pod

2. su-


是的,您理解正确。 oc命令可以代表另一个用户运行,或者使用OCP语言,使用模拟 。 当然具有适当的权利。 为此,仅使用--as标志就足够了

例如:

# jorge
$ oc --as=jorge get pods

模拟不仅适用于用户,而且适用于组:

# developers
$ oc --as-group=developers get pods

模拟在各种情况下都很有用。 例如,当您需要检查用户是否可以执行一个或另一个操作,或查看oc命令向他发出什么命令时。 冒充他人还可以使角色和权限混乱。

3. Whoami


oc whoami团队可能对每个人都很熟悉。 特别是-t标志,它允许您获取当前用户/会话的媒体令牌。 但是,如果您有令牌但您不是它的所有者,该怎么办?

在这种情况下,您可以使用此令牌登录OpenShift,然后运行oc whoami命令 。 虽然,等等,您可以通过简单地将令牌作为第三个参数传递给oc whoami命令而没有任何标志的方式立即找到所有者的名称。

请参阅:
#
$ token=$(oc whoami -t)

#
$ oc whoami $token
jorge

4. OC调试


如您所知,shell可以直接在运行的pod中运行。 有时,完整复制正在运行的Pod的配置并通过Shell进行故障排除很有用。 这就是所谓的默认方法。

现在看一下oc调试选项可以做什么:您可以以root或任何其他用户身份运行容器; 您可以在所选节点上运行它,也可以在其中运行另一个命令,而不是Shell。

在这种情况下,您必须指定正确的直流,例如:
# shell pod' dc/jorge
$ oc debug dc/jorge

# , root
$ oc debug --as-root=true dc/jorge

5. oc解释


OpenShift / Kubernetes对象有时具有大量字段。 在查找此类对象的定义示例时,通常必须转向OCP或其他主要来源的文档。 但是,您也可以使用oc describe命令。

此命令显示有关资源及其字段的文档,这在声明新的OCP对象或在您无权访问官方OCP文档的情况下非常有用。

例如,以下是获取吊舱文档的方法以及对相似性字段的描述:

 #在pod上获得帮助
 $ OC解释荚
说明:
 Pod是可以在主机上运行的容器的集合。 此资源由客户端创建并安排在主机上。

领域:
  元数据<Object>
    标准对象的元数据。 更多信息:
     http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata

  规格<Object>
    吊舱所需行为的规范。 更多信息:
     http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#spec-and-status

  状态<对象>
    最近观察到的容器状态。 此数据可能不是最新的。
    由系统填充。 只读的。 更多信息:
     http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#spec-and-status

   apiVersion <字符串>
     APIVersion定义了此表示形式的版本化架构
    对象。 服务器应将公认的模式转换为最新的内部模式
    值,并可能拒绝无法识别的值。 更多信息:
     http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#resources

  种类<string>
     Kind是一个字符串值,表示此对象的REST资源
    代表。 服务器可以从客户端提交的端点推断出这一点
    要求。 无法更新。 在CamelCase中。 更多信息:
     http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds

 #获取关联字段说明
 $ oc解释pod.spec.affinity
资源:关联<Object>

说明:
    如果指定,则窗格的调度约束

   相似性是一组相似性调度规则。

领域:
   nodeAffinity <对象>
    描述吊舱的节点相似性调度规则。

   podAffinity <对象>
    描述广告连播亲和力调度规则(例如,将该广告连播共同定位在
    相同的节点,区域等 和其他豆荚一样)。

   podAntiAffinity <对象>
    描述广告连播的反关联性计划规则(例如,避免放置此广告连播
    在相同的节点,区域等中 和其他豆荚一样)。

6.忘记grep,awk,cut等。


oc命令的另一个很酷的功能是内置的输出格式化功能。 每个人都知道-o json-o yaml选项 ,但是-o标志还有许多其他选项。

最强大的功能可能是go-templatejsonpath

json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=...

假设您想知道特定路由(docker注册表路由)提供的服务:

# , , my-docker-registry.example.com
$ oc get routes -o=go-template='{{range .items}}{{if eq .spec.host "my-docker-registry.example.com"}}{{.metadata.name}}{{end}}{{end}}'
docker-registry

或者,假设您需要了解路由器直流路由器的部署策略:

#
$ oc get dc router -o=go-template='{{ .spec.strategy.type }}'
Rolling

如您所见, oc是一支了不起的团队。 绝对值得一试,因为它是OpenShift上最酷的东西之一。

如果您想了解有关OpenShift有趣功能的更多信息,建议您查看我们的Red Hat Developer博客-在这里您不仅可以找到我们的开发人员关于几乎任何主题的文章,而且还可以找到大量的免费文献 。 您可以刷新我们的帖子, 了解如何在笔记本电脑上部署Minishift并开始生活

Source: https://habr.com/ru/post/zh-CN418437/


All Articles