这里介绍Kubernetes中基本概念——Pod
Pod基本操作
在Kubernetes中,Pod是能够创建、调度、管理的最小部署单元。其通常是一组容器的集合
创建Pod
这里我们可以通过YAML配置文件来进行配置、创建,如下所示。需要注意的是,在Pod的配置文件中定义容器端口纯粹是展示性的,仅便于其他人了解该容器所使用的端口信息
# 示例1: 创建Pod
# API 版本
apiVersion: v1
# 资源类型
kind: Pod
# Pod元数据
metadata:
# Pod 名称
name: my-bootcamp-pod-2
# Pod规格
spec:
# 容器信息
containers:
# 一个名为my-bootcamp-2的容器
- name: my-bootcamp-2
# 镜像信息
image: jocatalin/kubernetes-bootcamp:v1
# 仅用于展示容器所使用的端口
ports:
- containerPort: 8080
protocol: TCP
然后通过kubectl create -f 命令实现创建该Pod即可
查看Pod
kubectl提供了非常丰富的命令、选项用于查看Pod资源,具体如下所示
# 查看全部Pod资源的描述
kubectl describe pod
# 查看指定名称的Pod资源的描述
kubectl describe pod <Pod名称>
# 查看全部Pod资源的信息
kubectl get pod
# 查看全部Pod资源的更多信息
kubectl get pod -o wide
# 以Yaml格式查看全部Pod的信息
kubectl get pod -o yaml
# 以Json格式查看全部Pod的信息
kubectl get pod -o json
# 查看指定名称的Pod资源的信息
kubectl get pod <Pod名称>
# 查看指定名称的Pod资源的信息, 并以Yaml格式展示
kubectl get pod <Pod名称> -o yaml
删除Pod
「1. 按名删除」
# 删除指定名称的Pod
kubectl delete pod <Pod名称>
效果如下所示
「2. 利用标签选择器删除Pod」
# 删除指定标签条件的Pod
kubectl delete pod -l <标签选择条件>
# 删除包含名为author的标签的Pod
kubectl delete pod -l author
效果如下所示
「3. 删除命名空间下的所有Pod」
通过–all选项实现删除命名空间下的所有Pod实例。如若未指定命名空间的名称,则删除的是默认命名空间下的所有Pod。
# 删除命名空间下的所有Pod
kubectl delete pod --all -n <命名空间的名称>
效果如下所示
调试Pod
查看Pod日志
可以通过kubectl logs查看Pod中容器的日志。如果一个Pod中包含多个容器时,必须使用-c选项指定相应的容器名称
# 查看Pod日志
kubectl logs <Pod名称>
# 查看Pod中指定容器的日志
kubectl logs <Pod名称> -c <容器名称>
效果如下所示
端口转发
端口转发是一种测试、调试指定Pod的有效方法。具体地,通过kubectl port-forward命令实现将本地网络端口转发到指定Pod的端口
kubectl port-forward <Pod名称> <本地端口>:<Pod的端口>
这样即可非常方便在宿主机发送请求HTTP请求到Pod当中。对于名为my-bootcamp-pod-2的Pod而言,其在8080端口上提供了一个HTTP服务。故我们先在左侧终端通过kubectl port-forward命令,将宿主机的12345端口映射、转发到该Pod的8080端口。然后在右侧终端利用curl命令直接访问localhost的12345端口,即可实现将请求转发至该Pod的8080端口。效果如下所示
端口转发的示意图如下所示。此时相信大家就不难理解了
在容器中执行命令
调试时,有时候我们需要进入Pod的容器中执行命令。我们可以直接通过kubectl exec对已存在Pod的容器远程执行命令
# 在指定Pod内中执行命令, -- 用于分隔kubectl exec命令、Pod容器内执行的命令
kubectl exec <Pod的名称> -- <Pod容器内执行的命令>
效果如下所示
如果需要执行的命令较多,我们还可以直接进入该Pod的容器来执行命令
# 进入Pod的容器
kubectl exec -it <Pod的名称> -- bash
效果如下所示
需要注意的是,当Pod中存在多个容器时,上述两个命令需要使用-c(或–container)选项来指定期望操作的容器
# 在指定Pod的指定容器中执行命令
# 形式1
kubectl exec <Pod的名称> --container <容器的名称> -- <Pod的容器内执行的命令>
# 形式2
kubectl exec <Pod的名称> -c <容器的名称> -- <Pod的容器内执行的命令>
# 进入指定Pod的指定容器
# 形式1
kubectl exec -it <Pod的名称> --container <容器的名称> -- /bin/sh
# 形式2
kubectl exec -it <Pod的名称> -c <容器的名称> -- /bin/sh
其中,该Pod中各容器的名称,可通过如下方式查看
# 查看指定Pod中各容器的名称
kubectl get pod <Pod的名称> -o jsonpath='{.spec.containers[*].name}'
参考文献
-
Kubernetes in Action中文版 Marko Luksa著 -
深入剖析Kubernetes 张磊著
原文始发于微信公众号(青灯抽丝):Kubernetes基本概念之Pod
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/42093.html