Kubernetes 理解kubectl/调试

了解kubectl /kubectl命令和kubeconfig


kubectl允许我们以命令行的方式来和kuberneted做交互,这个命令行可以给它一些参数和输入文件,这些文件是一个个准备好的kubernetes对象,这些文件它读取之后,本质上相当于是一个转换器,他会将对象转换为rest调用。(kubernetes apiserver是一个server),kubelctl就是接受这些指令,并且将指令转化为rest调用传给apiserver。

-v 9 代表这条命令的log级别为9。可以看到去默认加载了kubecobnfig

[root@master ~]# kubectl get pod -v 9
I0623 17:09:34.998578   73360 loader.go:375] Config loaded from file:  /root/.kube/config
I0623 17:09:35.013322   73360 round_trippers.go:423] curl -k -v -XGET  -H "Accept: application/json, */*" -H "User-Agent: kubectl/v1.19.0 (linux/amd64) kubernetes/e199641" 'https://192.168.111.6:6443/api?timeout=32s'
I0623 17:09:35.041788   73360 round_trippers.go:443] GET https://192.168.111.6:6443/api?timeout=32s 200 OK in 28 milliseconds
I0623 17:09:35.041813   73360 round_trippers.go:449] Response Headers:

这个kubeconfig本身就是一个配置文件,你可以配置很多的cluster,每个cluster有自己的名字,最重要的有server。

- cluster:
    certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM1ekNDQWMrZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJeU1EUXhPREE1TURBeE9Gb1hEVE15TURReE5UQTVNREF4T0Zvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBS2dQClBZWXh3cWgrbklpTWJUeElkM1Y3NjBQS3VOQ3FzNDRHWGdUSEtWMWJBM3NpNzIrQXVlSFIyQ0piNWVvY2g0OHkKSFZkUkJRRmJNZnZPWTV3SC8yZFZnSFI0KzR6OWsxQk1STUh2dXZZUWxtWGFUNFl2SlIxNFRiOU5ESGdqdFcvZwpiYVJmcEV4UDl1WDR4NDU3MmJRTWhySWhOeldnUDdYdU1JbGtrQzhWNDFsVVNPSnU1Z2NiaE1xaERMSElpL1lJCmo1N1RmaDdUNkNxWjBmS3NQd2ZHeXM4MWFadWxoQ2RsVmE1Q3VTcFh1UHFDVjlxa2FZQm0xOGdQclFjcHFFNXkKd0lzUDlGUHhyWis5UzV1VWFCZEQ4L0VzZFlveTExbmdROG1kZm1CS2hPbkh4ekg5c1VOSVo3QldML0VETFEvbwo3U2QxV0xoUi9QZ3I3UzBOUEVNQ0F3RUFBYU5DTUVBd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRUZPL3FyYTJYbk00QmVqR3IraTFXN21nRjBON2ZNQTBHQ1NxR1NJYjMKRFFFQkN3VUFBNElCQVFBdktnOENGcSsxV25IVUszWVkyRHRuUm5CS0xJYnM3eVkrb0diN0czd1A0djBiYTl4WQp3ZEczZmp1czJwUFgwckhxNG5HZFVxejl0Tk85S05Xd3huNmpvK1lRZHJJMEMwTXZNdGdsaHpoc3BCWkdMaE5sCjdWekpDcVpxZUV4c3JJbGlSRHQ5M3M4dzExd1d2RDU2ZmpoeFI0enNMNWdQd29LZERMVmNWOGJheGdzd3Q5MlQKVXFEc2Z5UWtrK2c2RzlPTi9ZZmI1OUxoTi9NcW5xaUg3UElSNDNDb21UYjAya0tzWXVvanZsNXJBVVprSjFQSwo3WTRLMWtKMVVDNmhIanZaUWtxT3RJSlM3dTEwZ1Q1NlRLMU42VHlCU2RVTkNRMm5NbE92YUx1RXYzWmtHakQ3CnBwVXh1VkNOdXAxTDNaNnFSUEZDK1VndXVmSmpxQmRJR2Q5VgotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
    server: https://192.168.111.6:6443
  name: kubernetes

context是配置的上下文,它指定了去连接k8s当中的哪个集群,因为可以配置多个cluster。其次使用哪个用户去访问它,用户信息就在下面user部分,其次是context的名字叫啥,当前叫做kubernetes-admin@kubernetes。

contexts:
- context:
    cluster: kubernetes
    user: kubernetes-admin
  name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}

用户信息

