zoukankan      html  css  js  c++  java
  • k8s资源清单基础

    资源清单介绍

      创建资源的方法
      apiserver仅接收JSON格式的资源定义
      yaml格式提供配置清单 apiserver可自动把yaml转换成json格式数据

    资源清单五个一级字段
       1.apiVersion group/version
         使用kubectl api-versions来获取
       2.kind 资源类别
       3.metadata 元数据
         name
         namespace
         labels
         annotations
      4.spec 期望的状态
      5.satus 当前状态     由k8s维护数据     只能读不能修改   pod控制器的作用就是使各个pod的状态无限的向spec期望的状态靠近

    资源清单格式示例

    [root@k8s-master mainfests]# vi pod-demo.yml 
    
    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-demo
      namespace: default
      labels:
        app: myapp
        tier: frontend
    spec:
      containers:
      - name: myapp
        image: ikubernetes/myapp:v1
      - name: busybox
        image: busybox:latest
        command:
        - "/bin/sh"
        - "-c"
        - "sleep 5"
    pod-demo.yml

     1.执行创建    kubectl create -f  pod-demo.yml      2.执行删除  kubectl delete -f  pod-demo.yml

     3.查看pod中指定容器日志

    [root@k8s-master mainfests]# kubectl logs pod-demo busybox
    /bin/sh: can't create /usr/share/nginx/html/index.html: nonexistent directory
    View Code
    [root@k8s-master mainfests]# kubectl get pods
    NAME                          READY     STATUS             RESTARTS   AGE
    client                        1/1       Running            0          1d
    myapp-74c94dcb8c-dp9t4        1/1       Running            0          45m
    myapp-74c94dcb8c-jplgj        1/1       Running            0          45m
    myapp-74c94dcb8c-mjjpw        1/1       Running            0          1d
    nginx-deploy-5b595999-d7rpg   1/1       Running            0          227d
    nginx-deploy-5b595999-xkzqz   1/1       Running            0          45m
    pod-demo                      1/2       CrashLoopBackOff   2          3m
    
    
    [root@k8s-master mainfests]# kubectl describe pods pod-demo
    Name:               pod-demo
    Namespace:          default
    Priority:           0
    PriorityClassName:  <none>
    Node:               node3/192.168.11.143
    Start Time:         Tue, 21 May 2019 18:15:34 +0800
    Labels:             app=myapp
                        tier=frontend
    Annotations:        <none>
    Status:             Running
    IP:                 10.244.2.14
    Containers:
      myapp:
        Container ID:   docker://ff766f6291cf5e6c3ee92113e8031c59ecffa7871eb9f765602235eda3cc0f30
        Image:          ikubernetes/myapp:v1
        Image ID:       docker-pullable://ikubernetes/myapp@sha256:9c3dc30b5219788b2b8a4b065f548b922a34479577befb54b03330999d30d513
        Port:           <none>
        Host Port:      <none>
        State:          Running
          Started:      Tue, 21 May 2019 18:15:45 +0800
        Ready:          True
        Restart Count:  0
        Environment:    <none>
        Mounts:
          /var/run/secrets/kubernetes.io/serviceaccount from default-token-n87jl (ro)
      busybox:
        Container ID:  docker://19d6b5bee5c1fc349a2751bcc560d049ff1972c821ac2d6fac3a09bf8121517d
        Image:         busybox:latest
        Image ID:      docker-pullable://busybox@sha256:4b6ad3a68d34da29bf7c8ccb5d355ba8b4babcad1f99798204e7abb43e54ee3d
        Port:          <none>
        Host Port:     <none>
        Command:
          /bin/sh
          -c
          echo $(date) >> /usr/share/nginx/html/index.html; sleep 5
        State:          Waiting
          Reason:       ErrImagePull
        Last State:     Terminated
          Reason:       Completed
          Exit Code:    0
          Started:      Tue, 21 May 2019 18:16:23 +0800
          Finished:     Tue, 21 May 2019 18:16:29 +0800
        Ready:          False
        Restart Count:  0
        Environment:    <none>
        Mounts:
          /var/run/secrets/kubernetes.io/serviceaccount from default-token-n87jl (ro)
    Conditions:
      Type              Status
      Initialized       True 
      Ready             False 
      ContainersReady   False 
      PodScheduled      True 
    Volumes:
      default-token-n87jl:
        Type:        Secret (a volume populated by a Secret)
        SecretName:  default-token-n87jl
        Optional:    false
    QoS Class:       BestEffort
    Node-Selectors:  <none>
    Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                     node.kubernetes.io/unreachable:NoExecute for 300s
    Events:
      Type     Reason     Age              From               Message
      ----     ------     ----             ----               -------
      Normal   Scheduled  1m               default-scheduler  Successfully assigned default/pod-demo to node3
      Normal   Pulled     1m               kubelet, node3     Container image "ikubernetes/myapp:v1" already present on machine
      Normal   Created    1m               kubelet, node3     Created container
      Normal   Started    1m               kubelet, node3     Started container
      Normal   Pulled     32s              kubelet, node3     Successfully pulled image "busybox:latest"
      Normal   Created    32s              kubelet, node3     Created container
      Normal   Started    31s              kubelet, node3     Started container
      Warning  Failed     12s              kubelet, node3     Failed to pull image "busybox:latest": rpc error: code = Unknown desc = Error response from daemon: Get https://registry-1.docker.io/v2/library/busybox/manifests/latest: net/http: TLS handshake timeout
      Warning  Failed     12s              kubelet, node3     Error: ErrImagePull
      Normal   Pulling    1s (x3 over 1m)  kubelet, node3     pulling image "busybox:latest"
    [root@k8s-master mainfests]# kubectl exec -it pod-demo myapp
    Defaulting container name to myapp.
    Use 'kubectl describe pod/pod-demo -n default' to see all of the containers in this pod.
    rpc error: code = 2 desc = oci runtime error: exec failed: container_linux.go:247: starting container process caused "exec: "myapp": executable file not found in $PATH"
    
    command terminated with exit code 126
    查看pod异常日志

    4.进入pod容器执行命令

    [root@k8s-master mainfests]# kubectl exec -it pod-demo -c myapp -- /bin/sh
    / # cat /usr/share/nginx/html/index.html
    Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
    View Code

    5.查看清单文件语法帮助

    [root@k8s-master ~]# kubectl explain pods.spec
    KIND:     Pod
    VERSION:  v1
    
    RESOURCE: spec <Object>
    
    DESCRIPTION:
         Specification of the desired behavior of the pod. More info:
         https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status
    
         PodSpec is a description of a pod.
    
    FIELDS:
       activeDeadlineSeconds    <integer>
         Optional duration in seconds the pod may be active on the node relative to
         StartTime before the system will actively try to mark it failed and kill
         associated containers. Value must be a positive integer.
    
       affinity    <Object>
         If specified, the pod's scheduling constraints
    
       automountServiceAccountToken    <boolean>
         AutomountServiceAccountToken indicates whether a service account token
         should be automatically mounted.
    
       containers    <[]Object> -required-
         List of containers belonging to the pod. Containers cannot currently be
         added or removed. There must be at least one container in a Pod. Cannot be
         updated.
    
       dnsConfig    <Object>
         Specifies the DNS parameters of a pod. Parameters specified here will be
         merged to the generated DNS configuration based on DNSPolicy.
    
       dnsPolicy    <string>
         Set DNS policy for the pod. Defaults to "ClusterFirst". Valid values are
         'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS
         parameters given in DNSConfig will be merged with the policy selected with
         DNSPolicy. To have DNS options set along with hostNetwork, you have to
         specify DNS policy explicitly to 'ClusterFirstWithHostNet'.
    
       hostAliases    <[]Object>
         HostAliases is an optional list of hosts and IPs that will be injected into
         the pod's hosts file if specified. This is only valid for non-hostNetwork
         pods.
    
       hostIPC    <boolean>
         Use the host's ipc namespace. Optional: Default to false.
    
       hostNetwork    <boolean>
         Host networking requested for this pod. Use the host's network namespace.
         If this option is set, the ports that will be used must be specified.
         Default to false.
    
       hostPID    <boolean>
         Use the host's pid namespace. Optional: Default to false.
    
       hostname    <string>
         Specifies the hostname of the Pod If not specified, the pod's hostname will
         be set to a system-defined value.
    
       imagePullSecrets    <[]Object>
         ImagePullSecrets is an optional list of references to secrets in the same
         namespace to use for pulling any of the images used by this PodSpec. If
         specified, these secrets will be passed to individual puller
         implementations for them to use. For example, in the case of docker, only
         DockerConfig type secrets are honored. More info:
         https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod
    
       initContainers    <[]Object>
         List of initialization containers belonging to the pod. Init containers are
         executed in order prior to containers being started. If any init container
         fails, the pod is considered to have failed and is handled according to its
         restartPolicy. The name for an init container or normal container must be
         unique among all containers. Init containers may not have Lifecycle
         actions, Readiness probes, or Liveness probes. The resourceRequirements of
         an init container are taken into account during scheduling by finding the
         highest request/limit for each resource type, and then using the max of of
         that value or the sum of the normal containers. Limits are applied to init
         containers in a similar fashion. Init containers cannot currently be added
         or removed. Cannot be updated. More info:
         https://kubernetes.io/docs/concepts/workloads/pods/init-containers/
    
       nodeName    <string>
         NodeName is a request to schedule this pod onto a specific node. If it is
         non-empty, the scheduler simply schedules this pod onto that node, assuming
         that it fits resource requirements.
    
       nodeSelector    <map[string]string>
         NodeSelector is a selector which must be true for the pod to fit on a node.
         Selector which must match a node's labels for the pod to be scheduled on
         that node. More info:
         https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
    
       priority    <integer>
         The priority value. Various system components use this field to find the
         priority of the pod. When Priority Admission Controller is enabled, it
         prevents users from setting this field. The admission controller populates
         this field from PriorityClassName. The higher the value, the higher the
         priority.
    
       priorityClassName    <string>
         If specified, indicates the pod's priority. "system-node-critical" and
         "system-cluster-critical" are two special keywords which indicate the
         highest priorities with the former being the highest priority. Any other
         name must be defined by creating a PriorityClass object with that name. If
         not specified, the pod priority will be default or zero if there is no
         default.
    
       readinessGates    <[]Object>
         If specified, all readiness gates will be evaluated for pod readiness. A
         pod is ready when all its containers are ready AND all conditions specified
         in the readiness gates have status equal to "True" More info:
         https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md
    
       restartPolicy    <string>
         Restart policy for all containers within the pod. One of Always, OnFailure,
         Never. Default to Always. More info:
         https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy
    
       schedulerName    <string>
         If specified, the pod will be dispatched by specified scheduler. If not
         specified, the pod will be dispatched by default scheduler.
    
       securityContext    <Object>
         SecurityContext holds pod-level security attributes and common container
         settings. Optional: Defaults to empty. See type description for default
         values of each field.
    
       serviceAccount    <string>
         DeprecatedServiceAccount is a depreciated alias for ServiceAccountName.
         Deprecated: Use serviceAccountName instead.
    
       serviceAccountName    <string>
         ServiceAccountName is the name of the ServiceAccount to use to run this
         pod. More info:
         https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
    
       shareProcessNamespace    <boolean>
         Share a single process namespace between all of the containers in a pod.
         When this is set containers will be able to view and signal processes from
         other containers in the same pod, and the first process in each container
         will not be assigned PID 1. HostPID and ShareProcessNamespace cannot both
         be set. Optional: Default to false. This field is alpha-level and is
         honored only by servers that enable the PodShareProcessNamespace feature.
    
       subdomain    <string>
         If specified, the fully qualified Pod hostname will be
         "<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>". If not
         specified, the pod will not have a domainname at all.
    
       terminationGracePeriodSeconds    <integer>
         Optional duration in seconds the pod needs to terminate gracefully. May be
         decreased in delete request. Value must be non-negative integer. The value
         zero indicates delete immediately. If this value is nil, the default grace
         period will be used instead. The grace period is the duration in seconds
         after the processes running in the pod are sent a termination signal and
         the time when the processes are forcibly halted with a kill signal. Set
         this value longer than the expected cleanup time for your process. Defaults
         to 30 seconds.
    
       tolerations    <[]Object>
         If specified, the pod's tolerations.
    
       volumes    <[]Object>
         List of volumes that can be mounted by containers belonging to the pod.
         More info: https://kubernetes.io/docs/concepts/storage/volumes
    View Code

    标签操作说明

      任何k8s资源都可以打上标, 例如  pod  节点  service等

      标签选择器
           等值关系 =     ==       !=
           集合关系  key in|notin    (value1,value2)      !key 不存在此key

      许多资源支持内嵌字段
         matchLabels 直接给定键值
         matchExpressions 基于给定的表达式来定义使用的标签选择器 {key:"KEY",operator:"OPERATOR",values:[val1,val2,...]}

         操作符

            In, NotIn:              values字段的值为非空列表

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

       pod标签过滤器

    [root@k8s-master ~]# kubectl label pods pod-demo release=canary
    pod/pod-demo labeled
    [root@k8s-master ~]# kubectl get pods -l app --show-labels
    NAME       READY     STATUS    RESTARTS   AGE       LABELS
    pod-demo   2/2       Running   0          1m        app=myapp,release=canary,tier=frontend
    
    [root@k8s-master ~]# kubectl label pods pod-demo release=canary
    pod/pod-demo labeled
    [root@k8s-master ~]# kubectl get pods -l app --show-labels
    NAME       READY     STATUS    RESTARTS   AGE       LABELS
    pod-demo   2/2       Running   0          1m        app=myapp,release=canary,tier=frontend
    
    [root@k8s-master ~]# kubectl get pods --show-labels
    NAME                          READY     STATUS    RESTARTS   AGE       LABELS
    client                        1/1       Running   0          1d        run=client
    myapp-74c94dcb8c-dp9t4        1/1       Running   0          4h        pod-template-hash=3075087647,run=myapp
    myapp-74c94dcb8c-jplgj        1/1       Running   0          4h        pod-template-hash=3075087647,run=myapp
    myapp-74c94dcb8c-mjjpw        1/1       Running   0          1d        pod-template-hash=3075087647,run=myapp
    nginx-deploy-5b595999-d7rpg   1/1       Running   0          228d      pod-template-hash=16151555,run=nginx-deploy
    nginx-deploy-5b595999-xkzqz   1/1       Running   0          4h        pod-template-hash=16151555,run=nginx-deploy
    pod-demo                      2/2       Running   0          6m        app=myapp,release=canary,tier=frontend
    
    
    [root@k8s-master ~]# kubectl get pods -l release
    NAME       READY     STATUS    RESTARTS   AGE
    pod-demo   2/2       Running   0          4m
    [root@k8s-master ~]# kubectl get pods -l release,app
    NAME       READY     STATUS    RESTARTS   AGE
    pod-demo   2/2       Running   0          4m
    [root@k8s-master ~]# ^C
    [root@k8s-master ~]# kubectl get pods -l release==canary
    NAME       READY     STATUS    RESTARTS   AGE
    pod-demo   2/2       Running   0          6m
    View Code

      添加标签 

         kubectl   label    pods    pod-demo    release=canary

      查看标签列表信息

         kubectl  get  nodes   --show-labels

    实现创建的pod运行到指定的节点上      通过节点标签选择器nodeSelector     nodeName节点名称选择器

    [root@k8s-master ~]# kubectl get pods -o wide
    NAME   
    pod-demo                      2/2       Running   0          29m       10.244.2.16   node3
    pod-demo被随机分配到node3节点上 
    
    [root@k8s-master mainfests]# kubectl get nodes --show-labels
    NAME         STATUS    ROLES     AGE       VERSION   LABELS
    k8s-master   Ready     master    228d      v1.11.1   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=k8s-master,node-role.kubernetes.io/master=
    node2        Ready     <none>    228d      v1.11.1   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=node2
    node3        Ready     <none>    228d      v1.11.1   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=node3
    
    给node2添加一个独立的标签
    [root@k8s-master mainfests]# kubectl label nodes node2 disktype=ssd
    node/node2 labeled
    [root@k8s-master mainfests]# kubectl get nodes --show-labels
    NAME         STATUS    ROLES     AGE       VERSION   LABELS
    k8s-master   Ready     master    228d      v1.11.1   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=k8s-master,node-role.kubernetes.io/master=
    node2        Ready     <none>    228d      v1.11.1   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,disktype=ssd,kubernetes.io/hostname=node2
    node3        Ready     <none>    228d      v1.11.1   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=node3
    
    
    [root@k8s-master mainfests]# vi pod-demo.yml 
    
    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-demo
      namespace: default
      labels:
        app: myapp
        tier: frontend
    spec:
      containers:
      - name: myapp
        image: ikubernetes/myapp:v1
      - name: busybox
        image: busybox:latest
        command:
        - "/bin/sh"
        - "-c"
        - "sleep 50000"
      nodeSelector:
        disktype: ssd
    
    [root@k8s-master mainfests]# kubectl delete -f pod-demo.yml 
    pod "pod-demo" deleted
    [root@k8s-master mainfests]# kubectl create -f pod-demo.yml 
    pod/pod-demo created
    
    
    [root@node2 ~]# docker ps
    CONTAINER ID        IMAGE                                                                             COMMAND                  CREATED             STATUS              PORTS               NAMES
    87df5370d6d2        busybox@sha256:4b6ad3a68d34da29bf7c8ccb5d355ba8b4babcad1f99798204e7abb43e54ee3d   "/bin/sh -c 'sleep..."   15 seconds ago      Up 14 seconds                           k8s_busybox_pod-demo_default_cd77d89a-7bd4-11e9-9c03-000c2927f194_0
    9f1838fa3793        d4a5e0eaa84f                                                                      "nginx -g 'daemon ..."   28 seconds ago      Up 27 seconds                           k8s_myapp_pod-demo_default_cd77d89a-7bd4-11e9-9c03-000c2927f194_0
    View Code
  • 相关阅读:
    Script:Generate A DDL Script For A Table
    如何在windows vista/2008/7中 安装Oracle OMS 即Grid Control
    Sqlserver2005迁移至Oracle系列之五:角色、用户、及权限
    Mysql:命令选项、配置选项、(全局、会话)系统变量、状态变量:SQL模式
    Mysql:命令选项、配置选项、(全局、会话)系统变量、状态变量:如何使用系统变量?
    Mysql:临时表、表变量
    Sqlserver2005迁移至Oracle系列之四:在Oracle中创建位或运算函数bitor
    flex 图片旋转
    基于模板和XML在BS结构应用中生成word文件
    操作图片文件写入word
  • 原文地址:https://www.cnblogs.com/yxh168/p/10898379.html
Copyright © 2011-2022 走看看