本站所有文章均为原创,如对您有帮助,恳请帮忙点击任何一处广告

K8S教程(6)使用YAML资源配置清单创建Pods

发布:TangLu2020-9-14 13:09分类: Kubernetes 标签: docker k8s kubernetes

一、K8S配置清单是什么

虽然使用kubectl或者dashboard都可以创建Pods,但在实际使用中基本都是使用yaml配置清单来对资源进行一个声明,然后K8S按照声明信息进行创建。对于K8S来说,它会将YAML配置清单中的内容自动转换成JSON格式,然后传送给API Server完成创建。下面是一个最简单的配置清单示例:

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"]


二、K8S配置清单字段简介

1、导出或者干跑一份deployment,并且为yaml格式,用作参考模板

#方法1——导出已有deployment
kubectl get deployment nginx-test -o yaml
#方法2——利用干跑模式导出一份yaml
kubectl create deployment test --image=nginx:1.7.9  --dry-run -o yaml > nginx.yaml


2、查看导出的deployment配置清单文件,主要有以下五个字段,而需要自己维护的实际只有4个字段

· apiserver定义API组名和版本,如v1。

kubectl api-versions  #查看K8S所支持API版本


pod1.png


· 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是必选字段


2、使用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


3、创建pod后正常状态应该是Running,如果是Error的话使用kubectl describe命令查看出错pod的详细信息

kubectl describe pods pod-demo


4、使用kubectl delete命令删除有问题的pod,然后重新apply配置清单

kubectl delete pods pod-demo
kubectl apply -f pod-demo.yaml


5、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: default
  labels: 
    app: nginx
    version: 1.7.9 
spec:
  containers:  #该字段可以定义多个
  - name: nginx  #pod的名称
    image: nginx:1.7.9  #使用哪个仓库的哪个镜像
    #imagePullPolicy: IfNotPresent  #该字段不写也会自动创建,默认IfNotPresent代表镜像不存在才会拉取,Always代表总会拉取。如果镜像使用latest也会去拉取
    ports:  #需要容器暴露的端口
       - name: http
         containerPort: 80
         protocol: TCP
    resources:  #容器资源限制,这里的值会决定服务质量QOS的类型
      requests:  #容器请求的资源大小
        cpu: 0.5  #单位是G,0.5代表500M
        memory: 500M
      limits:  #容器最大能分配的资源,容器用到的实际资源是在请求的资源和最大资源之间波动
        cpu: 1
        memory: 1000M 
    #command: ["/bin/sh"]   #nginx镜像运行后所执行的命令,如果没写的话则是镜像默认命令
    #args: ["-c", "while true; do echo hello; sleep 10;done"]  #command命令接收的参数
  #nodeSelector:  #节点选择器,pod会创建在符合条件的node上,还有一种nodeName可以直接指定某个节点去创建pod而不需要条件。    
  #restartPolicy:  #容器停止运行时的重启策略,默认Always总是重启(不管是不是真的需要停止),OnFailure则是错误退出才会重启,Never不重启
     # Always | OnFailure | Never


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文件中定义的资源


温馨提示如有转载或引用以上内容之必要,敬请将本文链接作为出处标注,谢谢合作!
et_highlighter51
版权所有:《Linux运维技术学习站点
文章标题:《K8S教程(6)使用YAML资源配置清单创建Pods
除非注明,文章均为 《Linux运维技术学习站点》 原创
转载请注明本文短网址:http://www.linuxe.cn/post-500.html  [生成短网址]

已有 0/66 人参与

发表评论:

欢迎分享Linux运维技术学习站点

欢迎使用手机扫描访问本站,还可以关注微信哦~