kubernetes资源对象

有一个RESTful的api,可用GET,PUT,DELETE,POST,等方式完成操作

相关命令,kubectl run,get,edit

相关资源如下:

   workload:Pod,ReplicaSet,Deployment,StatefulSet,DaemonSet,Job,Cronjob

   服务发现,均衡:Service,Ingress

  配置与存储: Volume,CSI

  ConfigMap,Secret

       DownwardAPI

 集群级资源

  namespace,Node,Role,ClusterRole,RoleBinding,ClusterRoleBinding

 元数据性资源

   HPA,PodTemplate,LimitRange

通过如下命令查看pod的定义语句:

kubectl get pod podname -o yaml

  主要字段:

  apiVersion: v1

  Kind: Pod

  metadata: --元数据定义

  spec: --规格配置,定义期望资源对象所处的状态

   spec.containers <[]OBject> -required-

    - name <string>

     image <string>
       imagePullPolicy <string> 三个选项: Always Never IfNoePresent
         标签是latest,则该选项必须是Always,创建后不可更改

     

  

  status: --对象当前的状态

 apiserver仅接受JSON格式的资源定义

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

kubectl api-versions -- 查看有那些api版本

 大部分资源的配置清单有5个大的资源:

   1)apiVersion: group/version

      $ kubectl api-versions

  2)kind: 资源类别

  3)metadata: 元数据
     name 对象名词
     namespace 所属名称空间
     lables  自建标签 ,最长253个字节
     annotations 资源注解

  每个资源的引用PATH


          selfLink: /api/v1/namespaces/default/pods/mysql-45wl2
   selflink格式: /api/(GROUP/VERSION)/namespaces/NAMESPACE/TYPE/NAME

4)spec :期望的状态,disired state

   查看定义  kubectl explain pod.spec.containers

  对于类型为OBject的对象,可持续在后面增加查询字段,该类对象的子集,没部分开始要以“-”开头,如
containers:
- name: myapp
image: mysql:v1.7
5)status: 当前状态
  

 

写第一个pod  

vi fist-ood.yaml

 apiVersion: v1Kind: Pod

meatdata:
   name: pod-demo
   namespace:default
   labels:
     app: myapp
     tier: frontend
spec:
  containers:
  - name: myapp
    image: tomcat:latest
imagePullPolicy: IfNotPresent     
ports:     
- name: http
containerPort: 80
protocol: TCP
  - name: https
containerPort: 443
protocol: TCP
- name: busybox
    image: busybox:latest
    command:
    - "/bin/sh"
    - "-c"
    - "sleep 3600"

登陆进去查看容器日志:

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

资源配置清单:

   自主式pod资源

   资源的清单格式:

             一级字段: apiVersion(group/version) ,分为alpha,v1beta1,v1beta2,v1,v2等版本

                                kind,分为pod

           metadata, 内容name,namespace,labels,annotaions

                spec,内容包括必选项containers,(name, image,imagePullPolicy)

           status,当前状态,只读的          

  为容器设置启动时要执行的命令和参数: command   args

如果要覆盖默认的 Entrypoint 与 Cmd,需要遵循如下规则:

  • 如果在容器配置中没有设置 command 或者 args,那么将使用 Docker 镜像自带的命令及其入参。

  • 如果在容器配置中只设置了 command 但是没有设置 args,那么容器启动时只会执行该命令,Docker 镜像中自带的命令及其入参会被忽略。

  • 如果在容器配置中只设置了 args,那么 Docker 镜像中自带的命令会使用该新入参作为其执行时的入参。

  • 如果在容器配置中同时设置了 commandargs,那么 Docker 镜像中自带的命令及其入参会被忽略。容器启动时只会执行配置中设置的命令,并使用配置中设置的入参作为命令的入参。

链接地址:https://kubernetes.io/zh/docs/tasks/inject-data-application/define-command-argument-container/

  标签:

     key  values的长度为63

             key: 只能使用  字母,数字,_,-,.  5类字符,且只能以字母或数字开头和结尾,中间不限制

             value: 可以为空  

相关命令:

kubectl get pods --show-labels     #查看有标签的pod

kubectl get pods -L   app                   #查看有具体某个值的标签的pod的值

kubectl get pods -L app,run        #现实多个标签的值

kubectl label  pods pod-demo release=product  # 为具体pod打个标签

kubectl get pods -l app --show-labels  #查看所打出的标签

如果需要再次修改标签,需要增加参数--overwrite

kubectl label  pods pod-demo release=stable --overwrite # 再次修改标签

