《kubernetes in action》 学习笔记——3、Pod 介绍

3、Pod 介绍

  • 通过端口转发连接到pod
    • 也可以手动的添加、修改标签
    • 可通过标签选择器列出想要的资源
    • 指定pod调度到特定的节点中
    • 命名空间

通过端口转发连接到pod

(本文章是学习《kubernetes in action》 一书时做的笔记,由于本人是刚学习k8s,且自学方式就是把它敲一遍,然后加一些自己的理解。所以会发现很多内容是跟书中内容一模一样,如果本文是对对本书的侵权,敬请谅解,告知后会立即删除。如果引用或转载,请注明出处——谢谢)
kubectl port-forward podName 本机端口:pod监听的端口
可在终端中运行localhost:8888 来连接到pod的端口
往往用于调试测试某个特定的pod

##可以给pod添加标签,以便众多的pod进行管理

一般会给使用 app、rel 两个标签
app:指定pod属于哪个应用、组件、或微服务
rel:显示在pod中运行的应用程序版本是stable、beta、canary

通过get命令一般是不会列出标签的,添加–show-labels 可查看标签
kubectl get po --show-labels
如果对某些标签比较感兴趣,也可以通过 -L参数显示指定的标签在列表中
kubectl get po -L labelName1, labelName2
则会在输出的结果的末尾两列列出两个标签的情况

也可以手动的添加、修改标签

添加:kubectl lable po podName labelName=labelValue
修改:kubectl label po podName labelName=labelValue --overwrite

可通过标签选择器列出想要的资源

  • 列出含有特定标签的资源 kubectl get po -l labelName
  • 列出不含有特定标签的资源 kubectl get po -l ‘!labelName’ (使用’’ 确保base
    shell不会对 !进行解释,bash中!表示事件指示器)
  • 列出特定标签与值得资源 kubectl get po -l labelName=labelValue
  • 列出带有特定标签但不等于特定值的资源 labelName!=labelValue
  • 带有特定标签但值为其中之一的 labelName in (labelValue1, labelValue2, …)
  • 带有特定标签但值不是其中任何之一的 labelName notin (labelValue, labelValue2, …)
  • 通过逗号分隔可使用多个条件对标签进行筛选

在kubernetes 中不单单可以对pod使用标签,几乎可以对所有的资源对象使用标签
比如对一个节点添加标签
kubectl label node nodeName labelName=labelValue
根据标签列出对应的node
kubectl get nodes -l labelName=labelValue
在列出mode资源时,同时显示labelName 的情况
kubectl get nodes -L labelName

指定pod调度到特定的节点中

apiVersion: v1
kind: pod
metadata:
  name:pod-test
spec:
  nodeSelector:   #节点选择器,将pod部署到包含标签labelName=labelValue的节点上
    labelName:"labelValue"
  containers:
  - image:kubia
   name: kubia 

命名空间

列出所有的命名空间 kubectl get ns
当我们使用kubectl时,没有指定命名空间时,会使用默认的命名空间 default
也可指定列出某命名空间的资源
kubectl get po --namespace kube-system 列出命名空间为kube-sysytem 的pod对象
通常我们会使用 -n 来代替 --namespace
在不同的命名空间中,我们资源对象名称可以相互重复,但是同一命名空间中不允许
创建一个命名空间
通过yaml文件来创建

apiVersion:v1
kind: Namespace   #表示正在定义一个命名空间
metadata:
    name: test-namespace   #创建命名空间的名字

使用kubectl 命令来创建命名空间
kubectl create namespace test-namespace
需要注意的是命名空间的名字不能包含点号

管理其他命名空间的资源
如果想要操作在指定的命名空间的资源,在使用kubectl时 需要加上-n namespaceName参数
通过yaml文件创建资源时,需要指定命名空间,则在metadata.nameSpace 字段中指定命名空间

命名空间提供的隔离
尽管命名空间将对象分到不同的组,但是命名空间并不提供对正在运行时的对象的任何隔离。
例如不同命名空间的pod之间网络是否隔离,是否能够通信,这与命名空间无关,命名空间之间是否提供网络间隔离取决于kubernetes所使用的网络解决方案有关,当该解决方案不提供命名空间间的网络隔离时,只要知道pod的IP地址,就可以进行网络通信

删除和移除pod
kubectl delete po podName
删除指定的pod,删除pod时,会终止该pod中所有的容器,kubernetes向进程发送一个SIGTERM的信号,并等待一定的时间(默认是30秒),使其正常关闭,如果没有及时关闭,则会通过SIGKILL终止该进程,因此为了你的进程能够正常的关闭,进程需要正确的处理SITERM信号

通过标签选择器来删除pod
kubectl delete po -l labelName=labelValue

通过删除整个命名空间删除pod
kubectl delete ns namespaceName

删除命名空间中所有的pod,但保留命名空间
kubectl delete po --all

删除命名空间中所有的资源
kubectl delete all --all
注意,此时不是所有的资源都会被删除,比如secret会被保留下来,需要明确删除。
并且使用all 时,也会删除所有以kubernetes的Service,但是它们会在几分钟内自动创建

(本文章是学习《kubernetes in action》 一书时做的笔记,由于本人是刚学习k8s,且自学方式就是把它敲一遍,然后加一些自己的理解。所以会发现很多内容是跟书中内容一模一样,如果本文是对本书的侵权,敬请谅解,告知后会删除。如果引用或转载,请注明出处——谢谢)

你可能感兴趣的:(k8s,kubernetes,docker,云服务)