• Kubernetes 理解kubectl/调试


    了解kubectl /kubectl命令和kubeconfig


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

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

    1. [root@master ~]# kubectl get pod -v 9
    2. I0623 17:09:34.998578 73360 loader.go:375] Config loaded from file: /root/.kube/config
    3. 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'
    4. 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
    5. I0623 17:09:35.041813 73360 round_trippers.go:449] Response Headers:

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

    1. - cluster:
    2. certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM1ekNDQWMrZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJeU1EUXhPREE1TURBeE9Gb1hEVE15TURReE5UQTVNREF4T0Zvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBS2dQClBZWXh3cWgrbklpTWJUeElkM1Y3NjBQS3VOQ3FzNDRHWGdUSEtWMWJBM3NpNzIrQXVlSFIyQ0piNWVvY2g0OHkKSFZkUkJRRmJNZnZPWTV3SC8yZFZnSFI0KzR6OWsxQk1STUh2dXZZUWxtWGFUNFl2SlIxNFRiOU5ESGdqdFcvZwpiYVJmcEV4UDl1WDR4NDU3MmJRTWhySWhOeldnUDdYdU1JbGtrQzhWNDFsVVNPSnU1Z2NiaE1xaERMSElpL1lJCmo1N1RmaDdUNkNxWjBmS3NQd2ZHeXM4MWFadWxoQ2RsVmE1Q3VTcFh1UHFDVjlxa2FZQm0xOGdQclFjcHFFNXkKd0lzUDlGUHhyWis5UzV1VWFCZEQ4L0VzZFlveTExbmdROG1kZm1CS2hPbkh4ekg5c1VOSVo3QldML0VETFEvbwo3U2QxV0xoUi9QZ3I3UzBOUEVNQ0F3RUFBYU5DTUVBd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRUZPL3FyYTJYbk00QmVqR3IraTFXN21nRjBON2ZNQTBHQ1NxR1NJYjMKRFFFQkN3VUFBNElCQVFBdktnOENGcSsxV25IVUszWVkyRHRuUm5CS0xJYnM3eVkrb0diN0czd1A0djBiYTl4WQp3ZEczZmp1czJwUFgwckhxNG5HZFVxejl0Tk85S05Xd3huNmpvK1lRZHJJMEMwTXZNdGdsaHpoc3BCWkdMaE5sCjdWekpDcVpxZUV4c3JJbGlSRHQ5M3M4dzExd1d2RDU2ZmpoeFI0enNMNWdQd29LZERMVmNWOGJheGdzd3Q5MlQKVXFEc2Z5UWtrK2c2RzlPTi9ZZmI1OUxoTi9NcW5xaUg3UElSNDNDb21UYjAya0tzWXVvanZsNXJBVVprSjFQSwo3WTRLMWtKMVVDNmhIanZaUWtxT3RJSlM3dTEwZ1Q1NlRLMU42VHlCU2RVTkNRMm5NbE92YUx1RXYzWmtHakQ3CnBwVXh1VkNOdXAxTDNaNnFSUEZDK1VndXVmSmpxQmRJR2Q5VgotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
    3. server: https://192.168.111.6:6443
    4. name: kubernetes

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

    1. contexts:
    2. - context:
    3. cluster: kubernetes
    4. user: kubernetes-admin
    5. name: kubernetes-admin@kubernetes
    6. current-context: kubernetes-admin@kubernetes
    7. kind: Config
    8. preferences: {}

    用户信息

    1. users:
    2. - name: kubernetes-admin
    3. user:
    4. client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURFekNDQWZ1Z0F3SUJBZ0lJRkVDa2hGazExU0F3RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB5TWpBME1UZ3dPVEF3TVRoYUZ3MHlNekEwTVRnd09UQXdNakphTURReApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1Sa3dGd1lEVlFRREV4QnJkV0psY201bGRHVnpMV0ZrCmJXbHVNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQXQyWVU5RGlNQWNYZWh6QjYKL3ZSMTVDenpaVzRQdmxUMGFZcTJuaVgzZmRYRkhwRlhLamVWVUZ1RGNnY3A5QzlmeFBqa2UwYVpjdEN4bGNycQp2a2xRbWZpNnRpMW5CVEk0SE4rQVdJNzdEMlo2ZEM5bTJ1bmxQRk5vU3RQQ1ZOTEdpU3BHayszS3pXbEU5ZFgzCkFzZGF0SnFJcHRSVG1mTFFHNG1ncXZHZzU1d3RaUFZ4VTU3YVFMbmsrK1NBRy9UZ1ZhUFZQNk9aeUZRakp4QmgKcjM1c1RyNUJEdTB6TWRUUFZzV2JvK09wQm4vUXdwdDV3aVo0azU1czR3Y1hqUXlLcDFvYVMxUnhPbEdZR2M1RwpJclFVOFNOTGUxZnZ5ZWRMWUhSOGVXMTlNM2hCUDRkWTBXbU12cXhvM3ZNWnp5QmYxTXhNM2RzMTdVN3RpbGcxCmZpU25ld0lEQVFBQm8wZ3dSakFPQmdOVkhROEJBZjhFQkFNQ0JhQXdFd1lEVlIwbEJBd3dDZ1lJS3dZQkJRVUgKQXdJd0h3WURWUjBqQkJnd0ZvQVU3K3F0clplY3pnRjZNYXY2TFZidWFBWFEzdDh3RFFZSktvWklodmNOQVFFTApCUUFEZ2dFQkFEdXFWeU93S2JqVGUya0FXOG9SU3JlUGFnQkNDOGhZSkZlazNIMDg4eGFadDhFckh5K2NNb3FRCmt6WnBuTlFuVFpDRHJxVEpJTkwyeWdXZTBjZGhZY1RDdG04SVdkbWVqRVVobmwvazR1b2FrTm1CdGY5Nzl6WEkKNEtHUCtPSm5OTWdzVk9KeEFZN1k3QWRCWXQ4aFJVYmdyT2U5TVRGRWFIaDQwMXNBWXc0Q1ZXYWNkRFRCYnFaTgpRWHZqdmtjOW9pakoyY05SdUd4ZndXeTJQVzlkQnI5MEtSSFVvNlR6WkJQKzBZeXg5SU14aktTQjdjdTRLSGRxCnlPOHFYVHZHeDN6VE1uUHkvYTUzbkxnY2JZdHREdCtzSVNocG1UZkdnclhIelEvd1dSM3ZkTWtPcHdqY3dOOGwKaUthRDdYQlZ2dlE5VllEaEI3UEtxamVhMGdRdG9QMD0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=

     

     

    Kubectl常用命令


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

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

    1. [root@master ~]# kubectl get pod -w
    2. NAME READY STATUS RESTARTS AGE
    3. dns-test 1/1 Running 3 37d
    4. nginx-74d69c5bbb-6478r 1/1 Running 3 35d
    5. nginx-74d69c5bbb-mhmsc 1/1 Running 3 35d
    6. nginx-web-0 1/1 Running 4 37d
    7. nginx-web-1 1/1 Running 0 16h
    8. 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的时候就能够看到这个对象相关的事件。

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

     

     

    Kubectl 调试命令/exec


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

     

     

    Kubetcl 调试命令/logs


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

  • 相关阅读:
    SQL Server 2017 各版本之间的差异
    cordova 使用
    sklearn-6算法链与管道
    编译llvm-embedded-toolchain-for-Arm-main
    工业智能网关BL110应用之六十八: 实现西门子S7-300 PLC接入Modbus TCP Server云平台
    枚举和注解02:enum关键字实现枚举类
    DevOps 前端开发和 Spug
    并发编程之生产者消费者模型
    Postman和Jmeter的区别
    四、浏览器渲染过程,DOM,CSSDOM,渲染,布局,绘制详细介绍
  • 原文地址:https://blog.csdn.net/qq_34556414/article/details/125455742