k8s的核心资源pod

pod是什么?

pod是Kubernetes中的最小调度单元,k8s是通过定义一个Pod的资源,然后在Pod里面运行容器,容器需要指定一个镜像,这样就可以用来运行具体的服务。一个Pod封装一个容器(也可以封装多个容器),Pod里的容器共享存储、网络等。也就是说,应该把整个pod看作虚拟机,然后每个容器相当于运行在虚拟机的进程,而Pod是需要调度到k8s集群的工作节点来运行的,具体调度到哪个节点,是根据scheduler调度器实现的

 pod中可以同时运行多个容器。同一个Pod中的容器会自动的分配到同一个 node 上。同一个Pod中的容器共享资源、网络环境,它们总是被同时调度,在一个Pod中同时运行多个容器是一种比较高级的用法,只有当你的容器需要紧密配合协作的时候才考虑用这种模式

pod的网络?

Pod是有IP地址的,每个pod都被分配唯一的IP地址(IP地址是靠网络插件calico、flannel、weave等分配的),POD中的容器共享网络名称空间,包括IP地址和网络端口。 Pod内部的容器可以使用localhost相互通信。 Pod中的容器也可以通过网络插件calico与其他节点的Pod通信

Pod的存储?

创建Pod的时候可以指定挂载的存储卷。 POD中的所有容器都可以访问共享卷,允许这些容器共享数据。 Pod只要挂载持久化数据卷,Pod重启之后数据还是会存在的

Pod的工作方式?

K8s中,所有的资源都可以使用一个yaml文件来创建,创建Pod也可以使用yaml配置文件

删除Pod?

直接定义一个Pod资源,那Pod被删除,就彻底被删除了,不会再创建一个新的Pod,这在生产环境还是具有非常大风险的,所以今后我们接触的Pod,都是控制器管理的

Pod资源的创建过程?

 简单的YAML文件的书写格式?

apiVersion: v1  #api版本

kind: Pod       #创建的资源

metadata:   

  name: tomcat-test  #Pod的名字

  namespace: default   #Pod所在的名称空间

  labels:

    app:  tomcat     #Pod具有的标签

spec:

  containers:

  - name:  tomcat-java   #Pod里容器的名字

    ports:

    - containerPort: 8080  #容器暴露的端口

    image: tomcat-8.5-jre8:v1  #容器使用的镜像

  imagePullPolicy: IfNotPresent    #镜像拉取策略

可以通过kubectl explain 查看定义Pod资源包含哪些字段,例如kubectl explain pod,可以看到这些字段在我们上述的例子里都有

也可以具体查看字段如何定义,例如kubectl explain pod.metadata

记住命令就可以查看我们想要查看的字段

什么是命名空间?

k8s支持多个虚拟集群,它们底层依赖于同一个物理集群。 这些虚拟集群被称为命名空间,命名空间namespace是k8s集群级别的资源,可以给不同的用户、租户、环境或项目创建对应的命名空间

k8s集群默认提供了几个名称空间用于特定目的,例如,kube-system主要用于运行系统级资源,存放k8s一些组件的。而default则为那些未指定名称空间的资源操作提供一个默认值

创建namespace:kubectl create namespace 名字

查看namespace:kubectl get namespace

查看指定的namespace的详细信息:kubectl describe namespace 名称空间的名字

查看指定节点的详细信息:kubectl describe nodes hd3.com

删除namespace资源会级联删除其包含的所有其他资源对象

应用场景?

它适用于存在很多跨多个团队或项目的用户的场景。对于只有几到几十个用户的集群,根本不需要创建或考虑命名空间

我们kybectl get pods 查看的是默认的namespace中的default

切换命名空间:kubectl  config set-context --current --namespace=名称空间的名字

也可以进行-n指定查看kubectl get pods -n kube-system

 

什么是标签?

标签其实就是一对 key/value ,被关联到对象上,比如Pod,标签的使用我们倾向于能够表示对象的特殊特点,就是一眼就看出了这个Pod是干什么的,标签可以用来划分特定的对象(比如版本,服务类型等),标签可以在创建一个对象的时候直接定义,也可以在后期随时修改,每一个对象可以拥有多个标签,但是,key值必须是唯一的。创建标签之后也可以方便我们对资源进行分组管理。如果对pod打标签,之后就可以使用标签来查看、删除指定的pod。在k8s中,大部分资源都可以打标签

对已经存在的pod打上标签:kubectl label pods pod名称 release=v1(标签)

对node节点打上标签:kubectl label nodes hd3.com disk=ceph

查看默认namespace下所有pod资源的标签:kubectl get pods --show-labels

查看默认namespace下指定pod具有的所有标签:kubectl get pods pod名称 --show-labels

查看所有namespace下的所有pod的标签:kubectl get pods --all-namespaces --show-labels

列出默认namespace下key标签是release的pod,但不显示标签:kubectl get pods -l release

列出默认namespace下key标签是release的pod,显示标签:kubectl get pods -L release

列出默认namespace下key标签是release,值是v1的pod,但不显示标签:kubectl get pods -l release=v1

列出默认namespace下key标签是release,值是v1的pod,显示标签:kubectl get pods -L release=v1

 

node节点选择器?

创建pod资源的时候,pod会根据schduler进行调度,那么默认会调度到随机的一个工作节点,如果我们想要pod调度到指定节点或者调度到一些具有相同特点的node节点,怎么办呢?

可以使用pod中的nodeName或者nodeSelector字段指定要调度到的node节点

nodeName:指定pod节点运行在哪个具体的node上边

nodeSelector:指定pod调度到具有哪些标签的node节点上边

例如:

 

 常见pod状态?

pod的status定义在PodStatus对象中,其中有一个phase字段。它简单描述了Pod在其生命周期的阶段。熟悉Pod的各种状态对我们理解如何设置Pod的调度策略、重启策略是很有必要的,下面是一些常见的状态:

 

 pod的重启策略?

pod的重启策略(RestartPolicy)应用于Pod内的所有容器,并且仅在Pod所处的Node上由kubelet进行判断和重启操作。当某个容器异常退出或者健康检查失败时,kubelet将根据 RestartPolicy 的设置来进行相应的操作,包括以下三种,默认为Always

Always:当容器失败时,由kubelet自动重启该容器。

OnFailure:当容器终止运行且退出码不为0时,由kubelet自动重启该容器。

Never:不论容器运行状态如何,kubelet都不会重启该容器。

 

我们自行编写一个简单的yaml文件pod-first.yaml,内容如下:

查看podkubectl get pods -o wide

 也可以指定标签进行查看kubectl get pods -o wide -l app=tomcat-pod-first

 可以查看pod日志:kubectl logs pod-first

查看pod里面指定容器的日志:kubectl logs pod-first  -c tomcat-first

进入pod:kubectl exec -it pod-first  -- /bin/bash

进入pod里面的指定容器:kubectl exec -it pod-first  -c  tomcat-first -- /bin/bash

也可以通过kubectl run创建Pod:kubectl run pod-run --image=tomcat:8.5-jre8-alpine  --image-pull-policy='IfNotPresent'  --port=8080

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值