Kubernetes基本概念之Pod

这里介绍Kubernetes中基本概念——Pod

Kubernetes基本概念之Pod

abstract.png

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即可

Kubernetes基本概念之Pod

figure 1.jpeg

查看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名称>

效果如下所示

Kubernetes基本概念之Pod

figure 2.jpeg

「2. 利用标签选择器删除Pod」

# 删除指定标签条件的Pod
kubectl delete pod -l <标签选择条件>

# 删除包含名为author的标签的Pod
kubectl delete pod -l author

效果如下所示

Kubernetes基本概念之Pod

figure 3.jpeg

「3. 删除命名空间下的所有Pod」

通过–all选项实现删除命名空间下的所有Pod实例。如若未指定命名空间的名称,则删除的是默认命名空间下的所有Pod。

# 删除命名空间下的所有Pod
kubectl delete pod --all -n <命名空间的名称>

效果如下所示

Kubernetes基本概念之Pod

figure 4.jpeg

调试Pod

查看Pod日志

可以通过kubectl logs查看Pod中容器的日志。如果一个Pod中包含多个容器时,必须使用-c选项指定相应的容器名称

# 查看Pod日志
kubectl logs <Pod名称>

# 查看Pod中指定容器的日志
kubectl logs <Pod名称> -c <容器名称>

效果如下所示

Kubernetes基本概念之Pod

figure 5.jpeg

端口转发

端口转发是一种测试、调试指定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端口。效果如下所示

Kubernetes基本概念之Pod

figure 6.jpeg

端口转发的示意图如下所示。此时相信大家就不难理解了

Kubernetes基本概念之Pod

figure 7.jpeg

在容器中执行命令

调试时,有时候我们需要进入Pod的容器中执行命令。我们可以直接通过kubectl exec对已存在Pod的容器远程执行命令

# 在指定Pod内中执行命令, -- 用于分隔kubectl exec命令、Pod容器内执行的命令
kubectl exec <Pod的名称> -- <Pod容器内执行的命令>

效果如下所示

Kubernetes基本概念之Pod

figure 8.jpeg

如果需要执行的命令较多,我们还可以直接进入该Pod的容器来执行命令

# 进入Pod的容器
kubectl exec -it <Pod的名称> -- bash

效果如下所示

Kubernetes基本概念之Pod

figure 9.jpeg

需要注意的是,当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}'

参考文献

  1. Kubernetes in Action中文版 Marko Luksa著
  2. 深入剖析Kubernetes 张磊著

原文始发于微信公众号(青灯抽丝):Kubernetes基本概念之Pod

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/42093.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!