0
点赞
收藏
分享

微信扫一扫

k8s教程(06)-pod定义与基本用法


文章目录

  • ​​01 pod定义​​
  • ​​02 pod基本用法​​
  • ​​03 静态pod​​
  • ​​3.1 配置文件方式​​
  • ​​3.2 HTTP 方式​​

01 pod定义

​pod​​​定义的完整内容如下:
k8s教程(06)-pod定义与基本用法_redisk8s教程(06)-pod定义与基本用法_配置文件_02k8s教程(06)-pod定义与基本用法_redis_03
​​​pod​​​各属性的说明:
k8s教程(06)-pod定义与基本用法_kubernetes_04k8s教程(06)-pod定义与基本用法_docker_05k8s教程(06)-pod定义与基本用法_配置文件_06k8s教程(06)-pod定义与基本用法_redis_07

02 pod基本用法

​Pod​​​ 可以由 1 个或多个容器组合而成,如下名为 ​​frontend​​​ 的 ​​Pod​​​ 只由一个容器组成:
k8s教程(06)-pod定义与基本用法_容器_08
这个 ​​​frontend Pod​​​ 在成功启动之后,将启动 1 个 ​​Docker ​​容器。

另一种场景是,当 ​​frontend ​​​和 ​​redis​​​ 两个容器应用为紧耦合的关系,并组合成一个整体对外提供服务时,应将这两个容器打包为一个​​ Pod​​​,如图 所示:
k8s教程(06)-pod定义与基本用法_docker_09
配置文件 ​​​frontend-localredis-pod.yaml ​​​的内容如下:
k8s教程(06)-pod定义与基本用法_kubernetes_10

属于同一个 ​​Pod​​​ 的多个容器应用之间相互访问时仅需通过​​localhost​​就可以通信,使得这一组容器被“绑定”在一个环境中。

运行 ​​kubectl create​​​ 命令创建该 ​​Pod​​​:
k8s教程(06)-pod定义与基本用法_redis_11
查看已经创建的​​​pod​​​:
k8s教程(06)-pod定义与基本用法_配置文件_12
可以看到​​​READY​​​信息为2/2,表示​​Pod​​​中的两个容器都成功运行了。查看这个 ​​Pod ​​​的详细信息,可以看到两个容器的定义及创建的过程(​​Event​​​事件信息):
k8s教程(06)-pod定义与基本用法_容器_13k8s教程(06)-pod定义与基本用法_kubernetes_14

03 静态pod

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

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

3.1 配置文件方式

首先,需要设置 ​​kubelet​​​ 的启动参数“​​-pod-manifest--path​​​”(或者在 ​​kubelet​​​ 配置文件中设置 ​​staticPodPath​​​,这也是新版本推荐的设置方式,​​-pod-manifest- path​​​ 参数将被逐渐弃用),指定 ​​kubelet ​​​需要监控的配置文件所在的目录,​​kubelet ​​​会定期扫描该目录,并根据该目录下的​​.yaml​​​或​​ json​​文件进行创建操作。

假设配置目录为​​/etc/kubelet.d/​​​,配置启动参数为​​-pod-manifest-path=/etc/kubelet.d/​​​,然后重启​​kubelet​​服务。

在​​/etc/kubelet.d​​​目录下放入​​static-web.yaml ​​​文件,内容如下:
k8s教程(06)-pod定义与基本用法_配置文件_15
等待一会儿,查看本机中已经启动的容器:
k8s教程(06)-pod定义与基本用法_redis_16
可以看到一个 ​​​Nginx​​​ 容器已经被 ​​kubelet​​​成功创建了出来。到 ​​Master ​​​上查看 ​​Pod ​​​列表,可以看到这个​​ static pod​​​:
k8s教程(06)-pod定义与基本用法_配置文件_17
由于静态 ​​​Pod​​​ 无法通过 ​​API Server ​​​直接管理,所以在 ​​Master​​​上尝试删除这个 ​​Pod ​​​时,会使其变成​​ Pending​​​ 状态,且不会被删除。
k8s教程(06)-pod定义与基本用法_redis_18
删除该​​​ Pod​​​ 的操作只能是到其所在 ​​Node​​​ 上将其定义文件 ​​static-web.yaml ​​​从​​/etc/kubelet.d​​目录下删除。

#rm /etc/kubelet.d/static-web.yaml

# docker ps

//无容器运行

3.2 HTTP 方式

通过设置 ​​kubelet​​​ 的启动参数“​​-manifest--url​​​”,​​kubelet​​​将会定期从该​​ URL​​​ 地址下载 ​​Pod ​​​的定义文件,并以​​yaml​​​ 或 ​​json​​​ 文件的格式进行解析,然后创建​​ Pod​​,其实现方式与配置文件方式是一致的。


举报

相关推荐

0 条评论