带你玩转kubernetes-k8s(第11篇:k8s-深入掌握Pod-Pod的基本用法)

     上一篇我们讲解了Pod.Yaml的定义,以及各个参数的作用。那么我们这一篇就深入的讲解Pod的基本用法。

 

Pod的基本用法

       在对Pod的用法进行说明之前,有必要先对Docker容器中应用的运行要求进行说明。

       在使用Docker时,可以使用docker run命令创建并命令创建并启动一个容器。而在k8s系统中对长时间运行的容器要求是:其主程序需要一直在前台执行。如果我们创建的Docker镜像的启动命令是后台执行程序,则在kubelet创建包含这个容器的Pod之后运行完该命令,即认为Pod执行结束,将立刻销毁该Pod。如果我们对这个Pod配置了副本数,那么就会陷入死循环(创建Pod->销毁Pod->创建Pod)。这就是k8s需要我们自己创建的Docker镜像并以一个前台命令作为启动命令的原因。

       对于无法改造为前台执行的应用,也可以使用开源工具Supervisor辅助进行前台运行的功能。Supervisor提供了一种可以同时启动多个后台应用,并保持Supervisor自身在前台执行的机制,可以满足k8s对容器的启动要求。关于SuperVisor的安装和使用,请参考官网http://supervisord.org的文档说明。(后面会带着大家进行安装)

      接下来讲解Pod对容器的封装和应用。

      讲解之前,我们需要准备kubeguide/guestbook-php-frontend,kubeguide/redis-master镜像包。可以从docker hub中下载。或者从我的百度云盘下载该镜像包,下载之后使用 docker load -i  xxx.tar 存在镜像中即可。(ps:否则会提示拉取镜像失败导致Pod无法启动哦)

docker load -i xxx.tar
链接:https://pan.baidu.com/s/1eyGKv5mEq927Vh2Ok7KUPw 
提取码:fx7r 

       Pod可以由1个或多个容器组合而成。在一个Guestbook例子中,名为frontend的Pod只由一个容器组成:

apiVersion: v1
kind: Pod
metadata:
  name: frontend
  labels:
    name: frontend
spec:
  containers:
  - name: frontend
    image: kubeguide/guestbook-php-frontend
    env:
    - name: GET_HOSTS_FROM
      value: env
    ports:
    - containerPort: 80

这个frontend Pod在成功启动之后,将启动1个Docker容器。

另一种场景是,当frontend和redis两个容器应用为紧耦合的关系,组合成一个整体对外提供服务时,应该将这两个容器打包很一个Pod。

配置文件frontend-localredis-pod.yaml的内容如下:

apiVersion: v1
kind: Pod
metadata:
  name: redis-php
  labels:
    name: redis-php
spec:
  containers:
  - name: frontend
    image: kubeguide/guestbook-php-frontend:localredis
    ports:
    - containerPort: 80
  - name: redis
    image: kubeguide/redis-master
    ports:
    - containerPort: 6379

如果可以看到READY信息为:2/2,表示Pod中的两个容器都成功运行了。

查看这个Pod的详细信息,可以看到两个容器定义创建的过程(Event事件信息):

 

静态Pod

   静态Pod是由kubelet进行管理存在特定Node上的Pod。不能通过API Server进行管理,无法与RC,Deployment或者DaemonSet进行关联,并且kubelet无法对静态Pod做健康检查。静态Pod总是由kubelet创建的,并且总在kubelet所在的Node上运行。

   创建静态Pod有两种方式:配置文件方式和HTTP方式。

1.配置文件方式
首先,需要设置kubelet的启动参数“--config”,指定kubelet需要监控的配置文件所在的目录,kubelet会定期扫描该目录,并根据该目录下的.yaml或.json文件进行创建操作。

由于我们是使用kubeadm安装的k8s集群,kubeadm帮我们已经配置好了该路径

查看存放静态Pod文件的目录

 cat /var/lib/kubelet/config.yaml |grep staticPodPa

注意:是Node节点上哦。

apiVersion: v1
kind: Pod
metadata:
  name: static-web
  labels:
    name: static-web
spec:
  containers:
  - name:static-web
    image: nginx
    ports:
    - name: web
      containerPort: 80

 

由于静态Pod无法通过API Server直接管理,所以在Master上尝试删除这个Pod时,会使其变成Pending状态,且不会被删除。

删除该Pod的操作只能是到其所在Node上将其定义文件static-web.yaml从对应目录下删除。

2.HTTP方式
通过设置kubelet的启动参数“--manifest-url”,kubelet将会定期从该URL地址下载Pod的定义文件,并以.yaml或.json文件的格式进行解析,然后创建Pod。实现方式和配置文件实现方式一致。所以此处不过多解释。

 

小结:下一篇我们讲解Pod容器共享Volume~谢谢大家的支持

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值