K8s-Pod详解

打印 上一主题 下一主题

主题 1880|帖子 1880|积分 5640

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
  [root@k8s-master dev]# kubectl create namespace dev
  #查看名称空间
  [root@k8s-master dev]# kubectl get ns
  

   #在namespace名称空间下创建nginx的pod
  [root@k8s-master dev]# kubectl run nginxpod --image nginx:1.17.1 -n dev
  #查看新创建的pod
  [root@k8s-master dev]# kubectl get pod -n de
  

同理删除指定的pod

   再次查看pod显示没有,删除名称空间dev
  [root@k8s-master dev]# kubectl delete ns de
  


   #查看所有的pod,-A所有的名称空间
  [root@k8s-master ~]# kubectl get pod -A
  
  




Pod配置

基本配置

创建pod-base.yaml文件,内容如下:
   [root@k8s-master01 dev]# vim pod-base.yaml
  #下面定义了一个比力简单Pod的配置,里面有两个容器:
nginx:用1.17.1版本的nginx镜像创建,(nginx是一个轻量级web容器)
busybox:用1.30版本的busybox镜像创建,(busybox是一个小巧的linux命令聚集)
  

   # 创建Pod
[root@master pod]# kubectl apply -f pod-base.yaml
pod/pod-base created
  
  # 查看Pod状态,状态为CrashLoopBackOff(表示 Pod 中的容器反复崩溃并重启)
[root@master pod]# kubectl get pod -n dev
  



解决busybox容器运行问题

原来busybox并不是一个程序,而是雷同于一个工具类的聚集,kubernetes集群启动管理后,它会自动关闭。解决方法就是让其一直在运行,这就用到了command配置。
   #使用命令进行查看报错
[root@k8s-master01 dev]# kubectl describe pod pod-base -n dev
  

   [root@k8s-master01 dev]# 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;"]
  

通过 Deployment 管理 Pod,使用控制器的滚动更新机制,直接更新 Pod 的不可变字段时,必须删除旧 Pod 后重新创建。
   #删除pod
  [root@k8s-master01 dev]# kubectl delete -f pod-base.yaml
#创建pod
[root@k8s-master01 dev]# kubectl apply -f pod-base.yaml
  #查看Pod状态,状态为Running正在运行
[root@master pod]# kubectl get pod -n dev
  


镜像拉取

配置imagePullPolicy参数,imagePullPolicy用于设置镜像拉取策略,kubernetes支持配置三种拉取策略:
        Always:总是从远程仓库拉取镜像(一直远程下载)
        IfNotPresent:本地有则使用本地镜像,本地没有则从远程仓库拉取镜像(本地有就本地 本地没远程下载)
        Never:只使用本地镜像,从不去远程仓库拉取,本地没有就报错 (一直使用本地)
默认值说明:
假如镜像tag为具体版本号, 默认策略是:IfNotPresent
假如镜像tag为:latest(最终版本) ,默认策略是always



环境变量

env,环境变量,用于在pod中的容器设置环境变量。
   #删除Pod
  [root@k8s-master01 dev]# kubectl delete -f pod-base.yaml
[root@k8s-master01 dev]# vim pod-base.yaml
  

   # 创建Pod
[root@master ~]# kubectl create -f pod-env.yaml
# 进入容器,输出环境变量
[root@master ~]# kubectl exec pod-env -n dev -c busybox -it /bin/sh
  

这种方式不是很推荐,推荐将这些配置单独存储在配置文件中,这种方式将在后面介绍。


资源配额

        容器中的程序要运行,肯定是要占用一定资源的,比如cpu和内存等,假如不对某个容器的资源做限制,那么它就可能吃掉大量资源,导致别的容器无法运行。针对这种环境,kubernetes提供了对内存和cpu的资源进行配额的机制,这种机制主要通过resources选项实现。
他有两个子选项:
requests:用于设置容器需要的最小资源,假如环境资源不敷用,容器无法启动
limits:用于限制运行容器的占用资源,当容器占用资源凌驾limits时会被停止
   # 下载 安装Metrics-Server
[root@k8s-master01 dev]# wget https://mirrors.chenby.cn/https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
  

   # 修改配置
  [root@k8s-master01 dev]# vim components.yaml
  # 修改此处 添加如下内容
  

   # 修改镜像地址
sed -i "s#registry.k8s.io#k8s.chenby.cn#g" components.yaml
cat components.yaml | grep image
  #运行pod
[root@k8s-master01 ~]# kubectl apply -f components.yaml
  # 需要稍等一会才可查看到
[root@k8s-master01 ~]# kubectl  top node
  


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

美食家大橙子

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表