k8s查看pod的yaml文件_K8S教程(6)YAML资源配置清单
一、K8S配置清单作用虽然使用kubectl或者dashboard都可以创建Pods,但在实际使用中基本都是使用yaml配置清单来对资源进行一个声明,然后K8S按照声明信息进行创建。对于K8S来说,它会将YAML配置清单中的内容自动转换成JSON格式,然后传送给API Server完成创建。二、创建YAML配置清单的办法1、导出已有的Pod为YAML格式kubectl get deployment
一、K8S配置清单作用
虽然使用kubectl或者dashboard都可以创建Pods,但在实际使用中基本都是使用yaml配置清单来对资源进行一个声明,然后K8S按照声明信息进行创建。对于K8S来说,它会将YAML配置清单中的内容自动转换成JSON格式,然后传送给API Server完成创建。
二、创建YAML配置清单的办法
1、导出已有的Pod为YAML格式
kubectl get deployment nginx-test -o yaml
2、使用dry-run干跑模式导出YAML
kubectl create deployment test --image=nginx:1.7.9 --dry-run -o yaml > nginx.yaml
三、K8S配置清单字段简介
1、一个最简单的配置清单示例:
vi pod-demo.yaml
kind: Pod
metadata:
name: pod-demo
namespace: default
spec"
containers:
name: adminbox
image: ikubernets/admin-box:v1.0
imagePullPolicy: IfNotPresent
command: ["/bin/bash","-c","sleep 3600"]
2、查看导出的deployment配置清单文件,主要有以下五个字段,而需要自己维护的实际只有4个字段:
kubectl get deployment nginx-test -o yaml
·apiserver:定义API组名和版本,如v1。
kubectl api-versions #查看K8S所支持API版本
·kind:定义资源类别,要创建的是POD就写为pod、Deployment、StatefulSet等
kubectl api-resources #查看K8S所有资源类型
·metadata:元数据信息,包含资源名称、namespace等。namespace用于给资源进行分类,默认会有一个default名称空间
kubectl get namespaces #查看namespace
kubectl create namespace myns #创建一个名为myns的namespace
·spec(核心):声明资源的属性状态,也就是说希望deployment是什么样的。它的属性通常应该和status字段一致
·status(核心):资源当前状态,应该与spec接近才对,本字段无需配置,由K8S集群维护。
由于5个字段各有自己的子字段,所以K8S提供了一个explain命令用于查看每个字段支持的子字段
kubectl explain pods.metadata #查看metadata下的子字段,如果带有required是必选字段
3、使用kubectl apply命令应用配置清单创建pod,使用kubectl get pods命令查看资源状态
kubectl apply -f pod-demo.yaml
kubectl get pods #查看容器是否运行,正常情况应该是Running
kubectl get pods -o wide #查看pod详细信息,包含了IP、所属Node等
kubectl get pods -n kube-system #显示指定namespace的pod
4、创建pod后正常状态应该是Running,如果是Error的话使用kubectl describe命令查看出错pod的详细信息
kubectl describe pods pod-demo
5、使用kubectl delete命令删除有问题的pod,然后重新apply配置清单
kubectl delete pods pod-demo
kubectl apply -f pod-demo.yaml
6、YAML文件经过应用后还会自动生成一些字段
四、K8S YAML应用示例
1、编写YAML文件定义容器
vi nginx-test.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx
annotations: #描述信息,但和lable不同于它不能用于节点选择器,只作为元数据展示,使用kubectl describe时可以看到
linuxe.cn/created-by: "cluster admin"
namespace: web
labels:
app: nginx
version: 1.7.9
spec:
containers: #定义容器
- name: nginx #pod的名称,可以定义多个
image: nginx:1.7.9 #使用仓库的哪个镜像
imagePullPolicy: IfNotPresent #该字段不写的话默认为IfNotPresent,代表镜像不存在才会拉取,Always代表总会拉取。如果镜像使用latest也会去拉取
volumeMounts: #引用共享存储
- name: storage #共享存储名
mountPath: /tmp/storage #共享存储在容器中的路径
ports: #需要容器暴露的端口
- name: http
containerPort: 80 #需要暴露的容器端口,会随机在宿主机中生成一个端口作为映射
protocol: TCP
resources: # 容器资源限制,这里的值会决定服务质量QOS的类型
requests: # 容器请求的资源大小
cpu: 0.5 # 0.5代表500M
memory: 500M
limits: #容器最大能分配的资源,实际资源是在请求的资源和最大资源之间波动
cpu: 1
memory: 1000M
volumes:
- name: storage #定义存储名,上面有调用
emptyDir: {} #数据共享策略,EmptyDir是同Pod中所有容器数据共享,Pod删除后数据也会删除;HostPath是把数据存放在宿主机中共享,删除Pod数据还在;NFS则是网络存储
command: ["nginx"] #nginx镜像运行后所执行的命令,如果没写的话则是镜像默认命令
args: ["-s","reload"] #command命令接收的参数
#nodeSelector: #节点选择器,pod会创建在符合条件的node上,还有一种nodeName可以直接指定某个节点去创建pod而不需要条件。
restartPolicy: #容器停止运行时的重启策略,默认Always=容器一停就进行重启,不管是不是真的需要;OnFailure=容器错误退出就重启;Never=不重启
OnFailure
2、服务质量QOS
主要用于Pod调度和驱逐,优先级越低的QOS越容易被驱逐。不同QOS优先级不同,使用kubectl describe命令可以查看Qos Class:
· BestEffort:尽可能的为Pod分配资源,默认不进行requests设置就是该QOS,优先级最低
· Burstable:资源可波动,requests小于limit的值就是该QOS,推荐
· Guaranteed:完全可保障资源,必须使用requests和limit定义内存和CPU两项资源并且相等,优先级最高
3、设置驱逐指标与系统保留资源
vi /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--kube-reserved=cpu-200m,memory=500Mi --eviction-hard=memory.available<1Gi"
4、应用YAML文件创建资源
kubectl apply -f nginx-test.yaml
5、通过YAML文件删除资源
kubectl delete -f pod-test.yaml #删除YAML文件中定义的资源
更多推荐
所有评论(0)