Kubernetes 使用手册 for Devs

kubectl

kubectl是Kubernetes 命令行管理工具,我们可以通过kubectl来管理本地/远程 的Kubernetes集群。

请首先安装 kubectl,官网有安装方法 https://kubernetes.io/zh/docs/tasks/tools/

常用操作

  1. 查找pod

    1. kubectl -n ${namespace} get pods ${podName}
  2. 查看 pod 信息

    1. kubectl -n ${namespace} describe pod ${podName}

    例:


    查看pod完整信息

    1. Name: lecare-insurance-58b7bdc4cd-76fvs
    2. Namespace: lejian-insu
    3. Priority: 0
    4. Node: cn-hangzhou.192.168.121.215/192.168.121.215
    5. Start Time: Fri, 11 Jun 2021 14:38:20 +0800
    6. Labels: app=lecare-insurance
    7. pod-template-hash=58b7bdc4cd
    8. Annotations: <none>
    9. Status: Running
    10. IP: 192.168.137.200
    11. IPs:
    12. IP: 192.168.137.200
    13. Controlled By: ReplicaSet/lecare-insurance-58b7bdc4cd
    14. Containers:
    15. lecare-insurance:
    16. Container ID: docker://a4d76e08f026adaefc0eed451de550cf63dea3bcd038ea89ac93227c413d675d
    17. Image: registry.cn-hangzhou.aliyuncs.com/lejian-insu/lecare-insurance:ab22bc48
    18. Image ID: docker-pullable://registry.cn-hangzhou.aliyuncs.com/lejian-insu/lecare-insurance @sha256:b050fcd4fc00f1bc2bd2811c8bd4452ca83e2796d34b92a2ce61973938e3c58d
    19. Port: 8080/TCP
    20. Host Port: 0/TCP
    21. Command:
    22. java
    23. -jar
    24. lecare_insurance.jar
    25. -Djava.security.egd=file:/dev/./urandom
    26. --spring.profiles.active=${RUNNING_ENV}
    27. -Xmx2g
    28. -Xms1g
    29. -Xmn1g
    30. -Xss512k
    31. --server.port=8080
    32. State: Running
    33. Started: Fri, 11 Jun 2021 14:38:41 +0800
    34. Ready: True
    35. Restart Count: 0
    36. Limits:
    37. cpu: 2
    38. memory: 4Gi
    39. Requests:
    40. cpu: 100m
    41. memory: 2Gi
    42. Environment:
    43. MYSQL_USERNAME: <set to the key 'MYSQL_USERNAME' in secret 'mysql-prod'> Optional: false
    44. MYSQL_PASSWORD: <set to the key 'MYSQL_PASSWORD' in secret 'mysql-prod'> Optional: false
    45. REDIS_HOST: <set to the key 'REDIS_HOST' of config map 'lecare-insurance-vars'> Optional: false
    46. REDIS_PORT: <set to the key 'REDIS_PORT' of config map 'lecare-insurance-vars'> Optional: false
    47. REDIS_DATABASE: <set to the key 'REDIS_DATABASE' of config map 'lecare-insurance-vars'> Optional: false
    48. REDIS_PASSWORD: <set to the key 'REDIS_PASSWORD' in secret 'redis-prod'> Optional: false
    49. MYSQL_URL: <set to the key 'MYSQL_URL' of config map 'lecare-insurance-vars'> Optional: false
    50. MYSQL_DATABASE: <set to the key 'MYSQL_DATABASE' of config map 'lecare-insurance-vars'> Optional: false
    51. RUNNING_ENV: <set to the key 'RUNNING_ENV' of config map 'lecare-insurance-vars'> Optional: false
    52. Mounts:
    53. /etc/localtime from datetime (rw)
    54. /opt/javalogs from javalogs (rw)
    55. /var/run/secrets/kubernetes.io/serviceaccount from default-token-2lkn2 (ro)
    56. Conditions:
    57. Type Status
    58. Initialized True
    59. Ready True
    60. ContainersReady True
    61. PodScheduled True
    62. Volumes:
    63. mysql-prod:
    64. Type: Secret (a volume populated by a Secret)
    65. SecretName: mysql-prod
    66. Optional: false
    67. redis-prod:
    68. Type: Secret (a volume populated by a Secret)
    69. SecretName: redis-prod
    70. Optional: false
    71. javalogs:
    72. Type: HostPath (bare host directory volume)
    73. Path: /var/lib/container/log
    74. HostPathType:
    75. datetime:
    76. Type: HostPath (bare host directory volume)
    77. Path: /usr/share/zoneinfo/Asia/Shanghai
    78. HostPathType:
    79. default-token-2lkn2:
    80. Type: Secret (a volume populated by a Secret)
    81. SecretName: default-token-2lkn2
    82. Optional: false
    83. QoS Class: Burstable
    84. Node-Selectors: <none>
    85. Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
    86. node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
    87. Events:
    88. Type Reason Age From Message
    89. ---- ------ ---- ---- -------
    90. Normal Scheduled 54m default-scheduler Successfully assigned lejian-insu/lecare-insurance-58b7bdc4cd-76fvs to cn-hangzhou.192.168.121.215
    91. Normal AllocIPSucceed 54m terway-daemon Alloc IP 192.168.137.200/20 for Pod
    92. Normal Pulling 54m kubelet Pulling image "registry.cn-hangzhou.aliyuncs.com/lejian-insu/lecare-insurance:ab22bc48"
    93. Normal Pulled 53m kubelet Successfully pulled image "registry.cn-hangzhou.aliyuncs.com/lejian-insu/lecare-insurance:ab22bc48"
    94. Normal Created 53m kubelet Created container lecare-insurance
    95. Normal Started 53m kubelet Started container lecare-insurance


    因为pod的信息比较多,如果想筛选,请使用grep

    1. kubectl describe pod lecare-insurance-58b7bdc4cd-76fvs | grep IP:
  1. 查看pod console日志
    1. kubectl -n ${namespace} logs ${podName}
    可以支持 类似 tail 、more 命令的参数,比如:
    1. kubectl -n ${namespace} logs -f --tail=100 ${podName}
    2. // -f 持续输出日志 --tail=n 从当前日志尾部n行开始输出
  1. 使用shell登录pod中容器环境
    1. kubectl exec ${podName} -it ${shell}
    一般基础容器镜像包含 sh 或 bash 等shell程序
    1. kubectl -n ${namespace} exec ${podName} -it sh //使用sh 作为shell
    2. kubectl -n ${namespace} exec ${podName} -it bash //使用 bash 作为shell

