k8s资源清单创建pod

资源:对象

service pod deployment

 

workload:pod,ReplicaSet,Deployment,statefulset,DaemonSet,Job,Crontabjob,...

 

服务发现和负载均衡:service ,Ingress,....

 

配置与存储:Volumn存储卷 ,CSI存储接口

ConfigMap,Secret,

DownwardAPI

 

集群级资源:namespace,Node,Role,ClusterRole,RoleBinding,ClusterRoleBinding,

 

元数据型资源

HPA,PodTemplate,LimitRange

 

kubectl get pod myapp-84cd4b7f95-h47cj -o yaml

yml文件查看pod详细的配置清单

 

创建资源的方法:

apiserver仅接收JSON格式的资源定义;

yaml格式提供配置清单,apiserver可自动转为json格式,而后在提交

 

kubectl api-versions

大部分资源的配置清单:

apiVerison:group/version,

kind:资源类别

metadata:元数据

  name

  namespace

  labels

  annotations 资源注解

   每个资源的引用PATH

        /api/GROUP/VERSION/namespaces/NAMESPACE/TYPE/NAME

 

spec:规格 期望的状态 disired state

 

spec.containers

  - name <string>

   image <string>

   imagePullPolicy <string>

     Always,Never,IfNotPresent

     总是去仓库下载 不下载 不存在就去下载,存在就直接使用

 

修改镜像中默认的运用:

kubectl explain pods.spec.containers

 command ,args

https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell

 

标签labels

kubectl get pods --show-labels

key=value(小于63个字符)

key:字母,数字,”-_”

value:可以为空

kubectl get pods -l app --show-labels 找出含有app标签的pod

kubectl get pods -L app,run --show-labels -o wide 匹配字段查询

 

打标签

kubectl label –help

kubectl label pods pod-demo release=canary

             类型   资源名     标签名=canary

kubectl get pods -l app --show-labels  查看是否打上标签

 

覆盖修改标签

kubectl label pods pod-demo release=stable –overwrite

 

kubectl get pods -l app,release --show-labels 既有app也有release标签

 

标签选择器

等值:=,==,!= 

kubectl get pods -l release=stable  --show-labels

kubectl label pods nginx-7bb7cd8db5-7dn9r release=canary

kubectl get pods -l release

kubectl get pods -l release=canary

kubectl get pods -l release,app

kubectl get pods -l release=stable,app=myapp

kubectl get pods -l release!=canary --show-labels

 

集合关系:key in (values1,value2…), key not in (values1,value2…),key,!key

 kubectl get pods -l "release in (canary,beta,alpha)" --show-labels

kubectl get pods -l "release notin (canary,beta,alpha)" --show-labels

 

许多资源支持内嵌字段定义其使用标签选择器:

matchLabels:直接给定键值,相当于=

matchExpressions:基于给定的表达式来定义使用标签选择器,{key:”KEY”,operator:”OPERATOR”,values:[VAL1,VAL2…]}大写字母表示替换

operator操作符:In ,NotIn values字段必须为非空列表

Exists,NotExists values字段必须为空列表

 

各种对象都能打标签,不仅限于pod,比如node

kubectl get nodes --show-labels

kubectl label nodes node02 disktype=ssd 对node02打标签

kubectl explain pods.spec

nodeSelector     <map[string]string> 节点标签选择器

kubectl label nodes node01 disktype=hd

 

vim pod-demo.yaml

containers:

   …

nodeSelector:

disktype: hd

 

kubectl delete -f pod-demo.yaml

kubectl create -f pod-demo.yaml 再次创建会运行在node01上

kubectl describe pods pod-demo

 

nodeName   <string> 指定运行在哪个节点上

 

annotations:资源注解

 与label不同的地方在于,它不能用于挑选资源对象,仅用于为对象提供”元数据”,

vim pod-demo.yaml

metadata:

  annotations:

    work in node02: "disk is ssd"

 

kubectl delete -f pod-demo.yaml

kubectl create -f pod-demo.yaml

kubectl describe pods pod-demo

Annotations:  work_in_node02: disk is ssd

 

status:当前状态,current state,本字段由kubernetes集群维护;用户不能定义

kubectl explain pods 查询pods怎么定义

kubectl explain pods.metadata 查询pods的metadata怎么定义

kubectl explain pods.spec

kubectl explain pods.spec.containers

kubectl explain pods.spec.containers.livenessProbe

 

 

例如:自定义一个pod资源

vim pod-demo.yaml

 

apiVersion: v1

kind: Pod

metadata:

  name: pod-demo

  namespace: default

  labels:

    app: myapp

    tier: frontend

spec:

  containers:

  - name: myapp

    image: ikubernetes/myapp:v1

    ports:

    - name: http

      containerPort: 80

    - name: https

      containerPort: 443

  - name: busybox

    image: busybox:latest

    imagePullPolicy: IfNotPresent

    command:

    - "/bin/sh"

    - "-c"

    - "sleep 3600"

 

注释:

spec:

containers:

- name: myapp

image: ikubernetes/myapp:v1

相当于 spec:{containers:['name:myapp'],image:"ikubernetes/myapp:v1"}

 

command:

- "/bin/sh"

- "-c"

- "sleep 3600"

相当于 command:["/bin/sh","-c","sleep 3600"]

 

kubectl create -f pod-demo.yaml    基于yaml清单文件创建pod资源

从文件加载创建资源

kubectl get pods 再查看一下创建的pod

kubectl describe pods pod-demo 查看创建的资源的描述信息

 

查看容器日志

kubectl logs pod-demo myapp

           pod名  pod里面的容器名

 

进入容器

kubectl exec -it pod-demo -c myapp -- /bin/sh

        输入和终端 pod名 -c指定容器名 --执行的命令

 

 

kubectl delete -f pod-demo.yaml 删除基于资源清单yaml文件定义的资源

posted on 2019-08-01 22:49  SZ_文彬  阅读(903)  评论(0编辑  收藏  举报