标签选择器:

    等值关系:使用=,==,!=

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

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

    集合关系:

     KEY in  (VALUE1,VALUE2,VALUE3,......)  ###   kubectl get pods -l 'release in (stable,product)'

     KEY not in (VALUE1,VALUE2,......)

     !KEY  # 不存在此键

   标签选择器内嵌字段匹配:

    matchLabels: 直接给定键值,

    matchExpressions: 基于给定的表达式来定义使用标签表达式,[ key:"KEY",operator:"OPERATOR",values:VAL1,VAL2,...]

          操作符号: in  notin :值必须为非空列表

        exsits  notexsits:values必须为空列表

 nodeSelector <map[string] string>  

          节点标签选择器

nodeName 制定pod运行在该node上

annotations 资源注解,著名是谁编写的

常见pod状态:

   pending

   running

  faild

  Succeded

  unknown

可以在pod启动后做一个post start的action,在容器运行过程中执行2个检查:liveness probe  and  readiness probe  ;可以在容器关闭前做pre stop的action

pod生命周期中的重要行为:

    容器初始化

    容器探测:

      liveness

  readiness

     liftcycle

 restartPolicy:

    Always   ,OnFailuser,Never   (Default  to Always )

 ExecAction: exec

 TCPSocketAction: tcpSocket

  HTTPGetAction: httpGet

第一个Pod资源控制器:

 

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-deploy
  namespace: default
spec:
  replicas: 2
  selector:
    matchLabels:
       app: myapp
       release: canary
  template:
     metadata:
       labels:
         app: myapp
         release: canary
     spec:
        containers:
        - name: myapp
          image: tomcat
          ports:
          - name: http
            containerPort: 80

 pod控制器包括:

    ReplicationController:

    ReplicatSet

    Deployment

    Job

   Cronjob

   StatefulSet

   TPR: Third Party Resourcs, 1.2+,1.7

   CDR: Custom Defined Resources, 1.8+

 

 

 deploymeng相关管理命令:

    kubectl get deploy                # 查看deploy 信息

    kubectl get deploy -o wide   # 查看deploy的详细信息

   kubectl  rollout history   deployment my-app  #  查看指定deploy的历史版本信息

   kubectl rollout --help  # 查看回滚版本命令rollout的帮助信息

   kubectl patch --help  #查看以补丁方式更新deploy的帮助信息

   通过补丁的方式更新deploy

     kubectl patch deployment myapp-deploy -p '{"spec":{"replicas":3}}'   

  设置更新策略,使用到spec.strategy.rollingUpdate下面的两个参数maxSurge,maxUnavaliable

    kubectl patch deployment myapp-deploy -p '{"spec":{"strategy":{"rollingUpdate":{"maxSurge":1,"maxUnavalible":0}}}}'

  更改deploy的image

    kubectl set image deployment myapp-deploy myapp=tomcat:8.0 && kubectl rollout pause deployment myapp-deploy

  使用如下命令监视更新情况:

    kubectl get pods -l app=myapp -w       

    kubectl rollout status deployment myapp-deploy

   如下命令让更新继续

    kubectl rollout resume deployment myapp-deploy

  使用如下命令看更新后的版本

    kubectl get rs -o wide 

   关于回滚版本:

 查看可回滚的版本   

  kubectl rollout history deployment myapp-deploy

 回滚到第一个版本 

  kubectl rollout undo deployment myapp-deploy --to-revision=1

 

DaemonSet管理命令

    查看帮助信息  kubectl explain ds

     第一个DaemonSeapiVersion: apps/v1

kind: Deployment
metadata:
  name: redis
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: redis
      role: logstor
  template:
     metadata:
       labels:
         app: redis
         role: logstor
     spec:
       containers:
       - name: redis
         image: redis:4.0-alpine
         ports:
         - name: redis
           containerPort: 6379
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: myapp-ds
  namespace: default
spec:
  selector:
    matchLabels:
       app: busybox
       release: stable
  template:
     metadata:
       labels:
         app: busybox
         release: stable
     spec:
       containers:
       - name: busybox
         image: busybox
          env:
- name: REDIS_HOST
value: redis.defualt.svc.cluster.local - name: REDIS_LOG_DEVEL value: info

 

接下来用命令行发布服务:

 kubectl expose deployment redis --port=6379

进入redis 的pod查看,可以看到6379端口已经在运行和监听

kubectl exec -it redis-588694bf8c-p7xjn -- /bin/sh

/data # netstat -tnl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN
tcp 0 0 :::6379 :::* LISTEN

查看建造过程

 kubectl describe ds myapp-ds

更新daemonsets

  kubectl set image daemonsets myapp-ds  tomcat=tomcat:8.0

 

posted @ 2020-07-23 18:42  netma  阅读(166)  评论(0)    收藏  举报