目录

零、原理

创建

删除

一、命令行创建

创建

删除 

二、配置文件创建

创建

删除 


零、原理

创建

  • kubectl向api server发起一个create pod请求
  • apiserver接收到pod创建请求后,不会去直接创建pod,而是生成一个包含创建信息的yaml
  • apiserver将刚才的yaml信息写入etcd数据库。到此为止仅仅是在etcd中添加了一条记录,还没有任何的实质性进展
  • scheduler查看k8sapi,类似于通知机制。首先判断:pod.spec.Node==null?若为null,表示这个Pod请求是新来的,需要创建;因此先进行调度计算,找到最“闲”的node。然后将信息在etcd数据库中更新分配结果:pod.spec.Node=nodeA(设置一个具体的节点)
  • kubelet通过监测etcd数据库(即不停地看etcd中的记录),发现apiserver中有了个新的Node;如果这条记录中的Node与自己的编号相同(即这个Pod由scheduler分配给自己了);则调用node中的dockerapi,创建container。

删除

  • 当用户执行kubectl delete pod命令时(实际上是带grace-period=30s),实际上是访问kube-apiserver的DELETE接口(此时业务逻辑做的只是更新Pod对象的元信息(DeletionTimestamp字段和DeletionGracePeriodSeconds字段),并没有在etcd中删除记录)
  • 此时kubectl命令的执行会阻塞并显示正在删除pod
  • 当kubelet组件监听到Pod对象的更新事件,则开始执行响应的回调方法(因为存在DeletionTimestamp字段,业务逻辑中会执行killPod()方法)
  • 之后kubelet会监听到pod的删除事件,则调用相应的回调方法(访问kube-apiserver的DELETE接口,并且带grace-period=0),此时kube-apiserver的DELETE接口会去etcd中删除pod对象,此时用户kubectl get pod则才真正看不见pod对象,因为记录真的是被删除了

创建Pod分为两种方法:命令行创建和配置文件创建

一、命令行创建

创建

以ngx举例,创建了一个名称叫做 mynginx 的pod:

kubectl run mynginx --image=nginx

k8s 去除docker k8s删除pod流程_云原生

查看default名称空间的Pod:

kubectl get pod

k8s 去除docker k8s删除pod流程_nginx_02

查看具体信息:

kubectl describe pod mynginx

k8s 去除docker k8s删除pod流程_云原生_03

查看Pod的运行日志:

kubectl logs mynginx

k8s 去除docker k8s删除pod流程_kubernetes_04

这时候已经可以去看docker里面的运行容器了,但是因为我们不知道这个ngx的任务会被分配给哪一个node节点,所以去每一个节点下都去看一眼:

docker ps|grep mynginx

k8s 去除docker k8s删除pod流程_服务器_05

k8s都会每个Pod分配一个ip:

kubectl get pod -owide

k8s 去除docker k8s删除pod流程_k8s 去除docker_06

使用Pod的ip+pod里面运行容器的端口(直接用上图中给出的IP):

curl 192.168.194.66

k8s 去除docker k8s删除pod流程_k8s 去除docker_07

使用k8s进入pod:

kubectl exec -it mynginx -- bash

删除 

至此命令行创建pod就结束了。用完删了就行:

kubectl delete pod mynginx

二、配置文件创建

创建

vim pod.yaml

内容如下(一定要注意格式,多空格都不行): 

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: mynginx
  name: mynginx
#  namespace: default
spec:
  containers:
  - image: nginx
    name: mynginx

运行:

kubectl apply -f pod.yaml

k8s 去除docker k8s删除pod流程_服务器_08

kubectl describe pod
kubectl get pod

k8s 去除docker k8s删除pod流程_nginx_09

删除 

使用配置文件删除:

kubectl delete -f pod.yaml

k8s 去除docker k8s删除pod流程_服务器_10