Docker容器k8s那点事儿k8s-openshift-okd

新手的OpenShift oc命令

2019-02-26  本文已影响4人  东风微鸣

有一天,我发现这篇关于bash帖子。如果您是专业用户,您可能已经知道所有这些技巧,但如果您是新手或不是这样的专业用户,那么该帖子很可能是您的一天。

我认为为oc命令创建类似的帖子会很有用。oc命令是dope,每个人都应该知道。它设计精良,一致,灵活,正如您将看到的,有许多值得尝试的隐藏功能。

如果您是OpenShift专业人士,您可能已经知道我将在这里揭示的大部分内容; 否则,如果您刚开始使用OpenShift,或者您不是经验丰富的用户,这将为您节省一些宝贵的时间。

1. 首先要做的事:调试

当我不知道发生了什么或者我收到了不友好的错误消息时,我总是使用该标志--loglevel。它将日志级别信息写入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对象,loglevel 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
...

注意:在绝望的时刻,你总是可以添加任意数量的9,结果将只有一个9,但你可能会感到宽慰。

$ oc --loglevel 9999 get pod

2. su -

是的,你没有看错。您可以替换正在运行oc命令的用户,或者在OCP术语中,您可以"模拟"(impersonate )用户。显然,如果你有足够的权限进行模拟, 那么你只需要使用flag --as

例如:

# run the command as jorge user
$ oc --as=jorge get pods

此外,可以进行组模拟,而不是用户模拟:

# run the command as the developers group
$ oc --as-group=developers get pods

在许多情况下,它非常方便快捷,例如,检查用户是否可以执行特定操作或检查用户在运行oc时将收到的输出。在搞不清角色和权限时,它也很有用。

3. Whoami?

oc whoami 命令众所周知,特别是加上flag -t用于获取当前用户/会话的持有者令牌。但是当你有一个令牌并且你不知道谁是所有者时会发生什么?

您可以做的一件事是使用令牌登录OpenShift,然后执行oc whoami...等待一秒钟。oc whoami会给你这个信息!只需在命令行中传递令牌作为第3个参数,不需要任何标志。

试试看:

# save the token
$ token=$(oc whoami -t)

# get the owner of the token
$ oc whoami $token
jorge

4. oc debug

你可以运行一个pod并获得一个shell。有时获取正在运行的pod配置的副本并使用shell对其进行故障排除很有用。这是默认行为。

介绍下oc debug选项,您可以以root用户, 或任何其他用户ID身份运行容器,强制它在特定节点中运行各种命令。

您必须针对有效的 dc 运行命令,例如:

# get a shell inside a pod for dc/jorge
$ oc debug dc/jorge

# same but as root user
$ oc debug --as-root=true dc/jorge

5. oc explain

OpenShift / k8s对象有时很复杂,有很多字段。很多时候,我最终在OCP文档或其他来源中寻找对象定义示例。在涉及OCP / k8s对象定义时,您可以考虑用 oc explain 作为可信来源。

oc explain为您提供资源及其字段的文档。在声明新的OCP对象时,或者当您无法访问官方OCP文档时,它非常有用。

例如,您可以获取pod文档和pod spec affinity字段描述:

# get pod explanation
$ oc explain pod
DESCRIPTION:
Pod is a collection of containers that can run on a host. This resource is created by clients and scheduled onto hosts.

FIELDS:
  metadata     <Object>
    Standard object's metadata. More info:
    http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata

  spec <Object>
    Specification of the desired behavior of the pod. More info:
    http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#spec-and-status

  status       <Object>
    Most recently observed status of the pod. This data may not be up to date.
    Populated by the system. Read-only. More info:
    http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#spec-and-status

  apiVersion   <string>
    APIVersion defines the versioned schema of this representation of an
    object. Servers should convert recognized schemas to the latest internal
    value, and may reject unrecognized values. More info:
    http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#resources

  kind <string>
    Kind is a string value representing the REST resource this object
    represents. Servers may infer this from the endpoint the client submits
    requests to. Cannot be updated. In CamelCase. More info:
    http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds

# get pod spec affinity field
$ oc explain pod.spec.affinity
RESOURCE: affinity <Object>

DESCRIPTION:
    If specified, the pod's scheduling constraints

   Affinity is a group of affinity scheduling rules.

FIELDS:
  nodeAffinity <Object>
    Describes node affinity scheduling rules for the pod.

  podAffinity  <Object>
    Describes pod affinity scheduling rules (e.g. co-locate this pod in the
    same node, zone, etc. as some other pod(s)).

  podAntiAffinity      <Object>
    Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod
    in the same node, zone, etc. as some other pod(s)).

6. 忘掉grep,awk,cut等

关于oc命令的一个非常酷的事情是它具有格式化输出的内置功能。我们都知道-o json或者-o yaml,但flag -o为您提供了许多其他可能性。

在我发现的所有这些输出选项中, go-templatejsonpath是最强大的输出选项:

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

例如,假设您想要获取特定路由(router)(docker registry router)所公开的服务(service):

# get the service being exposed by a route, only if the hostname matches 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

或者您想了解路由器DC的部署策略:

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

如您所见,oc命令非常棒。我鼓励你继续玩它,因为这是OpenShift最酷的事情之一。

作者

Jorge Tudela Gonzalez de Riancho在红帽西班牙工作,担任云顾问,专门研究OpenShift和容器相关技术。

译文:

原文链接: The oc Command for Newbies

上一篇下一篇

猜你喜欢

热点阅读