当前位置: 首页 > news >正文

k8s 启动和删除pod

k8s创建pod

pod的启动流程

流程图

运维人员向kube-apiserver发出指令(我想干什么,我期望事情是什么状态)

api响应命令,通过一系列认证授权,把pod数据存储到etcd,创建deployment资源并初始化。(期望状态)

controller通过list-watch机制,监听api server读取etcd,发现新的deployment,将该资源加入到内部工作队列,发现该资源没有关联的pod和replicaset,启用deployment controller创建replicaset资源,再启用replicaset controller创建pod。所有controller被创建完成后.将deployment,replicaset,pod资源更新存储到etcd。

scheduler通过list-watch机制,监听api server读取etcd,发现新的pod,经过主机过滤、主机打分规则,将pod绑定(binding)到合适的主机,并将绑定结果存储到etcd。

kubelet每隔 20s(可以自定义)向apiserver获取自身Node上所要运行的pod清单.通过与自己的内部缓存进行比较,用容器运行时软件(docker或containerd)拉取镜像创建pod。

kube-proxy为新创建的pod注册动态DNS到CoreOS。给pod的service添加iptables/ipvs规则,用于服务发现和负载均衡。

controller通过control loop(控制循环)将当前pod状态与用户所期望的状态做对比,如果当前状态与用户期望状态不同,则controller会将pod修改为用户期望状态,实在不行会将此pod删掉,然后重新创建pod。
 

实践案例:控制器的方式创建nginx的pod

流程图

1.使用kubectl创建nginx的pod

[root@k8s-master ~]# kubectl create deployment k8s-nginx --image=nginx -r 3


 

相当于docker run去启动容器,背后一样要去拉取镜像

  • create deployment,创建部署控制器
  • k8s-nginx,命名部署控制器
  • –image,指定使用的镜像
  • -r 3,建立三个副本,删除后也会自动补充

2.查看部署控制器

[root@k8s-master ~]# kubectl get deployment
NAME        READY   UP-TO-DATE   AVAILABLE   AGE
k8s-nginx   3/3     3            3           14m

 3.查看副本控制器

[root@k8s-master ~]# kubectl get replicaset
NAME                   DESIRED   CURRENT   READY   AGE
k8s-nginx-75f95db655   3         3         3       15m

4.查看pod的详细信息

[root@k8s-master ~]# kubectl get pod -o wide
NAME                         READY   STATUS    RESTARTS   AGE   IP              NODE         NOMINATED NODE   READINESS GATES
k8s-nginx-75f95db655-24mfb   1/1     Running   0          17m   10.244.140.73   k8s-node-2   <none>           <none>
k8s-nginx-75f95db655-fl5cc   1/1     Running   0          17m   10.244.109.81   k8s-node-1   <none>           <none>
k8s-nginx-75f95db655-txf25   1/1     Running   0          17m   10.244.109.80   k8s-node-1   <none>           <none>

 

参数的含义

status

  • Running,正常运行
  • Terminating,正在终止
  • Container Created,正在创建容器

pod的命名规则

k8s-nginx-75f95db655-24mfb
  • 部署控制器名+副本控制器名+pod名

5.进入pod容器

[root@k8s-master ~]# kubectl exec -it k8s-nginx-75f95db655-24mfb -- bash
root@k8s-nginx-75f95db655-24mfb:/#
  • kubectl exec 进入pod容器
  • -it 交互式进入容器
  • – bash指定解释器

6.删除pod容器

[root@k8s-master ~]# kubectl delete pod k9s-nginx-68df494c64-529qk
  • delete,删除指定pod

删除一个pod后,因为副本控制器指定为3,尽管删除一个后,也会自动补充一个pod

7.删除部署控制器

[root@k8s-master ~]# kubectl delete ployment k8s-nginx-75f95db655

删除部署控制器后,就会彻底删除所有的副本控制器以及pod

二、删除pod

在日常的k8s运维过程中,避免不了会对某些pod进行剔除,那么如何才能正确的剔除不需要的pod呢?

首先,需要查出想要删除的pod
# 可通过任意方式进行查询
kubectl get pods -A |grep <podname>
kubectl get pods -n <namespace>
kubectl get pods --all-namespaces |grep <podname> 
kubectl 删除pod命令
kubectl delete pod <podname> -n <namespace>

例如:kubectl delete pod nginx-web-460776586-f6nf0 -n yundoc 
可是这里你会发现,在进行删除delete pod后,并不会直接删除。该pod会自动重新构建(可以理解为重启、重构),原因是k8s误认为我们要删除的pod异常挂了,会启用容灾机制,导致重新再拉起一个新的pod。

我们想要正常且彻底的删除一个pod,必须要先破坏掉他的容灾机制,即删除deployment机制。

查看deployment信息
#可理解是调度管理pod的
kubectl get deployment --all-namespaces
kubectl get deployment -n kube-system
删除deployment配置
kubectl delete deployment <deployment名> -n <namespace>

例如:kubectl delete deployment nginx-web -n yundoc
删除deployment,pod会随之删除。

可通过再次查看pod状态,然后进行删除pod命令即可,通常情况下删除deployment后,再次查询pod发现,pod已经开始自行删除了(这步可酌情处理)。
 

当然,也可以导出yaml文件,进行修改重启策略,重新启动pod , 我在之前的文章中也提到了。

然后再去删除pod 也是可以的。这个场景使用再测试环境或者生产环境都有可能。

http://www.lryc.cn/news/155272.html

相关文章:

  • Jenkins详解(三)
  • 【真题解析】系统集成项目管理工程师 2023 年上半年真题卷(综合知识)
  • 开始MySQL之路——MySQL存储引擎概念
  • ant-design 设置Form.Item中的input框的值的方法
  • CS420 课程笔记 P6 - 游戏逆向中的虚拟内存
  • 公信力不是儿戏:政府与非营利组织如何利用爱校对提升信息质量
  • Linux内核源码分析 (B.1)内核内存布局和堆管理
  • Python---函数
  • Myvatis关联关系映射与表对象之间的关系
  • 算法通关村第十四关:黄金挑战-数据流的中位数
  • 【2023集创赛】国家集创中心杯三等奖:不对称轻失配运算放大器
  • 手写Mybatis:第18章-一级缓存
  • 哈夫曼编码实现文件的压缩和解压
  • 解决六大痛点促进企业更好使用生成式AI,亚马逊云科技顾凡采访分享可用方案
  • Qt 定时器放在线程中执行,支持随时开始和停止定时器。
  • java 过滤器 接口(API)验证入参,验签(sign) Demo
  • 独家!微信正在灰测一款全新消金产品
  • 阿秀C++笔记-学习记录
  • 前端入门到入土?
  • 架构设计基础设施保障IaaS之网络
  • zabbix安装部署
  • 零碎的C++
  • 模糊测试面面观 | 模糊测试是如何发现异常情况的?
  • C#备份数据库文件
  • 行军遇到各种复杂地形怎么处理?
  • Python Number(数字).............................................
  • 设置 Hue Server 与 Hue Web 界面之间的会话超时时间
  • openGauss学习笔记-57 openGauss 高级特性-并行查询
  • 软考(1)-面向对象的概念
  • 深度学习推荐系统(四)WideDeep模型及其在Criteo数据集上的应用