k8s学习笔记之五:Pod资源清单spec字段常用字段及含义
第一章、前言
在上一篇博客中,我们大致简述了一般情况下资源清单的格式,以及如何获得清单配置的命令帮助,下面我们再讲解下清单中spec字段中比较常见的字段及其含义
第二章、常用字段讲解
spec.containers <[]object>
spec.containers <[]object>
spec.containers.name <string> #pod的名称,必须字段,名称唯一且对象创建后不可以被修改
spec.containers.image <string> #镜像仓库的路径/镜像的名称:镜像的标签
spec.containers.image.imagePullPolicy <string> #镜像的下载策略。有三种:Always(总是去仓库下载) ,Never(从不去仓库下载) , IfNotPresent(如果本地没有就去仓库下载)
默认是"IfNotPresent" 但是,如果镜像的标签是latest,则总会是"Always,并且对象一旦被创建,这个字段不允许被改变
spec.containers.ports: #容器公开的端口列表。在这里公开端口可以为系统提供关于容器使用的网络连接的额外信息,但主要是提供信息。在这里不指定端口不会阻止该端口被公开。任何监听容器内默认的“0.0.0.0”地址的端口都可以从网络访问
spec.containers.ports.containerPort <integer> -required- #pod暴露的端口,此端口仅是额外的信息,对端口是否被暴露没有影响
spec.containers.ports.hostPort <integer> #主机上公开的端口
spec.containers.ports.protocol <string> #端口的协议
spec.containers.ports.hostIP <string> #指定要绑定的主机
spec.containers.command <[]string> #运行的程序,类似于docker中的entrypiont,并且这里的命令不会运行在shell中,如果没有这个字段docker镜像会运行自己entrypiont中的指令
spec.containers.args <[]string> #向docker镜像中传递参数 如果定义了这个字段,docker镜像中cmd命令不会被执行,如果引用变量使用$(VAR_NAME)格式引用,如果想使用命令引用的的方式,需要使用$$(VAR_NAME)方式来引用
#关于args和command的官方文档链接:https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/
pod.spec.containers.volumeMounts
pod.spec.containers.volumeMounts.name
pod.spec.containers.volumeMounts.mountPath #可以被容器挂载的存储卷的路径,路径不能包含':' 符号
pod.spec.containers.volumeMounts.subPath #可以被容器挂载的存储卷的路径,并且不会覆盖挂载点中的文件
pod.spec.containers.volumeMounts.readOnly #是否只读,默认为false
pod.spec.containers.resources
spec.containers.resources.limits #资源限制
spec.containers.resources.limits.cpu : CPU 上限, 可以短暂超过, 容器也不会被停止
spec.containers.resources.limits.memory : 内存上限, 不可以超过; 如果超过, 容器可能会被终止或调度到其他资源充足的机器上
spec.containers.resources.requests #资源需求
spec.containers.resources.requests.cpu : CPU 请求, 也是调度 CPU 资源的依据, 可以超过
spec.containers.resources.requests.memory : 内存请求, 也是调度内存资源的依据, 可以超过; 但如果超过, 容器可能会在 Node 内存不足时清理
spec.nodeSelector <map[string]string>
pod.spec.nodeSelector: #指定对象的调度节点,节点必须存在
pod.spec.restartPolicy <string>
pod.spec.restartPolicy:#容器的重启策略。有三种Always(只有退出就重启),OnFailure(失败退出时不重启),Never(只要退出就不重启),kubelet重新启动的已退出容器将以指数退避延迟(10秒,20秒,40秒......)重新启动,上限为五分钟,并在成功执行十分钟后重置
第三章、简单示例
1.常见pod清单(使用ConfigMap传递环境变量)
[root@k8s-master01 ~]#kubectl create configmap special-config --from literal=special.how=very --from-literal=sepcial.type=charm #创建一个ConfigMap,ConfigMap是用来存储配置文件的kubernetes资源对象,获取命令帮助kubectl create configmap -h
[root@k8s-master01 ~]#kubectl create configmap env-config --from-literal=log_level=INFO
[root@k8s-master01 ~]#kubectl get configmap special-config -o go-template='{{.data}}' #查看ConfigMap的内容
[root@k8s-master01 ~]#kubectl get configmap env-config -o go-template='{{.data}}'
[root@k8s-master01 manifests]# kubectl label node k8s-node01 disk=ssd #对集群中的一个节点打上标签
[root@k8s-master01 manifests]# cat test-pod.yaml #创建一个测试pod清单
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: test-container #容器名称
image: busybox #镜像路径
command: ["/bin/sh", "-c", "env"] #执行命令,需要注意command、args和container中的entrypiont中的命令和参数相互的关系
env: #配置env
- name: SPECIAL_LEVEL_KEY #env名称
valueFrom: #指定env的来源
configMapKeyRef: #表示从ConfMap中选择
name: special-config #ConfigMap的文件名称
key: special.how #ConfigMap中的key名称
- name: SPECIAL_TYPE_KEY
valueFrom:
configMapKeyRef:
name: special-config
key: sepcial.type
envFrom: #容器中填充环境变量的列表
- configMapRef: #指定ConfigMap文件
name: env-config #ConfigMap文件
restartPolicy: Never #定义重启策略
nodeSelector: #node选择器
disk: ssd
2.常见pod清单(使用secret传递环境变量)
[root@k8s-master01 manifests]# cat secrets.yaml
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
password: MTIzNDU2Cg== #这里的环境变量的值需要使用base64加密,例如:echo "admin"|base64[加密] , echo "YWRtaW4K"|base64 -d [解密]
username: YWRtaW4K
[root@k8s-master01 manifests]# cat secrets-demo.yaml
apiVersion: v1
kind: Pod
metadata:
name: secret-nginx
labels:
name: secret-nginx
spec:
volumes:
- name: secret-nginx
secret:
secretName: mysecret
containers:
- name: secret-nginx
image: nginx:1.14.-alpine
volumeMounts:
- name: secret-nginx
mountPath: "/etc/secrets"
readOnly: true
ports:
- name: www
containerPort:
hostPort:
pod清单配置3(定义pod postStart或preStop,即容器创建后和容器中止前需要做的操作)
[root@k8s-master01 manifests]# cat poststart-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: poststart-pod
spec:
containers:
- name: buxybox-httpd
image: busybox
imagePullPolicy: IfNotPresent
lifecycle:
postStart:
exec:
command: ["mkdir", "-p"," /data/web/html"] #注意,此处command和下面的command不可以有强依赖关系,下面的command会在此处command先执行
command: ["/bin/sh","-c","sleep 3600"]
pod清单配置4(以exec方式对pod进行存活性探测)
[root@k8s-master01 manifests]# cat liveness-exec.yaml
apiVersion: v1
kind: Pod
metadata:
name: liveness-exec-pod
spec:
containers:
- name: liveness-exec-pod
image: busybox:latest
imagePullPolicy: IfNotPresent
command: ["/bin/sh","-c","touch /tmp/healthy;sleep 30;rm -rf /tmp/healthy;sleep 3600"]
livenessProbe:
exec: #探测方式由三种,exec(执行命令探测) HttpGet(Http请求) tcpSocket(TCP端口探测)
command: ["test","-e","/tmp/healthy"]
initialDelaySeconds: 2 #容器启动后多长时间开始探测
periodSeconds: 5 #每次探测的间隔时间,单位为秒
pod清单配置5(以HttpGet方式对pod进行存货性探测)
[root@k8s-master01 manifests]# cat liveness-httpget.yaml
apiVersion: v1
kind: Pod
metadata:
name: liveness-httpget-pod
spec:
containers:
- name: liveness-httpget-pod
image: ikubernetes/myapp:v1
imagePullPolicy: IfNotPresent
livenessProbe:
httpGet:
port:
path: /index.html
initialDelaySeconds:
periodSeconds:
pod清单配置6(使用httpget方式对pod进行就绪性探测)
[root@k8s-master01 manifests]# cat readiness-httpget.yaml #与存活性探测相类似
apiVersion: v1
kind: Pod
metadata:
name: readiness-httpget-pod
spec:
containers:
- name: readiness-httpget-pod
image: ikubernetes/myapp:v1
imagePullPolicy: IfNotPresent
readinessProbe:
httpGet:
port:
path: /index.html
initialDelaySeconds:
periodSeconds:
k8s学习笔记之五:Pod资源清单spec字段常用字段及含义的更多相关文章
- k8s学习笔记之六:Pod控制器(kube-controller-manager)
第一章.什么是kube-controller-manager? Controller Manager 由 kube-controller-manager 和 cloud-controller-mana ...
- K8S学习笔记之Pod的Volume emptyDir和hostPath
0x00 Volume的类型 Volume是Kubernetes Pod中多个容器访问的共享目录. Volume被定义在Pod上,被这个Pod里的多个容器挂在到相同或不同的路径下. Volume的生命 ...
- k8s学习笔记之四:资源清单定义入门
第一章.k8s中的资源 1.什么叫资源? k8s中所有的内容都抽象为资源, 资源实例化之后,叫做对象 2.在k8s中有哪些资源? 工作负载型资源(workload): Pod ReplicaSet D ...
- 【K8s学习笔记】K8s是如何部署应用的?
本文内容 本文致力于介绍K8s一些基础概念与串联部署应用的主体流程,使用Minikube实操 基础架构概念回顾 温故而知新,上一节[K8S学习笔记]初识K8S 及架构组件 我们学习了K8s的发展历史. ...
- Pod中spec的字段常用字段及含义
一.Pod中spec的字段常用字段及含义 1.pod.spec.containers ² spec.containers.name <string> #pod的名称,必须字段,名称唯一 ...
- Docker 与 K8S学习笔记(二十)—— 使用Downward API向容器注入Pod信息
Kubernetes在创建Pod时,会为Pod和容器设置一些额外的信息,比如Pod名称.Pod IP.Node IP.Label.Annotation.资源限制等,我们经常会在应用程序中使用到这些数据 ...
- k8s学习笔记
9.deployment:声明式的升级应用 9.1.使用RC实现滚动升级 #kubectl rolling-update kubia-v1 kubia-v2 --image=luksa/kubia:v ...
- k8s 学习笔记
常用的kubectl命令 kubectl run kubia --image=luksa/kubia --port=8080 --generator=run/v1 --image 指定镜像 - ...
- ASP.NET Core微服务 on K8S学习笔记(第一章:详解基本对象及服务发现)
课程链接:http://video.jessetalk.cn/course/explore 良心课程,大家一起来学习哈! 任务1:课程介绍 任务2:Labels and Selectors 所有资源对 ...
随机推荐
- Python---遍历序列的各种方式
本文主要列举使用for循环遍历类似list结果的方式,因为老是使用for e in w_list真的是太没创意了,这显然不是我的风格,嘿嘿... 1. for item in s: 遍历s中的元素 2 ...
- Win10系列:C#应用控件基础6
RadioButton控件 在应用程序的开发过程中开发者经常使用多个RadioButton控件来显示一组单选按钮,仅允许用户从中选择一项.RadioButton控件和CheckBox控件的差别在于,用 ...
- 网络编程—网络基础概览、socket,TCP/UDP协议
网络基础概览 socket概览 socket模块—TCP/UDP的实现 TCP/UDP总结 网络基础概览 osi七层协议各层主要的协议 # 物理层传输电信号1010101010 # 数据链路层,以太网 ...
- bzoj2190
题解: 显然当坐标不互质的时候 是可以看得见的 所以线性筛选欧拉函数 代码: #include<bits/stdc++.h> using namespace std; ; int n,an ...
- python 安装scrapy need vistual c++ 14.0 的正面解法
为什么一堆教程里面,都是侧面的. 因为需要你自己去正面刚 正题: 这个问题要的是 build tools 人(控制台)说的很清楚了, 给的链接不是直接解决问题的链接(我安装了 vs_redis.exe ...
- 自动化测试-2.seleniumIDE
一.安装步骤 1. 打开Firefox浏览器 2. 打开https://addons.mozilla.org/en-US/firefox/addon/selenium-ide/versions/,点击 ...
- mysql oracle 数据库备份
mysql 备份与还原 转载:https://blog.csdn.net/win_turn/article/details/60880990 备份数据库 数据库名叫dddd mysqldump -u ...
- 双跑道------js分机号
博客园 首页 新随笔 联系 管理 订阅 随笔- 310 文章- 0 评论- 134 [tomcat]启动报错:Failed to initialize end point associated ...
- 【leetcode】455. Assign Cookies
problem 455. Assign Cookies solution1: But, you should give each child at most one cookie. 对小朋友的满意程度 ...
- SSH设置秘钥登录
设置 SSH 通过密钥登录 我们一般使用 PuTTY 等 SSH 客户端来远程管理 Linux 服务器.但是,一般的密码方式登录,容易有密码被暴力破解的问题.所以,一般我们会将 SSH 的端口设置为默 ...