1、kubernetes 里,namespace 可以理解成不同的"小房间",资源放在不同房间里,互不干扰。
命名空间管理
查看: kubectl get namespaces

创建:kubectl create namespace xxx

删除:kubectl delete namespaces xxx

2、pod:pod 是最小运行单位,里面可以放一个或多个容器,可以看它、建它、删它、查它详细信息,一个pod代表集群中运行的一个进程,有唯一IP。
pod管理
查看pod的运行情况和在运行地方

创建

创建出现问题时

查看pod运行的详细信息

3、kubectl 常用操作
上传实验镜像到仓库library中

生成所需yml文件

命令使用方法
create :创建控制器

edit:直接改配置

修改内容:

patch:快速改某个字段

expose:把应用暴露成 Service

测试:

logs:看日志

attach:连进正在运行的容器
上传镜像

设置容器

要有一个交互页面才能登录上

exec:在容器里执行命令

cp:拷贝文件

scale:扩容/缩容

label:打标签

rollout:看发布、回滚、重启

查看信息

查看在线状态,回滚、重启

4、deployment 的版本更新和回滚(deployment 就是"自动帮你换版本,还能撤回")
deployment 很像"管版本的总控"。
你改镜像版本,它会自动滚动更新;更新坏了,也能回滚
常用命令:
kubectl set image ... 改镜像版本
kubectl rollout history deployment xxx 看历史版本
kubectl rollout undo deployment xxx --to-revision N 回退
eg:myapp:v1 升级成 myapp:v2
发现有问题后,再回退到旧版本
环境设置:
仓库中的library项目中必须有myapp:v1和myapp:v2两个镜像


建立控制器
生成配置文件修改并启动,查看信息,版本

80端口暴露到集群各节点32073端口,集群内外都可通过节点IP+32073访问pod业务

更新业务版本

回退

5、yaml 是"资源说明书"
很多资源最好用 yaml写清楚,像说明书一样,可复制、可复用、可保存。
常见内容:pod deployment service ReplicaSet
例子:
一个 Pod 里放两个容器:myapp + busybox;给容器加环境变量:比如 MySQL 的密码;指定 Pod 跑到某台节点上:nodeSelector;开主机网络:hostNetwork: true;暴露主机端口:hostPort: 80
6、在pod中运行多容器
一个 Pod 里可以放多个容器,它们共享网络和存储。这很适合"一个主应用 + 一个辅助容器"的场景,可以像住在同一间屋里一样互相访问。

测试:

在pod运行主机中暴漏端口

在pod中指定变量

选择运行节点

添加选择点k8s-node2
错误:未显示标签k8s-node2

原因:80端口被占用
解决方法:改为8080端口解决问题或在ks-node2上把80端口释放

共享宿主机网络

问题 :容器进不去
原因:yaml里面容器的name被改掉了,不是busybox
解决方法 : 将旧的pod删去,确保文件内容正确,重新执行文件
测试:容器可以共享主机网络

资源优先级
BestEffort没有做任何资源限制,资源使用优先级最低

Burstable 设定了资源限制,但是期望值和限制值不同,资源使用优先级次之

Guaranteed期望值和最大使用限制相同,优先级最高

容器重启规则
Always 无论什么原因都会从新运行pod

OnFailure 非正常管关闭会从其pod

删除容器编号

Never pod关闭后不重启

10.pod的生命周期:init、存活、就绪
1)init准备期
先跑初始化容器,等它完成后,主容器才启动。
例子: 等某个文件出现了,主服务再启动。
创建容器

监测:

2)livenessProbe 存活探针 运行期
一句话区分:
liveness:死没死
readiness:能不能对外提供服务
它负责判断容器"活没活着"。
如果应用假死了,K8s 会把它重启。
例子:
nginx 停了,但 Pod 还在,livenessProbe 检查失败后,K8s 自动重启它
没有存活探针时

监测:

测试:

存活探针livness

测试


3)readiness 就绪探针,检测配置文件有内容无错误就显示在列表中,有错误(如配置文件删去),就不会在列表中显示,修改成功后会再 显示。
它负责判断容器"能不能接客"。
如果没准备好,就算 Pod 在跑,也不会被 Service 收进去。
例子:
删掉 index.htmlPod 还在运行
但 readiness 失败后,Service 不再把流量转给它
没有就绪探针情况

测试:

删除默认发布文件,是否还能暴露端点

运行主机IP还在

但访问时内容不存在

有就绪探针情况
清理旧文件,添加探针,并执行文件

监测:


复现问题
删去配置文件

结果:列表中没有显示

添加后

结果:
