Kubernetes 1.19.0——Pod(1)
K8s中最小的调度单位,pod里包含的是容器,也就是说pod是最终对外提供服务的
所有的资源都是以命名空间进行隔离
创建pod的方法
1. 直接使用命令行的方式
kubectl run 名字 -image=镜像 --labels=”aa=bb,aa2=bb2...” --env=”k1=v1” --port=80 --image-pull-policy=策略
建议写的时候,能够把镜像下载策略写进去
Always:不管本地有没有镜像读取下载
IfNotPresent:本地有则优先使用本地,本地没有再去下载
Never:本地即使没有也不去下载
kubectl get pod pod1 -o json 把pod的配置以json文件方式输出(这里不作演示)
模拟创建,并不是真的创建,用于检查语法,类似于nginx里面的nginx -t
2. 通过yaml的方式来创建
a.官方文档来获取
b.命令行的方式来生成
快速生成一个yaml文件
每个缩进都是2空格
通过kubectl delete -f pod1.yaml来删除创建的pod(这里不作演示)
如果没有指定namespace,则是在当前的ns命名空间
也可通过命令行来指定并运行
小结:
创建容器的时候,如果不指定特定的命令,则运行的是镜像CMD所指定的
Pod的基本操作
在pod里执行命令的话,kubectl exec podname -- 要执行的命令
字典变量:Xx1=yy1
Xx2=yy2
Xx3=yy3
Xx4=yy4
这种格式叫做字典,字典中的元素是不能重复的,如果有重复的话则后面的变量会覆盖前面的变量。比如如果再加一个Xx1=zz,那最终Xx1的值就会是zz
列表变量:-xx1=yy1
xx2=yy2
xx3=yy3
xx4=yy4
-xx1=yy1
xx2=yy2
xx3=yy3
xx4=yy4
以”-”为一个元素的形式排列叫列表变量
这是因为这两个容器都映射到了80这个端口上面去,造成了端口的冲突
第一个容器称之为叫主容器,第二个容器叫sidecar
一般情况下,一个pod里包含一个容器
kubectl delete pod pod1正常情况下是直接把pod给你删除了
在k8s里,有一个优雅启停的概念,给我们设置了一个30s的间隔,如果30s内还没有关闭掉容器里的进程,才会给你强制关闭。
注:但是如果这里设置为1000,delete这个nginx的pod还是会马上kill掉,因为nginx本身关闭进程的机制和k8s是不一样的
Pod生命周期lifecycle
为了解决nginx会立即停止的这种机制,可以通过pod hook来实现
postStart:当容器启动起来后就运行一些操作
postStart这个进程和主进程是同时进行的
preStop:在容器关闭之前运行一些操作
此操作未完成之前pod是不会被关闭的
再通过watch -n .5 'kubectl get pods'监测pod的删除过程会发现过50s后会删除掉pod
第一个红框,表示先等待15秒再去写入CMD到aa.txt
第二个postStart表示等待5秒去写入post到aa.txt
第一个红框表示此pod生命周期10s
第二个红框的策略表示pod里的进程执行完了则会通过重启来重新运行
Always:总是重启
OnFailure:非正常退出才重启
Never:从不重启
容器的状态
Pending pod 因为其他的原因导致pod准备开始创建 还没有创建(卡住了)
Running pod已经被调度到节点上,且容器工作正常
Completed pod里所有容器正常退出
error
CrashLoopBackOff 创建的时候就出错,属于内部原因
imagePullBackoff 创建pod的时候,镜像下载失败
初始化容器
初始化容器的概念
比如一个容器A依赖其他容器,可以为A设置多个
依赖容易A1,A2,A3
A1,A2,A3要按照顺序启动,A1没有启动启动起来的
话,A2,A3是不会启动的,直到所有的静态容器全
部启动完毕,主容器A才会启动。
如果初始化容器失败,则会一直重启,pod不会创建
修改内核参数
为了防止容器随意修改内核参数,系统有了一个安全机制
注:=号两端不能有空格
成功运行后,修改成功
- 算法:支持重复元素的二分查找
- .NET 异常处理的动作策略(Action Policy)
- 如何在mac本上安装android sdk
- Fityk-曲线拟合工具
- maven: 打包可运行的jar包(java application)及依赖项处理
- Effective java 第2版 - 笔记(01) 单例(Singleton)的枚举(enum)实现
- 恶心的0.5四舍五入问题
- 乐视金融更名 相关域名引关注
- weblogic.nodemanager.common.ConfigException: Native version is enabled but nodemanager native librar
- hadoop 2.6伪分布安装
- ssh 免密码设置失败原因总结
- C++服务器开发之基于对象的编程风格
- The jQuery UI CSS Framework
- hadoop:将WordCount打包成独立运行的jar包
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 全面解析YOLO V4网络结构
- 刺激!一行代码即可导出所有浏览记录
- 你不知道的 node 爬虫原来这么简单
- 带货直播系统源码中,商品详情页是如何搭建起来的
- 基于飞桨复现CVPR 2020 GhostNet的全程解析
- 【即时通信IM】红包消息如何构建?
- YOLOv4损失函数全面解析
- Pandas进阶修炼120题,给你深度和广度的船新体验
- 5万字、97 张图总结操作系统核心知识点
- C++核心准则CP.100:不要使用无锁编程方式,除非绝对必要
- 神了,Excel的这个操作我今天才知道
- DataFrame(7):DataFrame运算——逻辑运算
- 高性能网关设计实践
- LASSO回归姊妹篇:R语言实现岭回归分析
- 学了这个,三歪再也不想写各种setter了