如果您在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-template和
jsonpath :
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并开始生活 。