使用etcdctl访问kubernetes数据

    如果是使用 kubeadm 创建的集群,在 Kubenretes 1.11 中,etcd 默认使用 tls ,这时你可以在 master 节点上使用以下命令来访问 etcd :

    1. ETCDCTL_API=3 etcdctl --cacert=/etc/kubernetes/pki/etcd/ca.crt \
    2. --cert=/etc/kubernetes/pki/etcd/peer.crt \
    3. --key=/etc/kubernetes/pki/etcd/peer.key \
    4. get /registry/namespaces/default -w=json | jq .
    • -w指定输出格式

    将得到这样的json的结果:

    1. {
    2. "count": 1,
    3. "header": {
    4. "cluster_id": 12091028579527406772,
    5. "member_id": 16557816780141026208,
    6. "raft_term": 36,
    7. "revision": 29253467
    8. },
    9. "kvs": [
    10. {
    11. "create_revision": 5,
    12. "key": "L3JlZ2lzdHJ5L25hbWVzcGFjZXMvZGVmYXVsdA==",
    13. "mod_revision": 5,
    14. "value": "azhzAAoPCgJ2MRIJTmFtZXNwYWNlEmIKSAoHZGVmYXVsdBIAGgAiACokZTU2YzMzMDgtMWVhOC0xMWU3LThjZDctZjRlOWQ0OWY4ZWQwMgA4AEILCIn4sscFEKOg9xd6ABIMCgprdWJlcm5ldGVzGggKBkFjdGl2ZRoAIgA=",
    15. "version": 1
    16. }
    17. ]
    18. }

    输出结果中可以看到所有的namespace。

    1. {
    2. "count": 8,
    3. "header": {
    4. "cluster_id": 12091028579527406772,
    5. "member_id": 16557816780141026208,
    6. "raft_term": 36,
    7. "revision": 29253722
    8. },
    9. "kvs": [
    10. {
    11. "create_revision": 24310883,
    12. "key": "L3JlZ2lzdHJ5L25hbWVzcGFjZXMvYXV0b21vZGVs",
    13. "mod_revision": 24310883,
    14. "value": "azhzAAoPCgJ2MRIJTmFtZXNwYWNlEmQKSgoJYXV0b21vZGVsEgAaACIAKiQ1MjczOTU1ZC1iMzEyLTExZTctOTcwYy1mNGU5ZDQ5ZjhlZDAyADgAQgsI7fSWzwUQ6Jv1Z3oAEgwKCmt1YmVybmV0ZXMaCAoGQWN0aXZlGgAiAA==",
    15. "version": 1
    16. },
    17. {
    18. "create_revision": 21387676,
    19. "key": "L3JlZ2lzdHJ5L25hbWVzcGFjZXMvYnJhbmQ=",
    20. "mod_revision": 21387676,
    21. },
    22. {
    23. "create_revision": 5,
    24. "key": "L3JlZ2lzdHJ5L25hbWVzcGFjZXMvZGVmYXVsdA==",
    25. "mod_revision": 5,
    26. "value": "azhzAAoPCgJ2MRIJTmFtZXNwYWNlEmIKSAoHZGVmYXVsdBIAGgAiACokZTU2YzMzMDgtMWVhOC0xMWU3LThjZDctZjRlOWQ0OWY4ZWQwMgA4AEILCIn4sscFEKOg9xd6ABIMCgprdWJlcm5ldGVzGggKBkFjdGl2ZRoAIgA=",
    27. "version": 1
    28. },
    29. {
    30. "create_revision": 18504694,
    31. "key": "L3JlZ2lzdHJ5L25hbWVzcGFjZXMvZGV2",
    32. "mod_revision": 24310213,
    33. "value": "azhzAAoPCgJ2MRIJTmFtZXNwYWNlEmwKUgoDZGV2EgAaACIAKiQyOGRlMGVjNS04ZTEzLTExZTctOTcwYy1mNGU5ZDQ5ZjhlZDAyADgAQgwI89CezQUQ0v2fuQNaCwoEbmFtZRIDZGV2egASDAoKa3ViZXJuZXRlcxoICgZBY3RpdmUaACIA",
    34. "version": 4
    35. },
    36. {
    37. "create_revision": 10,
    38. "key": "L3JlZ2lzdHJ5L25hbWVzcGFjZXMva3ViZS1wdWJsaWM=",
    39. "mod_revision": 10,
    40. "value": "azhzAAoPCgJ2MRIJTmFtZXNwYWNlEmcKTQoLa3ViZS1wdWJsaWMSABoAIgAqJGU1ZjhkY2I1LTFlYTgtMTFlNy04Y2Q3LWY0ZTlkNDlmOGVkMDIAOABCDAiJ+LLHBRDdrsDPA3oAEgwKCmt1YmVybmV0ZXMaCAoGQWN0aXZlGgAiAA==",
    41. "version": 1
    42. },
    43. {
    44. "create_revision": 2,
    45. "key": "L3JlZ2lzdHJ5L25hbWVzcGFjZXMva3ViZS1zeXN0ZW0=",
    46. "mod_revision": 2,
    47. "value": "azhzAAoPCgJ2MRIJTmFtZXNwYWNlEmYKTAoLa3ViZS1zeXN0ZW0SABoAIgAqJGU1NmFhMDVkLTFlYTgtMTFlNy04Y2Q3LWY0ZTlkNDlmOGVkMDIAOABCCwiJ+LLHBRDoq9ASegASDAoKa3ViZXJuZXRlcxoICgZBY3RpdmUaACIA",
    48. "version": 1
    49. },
    50. {
    51. "create_revision": 3774247,
    52. "key": "L3JlZ2lzdHJ5L25hbWVzcGFjZXMvc3BhcmstY2x1c3Rlcg==",
    53. "mod_revision": 3774247,
    54. "value": "azhzAAoPCgJ2MRIJTmFtZXNwYWNlEoABCmYKDXNwYXJrLWNsdXN0ZXISABoAIgAqJDMyNjY3ZDVjLTM0YWMtMTFlNy1iZmJkLThhZjFlM2E3YzViZDIAOABCDAiA1cbIBRDU3YuAAVoVCgRuYW1lEg1zcGFyay1jbHVzdGVyegASDAoKa3ViZXJuZXRlcxoICgZBY3RpdmUaACIA",
    55. "version": 1
    56. },
    57. {
    58. "create_revision": 15212191,
    59. "key": "L3JlZ2lzdHJ5L25hbWVzcGFjZXMveWFybi1jbHVzdGVy",
    60. "mod_revision": 15212191,
    61. "value": "azhzAAoPCgJ2MRIJTmFtZXNwYWNlEn0KYwoMeWFybi1jbHVzdGVyEgAaACIAKiQ2YWNhNjk1Yi03N2Y5LTExZTctYmZiZC04YWYxZTNhN2M1YmQyADgAQgsI1qiKzAUQkoqxDloUCgRuYW1lEgx5YXJuLWNsdXN0ZXJ6ABIMCgprdWJlcm5ldGVzGggKBkFjdGl2ZRoAIgA=",
    62. "version": 1
    63. }
    64. ]
    65. }

    key的值是经过base64编码,需要解码后才能看到实际值,如:

    1. $ echo L3JlZ2lzdHJ5L25hbWVzcGFjZXMvYXV0b21vZGVs|base64 -d

    通过输出的结果我们可以看到kubernetes的原数据是按何种结构包括在kuberentes中的,输出结果如下所示:

    1. /registry/ThirdPartyResourceData/istio.io/istioconfigs/default/route-rule-details-default
    2. /registry/ThirdPartyResourceData/istio.io/istioconfigs/default/route-rule-productpage-default
    3. /registry/ThirdPartyResourceData/istio.io/istioconfigs/default/route-rule-ratings-default
    4. ...
    5. /registry/configmaps/default/namerctl-script
    6. /registry/configmaps/default/namerd-config
    7. /registry/configmaps/default/nginx-config
    8. ...
    9. /registry/deployments/default/sdmk-page-sdmk
    10. /registry/deployments/default/sdmk-payment-web
    11. /registry/deployments/default/sdmk-report
    12. ...

    以下是etcd中存储的kubernetes所有的元数据类型:

    1. ThirdPartyResourceData
    2. apiextensions.k8s.io
    3. apiregistration.k8s.io
    4. certificatesigningrequests
    5. clusterrolebindings
    6. clusterroles
    7. configmaps
    8. controllerrevisions
    9. controllers
    10. daemonsets
    11. deployments
    12. events
    13. horizontalpodautoscalers
    14. ingress
    15. limitranges
    16. minions
    17. monitoring.coreos.com
    18. namespaces
    19. persistentvolumeclaims
    20. persistentvolumes
    21. poddisruptionbudgets
    22. pods
    23. ranges
    24. replicasets
    25. resourcequotas
    26. rolebindings
    27. roles
    28. secrets
    29. serviceaccounts
    30. services
    31. statefulsets
    32. storageclasses
    33. thirdpartyresources

    参考