users:
- name: kubernetes-admin
  user:
    client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURFekNDQWZ1Z0F3SUJBZ0lJRkVDa2hGazExU0F3RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB5TWpBME1UZ3dPVEF3TVRoYUZ3MHlNekEwTVRnd09UQXdNakphTURReApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1Sa3dGd1lEVlFRREV4QnJkV0psY201bGRHVnpMV0ZrCmJXbHVNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQXQyWVU5RGlNQWNYZWh6QjYKL3ZSMTVDenpaVzRQdmxUMGFZcTJuaVgzZmRYRkhwRlhLamVWVUZ1RGNnY3A5QzlmeFBqa2UwYVpjdEN4bGNycQp2a2xRbWZpNnRpMW5CVEk0SE4rQVdJNzdEMlo2ZEM5bTJ1bmxQRk5vU3RQQ1ZOTEdpU3BHayszS3pXbEU5ZFgzCkFzZGF0SnFJcHRSVG1mTFFHNG1ncXZHZzU1d3RaUFZ4VTU3YVFMbmsrK1NBRy9UZ1ZhUFZQNk9aeUZRakp4QmgKcjM1c1RyNUJEdTB6TWRUUFZzV2JvK09wQm4vUXdwdDV3aVo0azU1czR3Y1hqUXlLcDFvYVMxUnhPbEdZR2M1RwpJclFVOFNOTGUxZnZ5ZWRMWUhSOGVXMTlNM2hCUDRkWTBXbU12cXhvM3ZNWnp5QmYxTXhNM2RzMTdVN3RpbGcxCmZpU25ld0lEQVFBQm8wZ3dSakFPQmdOVkhROEJBZjhFQkFNQ0JhQXdFd1lEVlIwbEJBd3dDZ1lJS3dZQkJRVUgKQXdJd0h3WURWUjBqQkJnd0ZvQVU3K3F0clplY3pnRjZNYXY2TFZidWFBWFEzdDh3RFFZSktvWklodmNOQVFFTApCUUFEZ2dFQkFEdXFWeU93S2JqVGUya0FXOG9SU3JlUGFnQkNDOGhZSkZlazNIMDg4eGFadDhFckh5K2NNb3FRCmt6WnBuTlFuVFpDRHJxVEpJTkwyeWdXZTBjZGhZY1RDdG04SVdkbWVqRVVobmwvazR1b2FrTm1CdGY5Nzl6WEkKNEtHUCtPSm5OTWdzVk9KeEFZN1k3QWRCWXQ4aFJVYmdyT2U5TVRGRWFIaDQwMXNBWXc0Q1ZXYWNkRFRCYnFaTgpRWHZqdmtjOW9pakoyY05SdUd4ZndXeTJQVzlkQnI5MEtSSFVvNlR6WkJQKzBZeXg5SU14aktTQjdjdTRLSGRxCnlPOHFYVHZHeDN6VE1uUHkvYTUzbkxnY2JZdHREdCtzSVNocG1UZkdnclhIelEvd1dSM3ZkTWtPcHdqY3dOOGwKaUthRDdYQlZ2dlE5VllEaEI3UEtxamVhMGdRdG9QMD0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=

Kubectl常用命令


Etcd本身除了是一个数据库,它还是一个消息中间件,它会将消息推送给apiserver,apiserver继承了同样的能力,一方面是list watch etcd,同时它也提供了同样的服务。

其他的组件包括kubectl也可以去watch apiserver,apiserver这边有任何的事件变化,其实是可以通知到的。

[root@master ~]# kubectl get pod -w
NAME                           READY   STATUS    RESTARTS   AGE
dns-test                       1/1     Running   3          37d
nginx-74d69c5bbb-6478r         1/1     Running   3          35d
nginx-74d69c5bbb-mhmsc         1/1     Running   3          35d
nginx-web-0                    1/1     Running   4          37d
nginx-web-1                    1/1     Running   0          16h
web-mychart-7d8f9bd8d6-jfdc9   1/1     Running   0          38m

通过watch就实时的知道了这个对象的变化,集群所有的组件都是通过这种机制去运作的。

大家都去watch apiserver,有任何的事件就来通知我。

Kubectl 调试命令/describe


想知道pod发生了什么事情,想知道pod的事件变化,这个事件除了包含了容器本身的详细信息之外,还有它相关的事件event。

event在k8s里面实际上是另外一个对象,这个对象在创建出来的时候是要去关联一个主对象的。

from可以看到事件是谁发的,有调度器发的和节点产生绑定的event,这样相当于我这个event在创建pod的时候有一个关联关系了。

其次是kubelet产生了event,以event形式记录下创建pod的日志信息,是为这个pod创建的一个event对象。

describe的时候,第一它会将主对象拉取下来,其次会去拉主对象相关的event对象,然后做一个整合展示。

所以describe的时候就能够看到这个对象相关的事件。

Events:
  Type    Reason     Age   From            Message
  ----    ------     ----  ----            -------
  Normal  Scheduled  57s                   Successfully assigned default/nginx-web-0 to node2
  Normal  Pulled     92s   kubelet, node2  Container image "nginx:1.11" already present on machine
  Normal  Created    92s   kubelet, node2  Created container nginx-test
  Normal  Started    92s   kubelet, node2  Started container nginx-test

Kubectl 调试命令/exec


exec能不能使用就看你容器镜像然后构建的,容器基础镜像是什么,提供的调试工具是什么,如果是一个scrach,那里面什么都没有,想运行任何命令都是不行的,那么只能在主机上面做调试了。

Kubetcl 调试命令/logs


 如果pod里面有多个容器,那么可以使用-c来指定看哪个容器的日志。

猜你喜欢

转载自blog.csdn.net/qq_34556414/article/details/125455742
今日推荐