pod介绍
- pod运行在节点上
- pod含有ip,可运行多个容器
- 最好的运行方式是每个容器一个进程,pod可以更好的保持所有进程运行、管理它们的日志。
- pod的所有容器都在相同的linux命名空间(共享相同的主机名和网络接口),还可以共享PID命名空间(不使用则ps只能看到容器自己的进程)。
- 可使用Volume来共享文件目录
- 集群里所有pod共享同一个网络地址空间,pod可以通过其他pod的ip实现互相访问。
创建pod
apiVersion: v1
kind: Pod
metadata:
name: kubia-manual
# 标签
labels:
creation_method: manual
env: prod
spec:
containers:
- name: kubia
image: arrowarcher/kubia
ports:
- containerPort: 8080
protocol: TCP
执行
kubectl create -f kubia-manual.yaml
查看pod
kubectl get po --show-labels
kubectl get po -L env,app
以标签列查看
查看创建pod的信息
kubectl get po kubia-manual -o yaml
查看pod容器日志
kubectl logs kubia-manual -c kubia
标签
pod的标签
增加标签
kubectl label po kubia-manual add_l=xxx
修改标签
kubectl label po kubia-manual env=debug --overwrite
过滤pod
kubectl get po -l creation_method
kubectl get po -l '!creation_method'
kubectl get po -l creation_method=manual
kubectl get po -l 'env in (debug,prod)' --show-labels
kubectl get po -l 'creation_method!=manual' --show-labels
使用标签分类工作节点
给节点增加标签
kubectl label node kind-worker3 gpu=true
过滤节点
kubectl get nodes -l gpu=true
pod创建到制定节点
apiVersion: v1
kind: Pod
metadata:
name: kubia-gpu
spec:
nodeSelector: # 部署到包含标签的节点上去
gpu: "true"
containers:
- name: kubia
image: arrowarcher/kubia
ports:
- containerPort: 8080
protocol: TCP
注解
添加修改注解
kubectl annotate pod kubia-manual my.com/someannotation="foo bar"
查看注解
kubectl describe pod kubia-manual
或
kubectl get po kubia-manual -o yaml
命名空间
作用:隔离资源、添加用户访问限制等
查看
查看命名空间
kubectl get ns
查看命名空间下的pod
kubectl get po --namespace(-n) kube-system
创建
apiVersion: v1
kind: Namespace
metadata:
name: custom-namespce
kubectl create -f custom-namespace.yaml
or
kubectl create namespace custom-namespace
在指定空间里创建pod
kubectl create -f kubia-manual.yaml -n custom-namespace
pod的停止和移除
按名称删除
kubectl delete po kubia-gpu
在删除 pod 的过程中,实际上K8s 会终止该 pod 中的所有容器。它会向进程发送SIGTERM信号并等待一定秒数,使其正常关闭,否则会通过SIGKILL终止该进程。
ps :空格分隔来删除多个pod
使用标签选择器删除
kubectl delete po -l creation_method=manual
注意:删除rc创建的pod后,rc还会重新建pod。
删除整个命名空间
kubectl delete ns custom-namespce
删除(几乎)所有资源
kubectl delete all --all