-
kubernetes的pod基础
-
pod概念
-
pod(豆荚),是k8s的最小管理单元。是一个或多个容器的组合,这些容器共享存储,网络和命名空间,以及运行规范,pod内的容器统一的进行安排和调度。pod是一组具有共享命名空间,IP地址和端口的容器的集合。
-
pod中必须包含的一个容器pause容器,该容器是容器内其他容器的父容器,主要负责回收僵尸进程,可以让同一个pod内的不同容器共享粗出,网络,pid等。
-
-
pod的特点
-
网络
-
每一个pod都会被指派唯一的一个IP地址,pod中每一个容器共享网络命名空间,包括网络端口。在同一个pod内的容器可以通过localhost互相通信。需要与外部通信时,需要通过端口映射来实现。
-
-
存储
-
pod能被指定共享存储卷的集合,pod中的所有容器都能访问该存储卷,也支持持久化存储。
-
-
-
pod的命令
-
创建pod
-
kubectl run pod名 --image=镜像名 --labels=“app=nginx”
-
例
-
kubectl run nginx --image=nginx:1.7.9 --labels="app=nginx“
-
-
-
如果不指定pod到指定的命名空间,默认会创建到default的空间
-
-
查看pod
-
kubectl get pod
-
不加命名空间,查看的是default空间的pod
-
-A 显示所有命名空间
-
获取到的pod的状态
-
-
常见的pod的状态
-
-
-
-
显示pod的详细信息
-
kubectl get pod pod名 -o wide
-
- 除了显示基本信息外还显示了分配的IP,所在节点等信息
-
kubectl get pod名 -o yaml
-
以yaml格式显示pod的详细信息
-
-
-
查看pod日志
-
kubectl logs pod名称
-
-
kubectl describe pod pod名
-
kubectl get 常用于获取同一资源类型的一个或者多个资源对象,可以使用-o 指定输出格式
-
kubectl describe 侧重于描述指定资源的各方面的详细信息,不仅会返回节点信息,还会返回在其上运行的pod的摘要,事件信息等。
-
-
对pod中容器的操作
-
在特定的容器中执行指定的命令
-
例
-
kubectl exec nginx -c nginx-- date
-
-c 容器名称
-
-- 后跟需要执行的命令
-
-
-
-
登录容器
-
kubectl exec it nginx -c nginx -- bash
-
如过不加-c指定容器则会登录到第一个容器中
-
-
-
在线编辑运行中的资源对象
-
kubectl edit pod nginx
-
以yaml格式显示,修改完毕后退出即可生效
-
-
-
端口映射
-
kubectl port-forward --address 0.0.0.0 pod/nginx 8080:80
-
--address 是主机的IP地址
-
命令会在前台运行,适合临时测试使用,停止该进程后,映射就停止。
-
-
-
在宿主机与容器之间拷贝文件
-
拷贝容器内的文件到宿主机
-
kubectl cp 容器名:文件路径 宿主机存放位置(支持重命名)
-
-
拷贝宿主机上的文件到容器内,命令不变位置改变即可。
-
-
-
删除pod
-
kubectl delete pod pod名
-
-
-
pod探针
-
为了确保运行起来的容器能够处理请求,k8s采用了探针机制来进行健康状态检查
-
pod探针实现健康状态检查的方式
-
Execaction
-
在容器内执行命令,如果返回值为0,认为容器健康
-
-
TCPsocketAction
-
通过tcp连接检查指定容器的端口,如果端口开放,认为容器正常
-
-
HTTPGetAction
-
对指定的uri进行Get请求,如果状态码在200-400之间,认为容器正常。
-
-
-
pod探针检查容器后获得的状态
-
success
-
成功通过检查
-
-
failure
-
容器检查失败
-
-
Unknown
-
未知,不采取任何措施
-
-
-
pod探针的种类
-
livenessProbe
-
存活探针,判断容器是否正常运行,如果失败则杀掉容器(注意不是pod),然后根据重启策略决定是否重启容器。
-
-
readinessProbe
-
就绪探针,判断容器是否进入ready状态,如果没有则从service的endpoints中删除该容器。
-
-
startupProbe
-
启动探针,判断容器内应用是否启动成功,在success状态之前其他探针都处于无效状态。
-
拿开机来说,该探针负责检测能否开机,开机后其他探针才能进行工作。本质上没有依赖关系,是为了避免资源浪费。
-
-
-
-
-
pod的镜像拉取
-
策略
-
always
-
总是网上拉取
-
-
Never
-
从不网上拉取
-
-
IFNotPressent
-
本地没有镜像则网上拉取,如果则用本地的,但如果镜像标签为latest,为了保证镜像的版本是最新的,则总会采用网上拉取的方式。
-
-
-
命令
-
kubectl run nginx --image=nginx:1.7.9 --labels="app=nginx" --image-pul1-policy=Never
-
-
-
pod的重启策略
-
策略
-
Always
-
在容器失效时,总是重启该容器
-
-
OnFailure
-
容器以不为0的状态码终止,则会重启该容器
-
-
Never
-
从不重启
-
-
-
命令
-
kubectl run nginx --image=nginx:1.7.9 --labels="app=nginx" --restart=OnFailure
-
-
-
pod的编排文件
-
为了批量,附加属性更多,采用命令较为麻烦,因此编排文件就可以帮助我们进行实现以上功能
-
pod编排文件也叫资源清单,采用yaml格式编写,因此要注意同级缩进与键值对的书写格式。
-
声明式要求
-
-
pod的资源清单列表
-
文件语法
-
pod文件的一级属性
-
apiVersion
-
必须能用kubectl api-versions能查询到
-
不同的版本对应不同的资源类型需要对应
-
-
kind(种类)
-
资源类型,必须能用kubectl api-resources查询到
-
-
metadata(元数据)
-
主要是资源表示和说明
-
常用的
-
name
-
namespace
-
labels
-
-
-
-
spec(规范,规格)
-
配置中最重要的部分,是对各个资源的详细描述
-
containers 容器列表,定义商城的详细信息
-
nodeName,根据nodeName的值将pod调度到指定的node节点上。
-
nodeselector 根据该参数定义的信息选择将该pod调度到包含这些label的node上。
-
selector 选择器
-
-
hostNetwork 是否使用宿主机网络,默认为false,设置为true表示使用宿主机网络。
-
volumes存储卷,用于定义pod上面挂载的存储信息。
-
restartPolicy重启策略,表示pod在遇到故障时的处理策略。
-
-
-
status(状态信息)
-
一般由k8s自动生成
-
-
-
查看各个资源的可配置项
-
kubectl explain pod
-
kubectl explain deployment
-
kubectl explain service
-
kubectl explain pod.metadata
-
kubectl explain pod.spec.containers
-
语法
-
kubectl explain 资源类型
-
kubectl explain 资源类型.子属性
-
-
-
-
简单的pod编排文件的案例
-
通过编排文件进行启动
-
kubectl apply -f 编排文件
-
会在创建是依据文件更新资源
-
-
kubectl create -f 编排文件
-
创建时资源已存在则失败
-
-
-
-
暴露端口
-
kubectl expose pod nginx-php --port=8080 --target-port=80 --type=NodePort --name=nginx-php
-
service有关
-
-
查看端口映射
-
kubectl get svc pod名 -o wide
-
-
-
通过kubeadm安装的在/etc/kubenetes/maninfests/下
-
在该目录下放置编排文件会自动生成对应的pod,被称为静态pod。
-
不能通过apiserver进行管理,放在那个node上那个node该pod就会固定生成在那个node上。
-
删除办法
-
删除对应的文件对应的pod就会被删除
-
-
-
pod的启动阶段
-
pending
-
已接受但没进行实际处理
-
-
running
-
容器正常运行
-
-
succeeded
-
不持续运行的pod的运行完毕的退出状态
-
-
failed
-
所有容器都已经终止
-
-
unknown
-
未知状态
-
-
-
pod类的故障排除步骤
-
查看pod事件
-
kubectl describe TYPE NAME PREFIX
-
-
查看pod日志
-
kubectl logs <POD NAME>[-c Container NAME]
-
-
状态为running但是服务不正常
-
kubectl exec -it <POD NAME> bash
-
-
查看集群信息
-
kubectl get nodes -o wide
-
kubectl cluster-info
-
-
查看kubelet日志
-
journalctl -xefu kubelet
-
-
-