kubectl 增效工具

下面这些工具可以非常好的提高使用kubectl的效率。但是遗憾的是只有macOS和linux可以简单安装。

  • kubens / kubectx (macOS/linux)

    https://github.com/ahmetb/kubectx

    kubens 指定全局 namespace,可以省去每次加 -n ${namespace}麻烦之处。

    kubectx 快速切换 .kube/config 下不同的k8s集群环境(.kube/config内可以配置多个集群)。

  • stern (macOS/linux/windows)

    https://github.com/wercker/stern

    快速读取pod内容器的标准输出,方便排查日志找问题。

  • kubectxwin (windows)
    kubens、kubectx 的windows版本
    https://github.com/thomasliddledba/kubectxwin

kt connect / telepresence

他们都是基于 kubectl proxy-forward 来实现容器内外网络互通的工具。

  • kt-connect

    https://github.com/alibaba/kt-connect

  • telepresence

    https://github.com/telepresenceio/telepresence

Jvm remote debug

借助上面提到的 kt-connect 和 telepresence,我们可以非常容易的实现本地和k8s容器网络互通。接下来对于jvm remote debug就非常容易了。

  1. 在我们的jvm启动参数上增加 remote debug 端口

    1. -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=10086
  2. 在k8s中启动应用,并通过上面提到的找到应用对应的pod,定位pod的ip

    1. kubectl describe pod lecare-insurance-58b7bdc4cd-76fvs | grep IP:
  3. 启动kt-connect

    1. sudo ktctl connect

    kt-connect连接

  4. 在我们的IDE中(eclipse 或者 idea )使用 Remote JVM Debug,填入上面获取的IP和JVM参数对应的端口

深圳SEO优化公司龙岗网站推广工具推荐包头seo排名推荐湘潭外贸网站建设公司云浮营销型网站建设推荐宣城SEO按天收费报价温州高端网站设计泉州网站优化按天收费哪家好楚雄百度竞价价格天门seo优化报价娄底网站推广系统推荐西乡百度爱采购公司大同网站搭建公司大芬模板制作多少钱韶关百度竞价包年推广南澳推广网站报价横岗网络营销菏泽外贸网站建设报价淮安网络营销桂林网站建设推荐益阳seo网站推广推荐娄底百度网站优化价格郑州设计公司网站金华网站推广方案推荐福州百姓网标王推广多少钱南联网络广告推广贵港企业网站制作多少钱滁州优秀网站设计那曲SEO按天收费报价辽阳网页设计公司娄底网站推广工具价格歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化

文档更新时间: 2021-06-11 21:31