K8s-Pod详解
Pod介绍Pod是Kubernetes中可以或许创建和部署的最小单元,是Kubernetes集群中的一个应用实例,总是部署在同一个节点Node上。(程序运行部署在容器中,容器必须存在pod中。pod可以认为是容器的封装,一个pod中可以存在一个或者多个容器。)
pod的工作方式
在K8s中,所有的资源都可以使用一个yaml文件来创建,创建Pod也可以使用yaml配置文件。或者使用kubectl run在命令行创建Pod(不常用)。
自主式Pod(不推荐):所谓的自主式Pod,就是直接定义一个Pod资源,但是自主式Pod是存在一个问题的,假如我们不小心删除了pod,那么pod就彻底删除了。
控制器管理的Pod(推荐)
常见的管理Pod的控制器:Replicaset、Deployment、Job、CronJob、Daemonset、Statefulset。控制器管理的Pod可以确保Pod始终维持在指定的副本数运行。如,通过Deployment管理Pod
namespace 名称空间的创建
#创建名称空间dev
# kubectl create namespace dev
#查看名称空间
# kubectl get ns
https://i-blog.csdnimg.cn/direct/3793fb9226714998baf330ff25ec8293.png
#在namespace名称空间下创建nginx的pod
# kubectl run nginxpod --image nginx:1.17.1 -n dev
#查看新创建的pod
# kubectl get pod -n de
https://i-blog.csdnimg.cn/direct/4620ccdc9dfb432c81097c8c6b2a6fa7.png
同理删除指定的podhttps://i-blog.csdnimg.cn/direct/cf05fe9c158f49d980084f1c384496aa.png
再次查看pod显示没有,删除名称空间dev
# kubectl delete ns de
https://i-blog.csdnimg.cn/direct/70920305254141819a24077d61265943.png
#查看所有的pod,-A所有的名称空间
# kubectl get pod -A
https://i-blog.csdnimg.cn/direct/00af5388426444a9b57a07a939db714a.png
Pod配置
基本配置
创建pod-base.yaml文件,内容如下:
# vim pod-base.yaml
#下面定义了一个比力简单Pod的配置,里面有两个容器:
nginx:用1.17.1版本的nginx镜像创建,(nginx是一个轻量级web容器)
busybox:用1.30版本的busybox镜像创建,(busybox是一个小巧的linux命令聚集)
https://i-blog.csdnimg.cn/direct/c69e61b9ba714d7a967b3d3954e00309.png
# 创建Pod
# kubectl apply -f pod-base.yaml
pod/pod-base created
# 查看Pod状态,状态为CrashLoopBackOff(表示 Pod 中的容器反复崩溃并重启)
# kubectl get pod -n dev
https://i-blog.csdnimg.cn/direct/745241eb3d14416da9a4e162c3d6dca8.png
解决busybox容器运行问题
原来busybox并不是一个程序,而是雷同于一个工具类的聚集,kubernetes集群启动管理后,它会自动关闭。解决方法就是让其一直在运行,这就用到了command配置。
#使用命令进行查看报错
# kubectl describe pod pod-base -n dev
https://i-blog.csdnimg.cn/direct/3efae35d108f4771a912e1cc6ec3c1ae.png
# vim pod-base.yaml
#插入命令
command: ["/bin/sh","-c","touch /tmp/hello.txt;while true;do /bin/echo
$(date +%T) >> /tmp/hello.txt; sleep 3; done;"]
https://i-blog.csdnimg.cn/direct/62a560227a6c41f28e0b6f2d56a3796c.png
通过 Deployment 管理 Pod,使用控制器的滚动更新机制,直接更新 Pod 的不可变字段时,必须删除旧 Pod 后重新创建。
#删除pod
# kubectl delete -f pod-base.yaml
#创建pod
# kubectl apply -f pod-base.yaml
#查看Pod状态,状态为Running正在运行
# kubectl get pod -n dev
https://i-blog.csdnimg.cn/direct/55981cc7f13d476fada7060a53d31f5f.png
镜像拉取
配置imagePullPolicy参数,imagePullPolicy用于设置镜像拉取策略,kubernetes支持配置三种拉取策略:
Always:总是从远程仓库拉取镜像(一直远程下载)
IfNotPresent:本地有则使用本地镜像,本地没有则从远程仓库拉取镜像(本地有就本地 本地没远程下载)
Never:只使用本地镜像,从不去远程仓库拉取,本地没有就报错 (一直使用本地)
默认值说明:
假如镜像tag为具体版本号, 默认策略是:IfNotPresent
假如镜像tag为:latest(最终版本) ,默认策略是always
https://i-blog.csdnimg.cn/direct/662af3b85f264d53a79e2c469d71a7d1.png
环境变量
env,环境变量,用于在pod中的容器设置环境变量。
#删除Pod
# kubectl delete -f pod-base.yaml
# vim pod-base.yaml
https://i-blog.csdnimg.cn/direct/eb94859df34647d1a999ab1325b4b0e2.png
# 创建Pod
# kubectl create -f pod-env.yaml
# 进入容器,输出环境变量
# kubectl exec pod-env -n dev -c busybox -it /bin/sh
https://i-blog.csdnimg.cn/direct/b89c9eda78dd4d32ace9b54671f87fbb.png
这种方式不是很推荐,推荐将这些配置单独存储在配置文件中,这种方式将在后面介绍。
资源配额
容器中的程序要运行,肯定是要占用一定资源的,比如cpu和内存等,假如不对某个容器的资源做限制,那么它就可能吃掉大量资源,导致别的容器无法运行。针对这种环境,kubernetes提供了对内存和cpu的资源进行配额的机制,这种机制主要通过resources选项实现。
他有两个子选项:
requests:用于设置容器需要的最小资源,假如环境资源不敷用,容器无法启动
limits:用于限制运行容器的占用资源,当容器占用资源凌驾limits时会被停止
# 下载 安装Metrics-Server
# wget https://mirrors.chenby.cn/https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
https://i-blog.csdnimg.cn/direct/dcf07e1d462f4575bf7c008aabb977fe.png
# 修改配置
# vim components.yaml
# 修改此处 添加如下内容
https://i-blog.csdnimg.cn/direct/54f795e7a13b4ef2bfed1e213fb3aa8e.png
# 修改镜像地址
sed -i "s#registry.k8s.io#k8s.chenby.cn#g" components.yaml
cat components.yaml | grep image
#运行pod
# kubectl apply -f components.yaml
# 需要稍等一会才可查看到
# kubectl top node
https://i-blog.csdnimg.cn/direct/f10ebd8825c4499f936db355b105255d.png
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]