19、K8S实战:Kubernetes--详解pod(2基本配置)

本小节主要来研究pod.sepc.containers属性,这也是pod配置中最为关键的一项配置。

1、 使用命令查看解释:;

kubectl explain pod.spec.containers

1、 基本配置:;
创建一个配置pod-base.yaml文件

rsion: v1
kind: Pod
metadata: 
	name: pod-base
	namespace: dev
spec:
	containers:
	- name: nginx
	  image: nginx:1.17.1
	  imagePullPolicy: IfNotPresent
	  command: ["/bin/sh","-c","touch /tmp/hello.txt;while true;do /bin/echo $(data +&T) >> /tmp/hello.txt; sleep 3; done;"]
	- name: busybox
	  image: busybox:1.30
	  env: 
	  	- name: "username"
	  	  value: "admin"
	  	- name: "password"
	  	  value: "123456"
  	  ports: 
  	  	- name: nginx-port

上面定义了一个比较简单的pod配置,里面有两个容器:
nginx: 用1.17.1版本的nginx镜像创建,nginx是一个轻量级的web容器
busybox: 用1.30版本经镜像创建,busybox是一个小巧的linux命令集合

# 创建pod:
kubectl apply -f pod-base.yaml
# 查看pod状况
kubectl get pod -n dev
# 查看容器启动详情
kubectl describe pods pod-base -n dev

配置介绍:

name<String>: 容器名称, 注意是不允许使用大写的
image<String>: 容器镜像地址
imagePullPolicy<String>: 镜像拉取策略
						 always: 总是用远程仓库拉取
						 IfNotPresent: 本地有,用本地, 没有用远程的
						 Never: 从不拉取
						 默认值说明:如果镜像tag为具体版本号,则默认策略为 IfNotPresent
						 如果镜像tag为latest, 默认策略是 always
command<[]String>: 容器的启动命令列表,如不指定,使用打包使用的命令启动。
				   在上面的命令中,容器busybox容器一直没有启动成功,因为它是一个工具类的集合,
				   kubernetes集群启动管理后,它会自动关闭,解决方法就是让其一直在运行,这里用到
				   conmmand配置,"/bin/sh","-c" 使用sh命令;"touch /tmp/hello.txt" 创建一个
				   文件;while true;do /bin/echo $(data +&T)" >> /tmp/hello.txt; 
				   sleep 3; done;每三秒往文件写入当前时间。
				   重建创建pod,会发现该busybox容器正常运行
特殊说明:通过上面发现command已经可以完成启动命令和传递参数的功能,为什么这里还需要提供一个args选项,用于传递参数吗?这其实跟docker有点关系,kubernetes中的command,args两项其实是实现覆盖dockerfile中entrypoint的功能。
1)如果command和args均没有写,那么用dockerfile的配置
2)如果command写了,但args没有写,那么用dokerfile默认的配置会被忽略,执行输入的command
3)如果command没写,但args写了,那么dockerfile中配置的entrypoint的命令会执行,使用当前args的参数
4)如果command和args都写了,那么dockerfile的配置被忽略,执行command并追加上args参数
env<[]Object>: 容器环境变量配置,一个环境变量是一个键值对,可以向容器中设置环境变量。
			   这种方式不是很推荐,推荐将这种配置单独存储在配置文件中,这种方式将在后面介绍。
5)port<[]Object>: name<String> #端口名称,如果指定,必须保证name在pod中是惟一的
  				   containerPort<Integer>: #容器要监听的端口(0<x<65535)
  				   hostPort<Integer>: # 容器在主机上公开的端口,如果设置,主机上只能运行容器的一个副本(一般省略)
  				   hostIp<Stirng>: # 要将外部端口绑定到的主机IP(一般省略)
  				   protocol<String>: # 端口协议,必须是UDP、TCP或SATCP,默认为TCP 
# 进入容器
# kubectl exec pod名称 -n 命名空间 -it -c 容器名称 /bin/sh 
kubectl exec pod-command -n dev -it -c busybox /bin/sh
# 进入容器后执行
tail -f 1000 /tmp/hello.txt 
# 进入容器,查询容器中环境变量
echo $userName
echo $password
# 退出容器
exit

》》》博主长期更新学习心得,推荐点赞关注!!!
》》》若有错误之处,请在评论区留言,谢谢!!!

版权声明:本文不是「本站」原创文章,版权归原作者所有 | 原文地址: