资讯详情

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来指定看哪个容器的日志。

标签: 300kn70sa3载荷传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台