第五章 Kubernetes资源清单定义入门

常用Kubernetes对象及其分组

深入理解Kubernetes对象的通用设计:

  • TypeMeta:
    • G(roup)
    • K(ind)
    • V(ersion)

大部分资源清单配置:

  • apiVersion:group/version
    • 可以通过 kubectl api-versions查看
    • kind:资源类别
  • metadata:元数据
    • name
    • namespace
    • labels&annotations
    • Finalizers
    • ResourceVersion
    • SelftLink
  • spec: 期望的状态,disired state
  • status:当前状态,current state,本字段由k8s维护

以上定义格式都可以通过如下命令获取帮助

# kubectl explain pod.metadata....

Pod资源:

  Pod运行在节点(Node)上,每个Pod里运行一个特殊的被称为Pause的容器,其他容器则为业务容器,这些业务容器共享Pause容器的网络栈和Volume挂载卷,因为他们之间的通信和数据交换更为高效,在设计时我们可以充分利用这一特性将一组密切相关的服务进程放入同一个Pod中。

Label(标签):

  一个资源可以定义任意数量的Label,同一个Label也可以被添加到任意数量的资源对象上去。

  一些常用的Label标签示例如下: 

  • 版本标签:"release":"stable","release":"canary"
  • 环境标签:"environment":"dev","environment":"qa","environment":"production"
  • 架构标签:“tier”:“frontend”,“tier”:"backend","tier":"middleware"
  • 分区标签:"partition":"customerA","partition":"customerB"
  • 质量管控标签:"track":"daily","track":"weekly"

 Label Selector的表达式分为两种:一种基于等式的和一种基于集合的,具体例子如下:

  等式标签

  • name=redis-slave:匹配所有具有标签name=redis-slave的资源对象。
  • env!=production:匹配所有不具有标签env=production的资源对象,

  集合标签

  • name in (redis-master,redis-slave):匹配所有具有标签name=redis-master或者name=redis-slave的资源对象
  • name not in (php-frontend):匹配所有不具有标签name=php-frontend的资源对象。
selector: 
matchLabels : app: myweb
matchExpressions:
- {key: tier,operator : In, values: [frontend)} - {key: environment , operator : Notin , values: [dev)}

  matchLabels用于定义一组Label,与直接写在Selector中作用相同:matchExpressions用于定义一组基于集合的筛选条件,可用的条件运算符包括:In、NotIn、Exists和DoesNotExist。

kubectl操作示例

  • 创建资源对象

  根据yaml配置文件一次性创建service和rc;

# kubectl create -f my-service.yaml -f my-rc.yaml

  根据<directory>目录下所有.yaml、.yml、.json文件的定义进行创建操作;

# kubectl create -f <directory>
  • 查看资源对象

  查看所有Pod列表

# kubectl get pods

  查看rc和service列表

# kubectl get rc,service
  • 描述资源对象

  显示Node的详细信息

# kubectl describe nodes <node-name>

  显示Pod的详细信息

# kubectl describe pods <pod-name>
  • 删除资源对象

  基于pod.yaml定义的名称删除Pod

# kubectl delete -f pod.yaml

  删除所有包含某个label的Pod和service

# kubectl delete pods,services -l name=<label-name>

  删除所有pod

# kubectl delete pods --all
  • 执行容器的命令

  执行pod的date命令,默认使用Pod中的第1个容器执行

# kubectl exec <pod-name> date

  指定Pod中某个容器执行date命令

# kubectl exec <pod-name> -c <container-name> date

  通过bash获得Pod中某个容器的TTY,相当于登陆容器

# kubectl exec -it <pod-name> -c <container-name> /bin/bash
  • 查看容器的日志

  查看容器输出到stdout的日志

# kubectl logs <pod-name>

  跟踪查看容器的日志,相当于tail -f命令的结果

# kubectl logs -f <pod-name> -c <container-name>

Pod定义详解

yaml 格式的 Pod 定义文件的完整内容如下:
apiV ersion : vl 
kind: Pod 
metadata :
  name: string 
  namespace: string 
  labels:
    - name: string 
  annotations:
    - name: string
spec:
  containers :
  - name: string
    image: string
    imagePullPolicy: [Always I Never I IfNotPresent] 
    command : [string]
    args: [string]
    workingDir: string
    volumeMounts:
    - name: string 
      mountPath: string 
      readOnly: boolean
  ports:
  - name: string
  containerPort: int 
  hostPort : int 
  protocol : string
  env:
  - name: string
    value : string 
    resources :
      limits:
        cpu: string 
        memory: string
      requests :
        cpu: string 
        memory: string
  livenessProbe:
    exec:
      command: [string]
    httpGet:
      path: string 
      port : number 
      host: string 
      scheme: string 
      httpHeaders:
      - name: string
        value: string 
    tcpSocket:
      port : number 
    initialDelaySeconds: 0 
    timeoutSeconds: 0 
    periodSeconds: 0 
    successThreshold: 0
    failureThreshold: 0 
  securityContext :
    privileged: false
restartPolicy: [Always I Never I OnFailure] 
nodeSelector: object
imagePullSecrets :
- name: string
hostNetwork: false
volumes:
- name: string
  emptyDir: {} 
  hostPath:
    path: string 
  secret:
    secretName: string
    items:
    - key: string
      path: string
  configMap:
  name: string 
  items:
  - key: string
    path: string

 

 

 

 

 

 

 

 

 

 

posted @ 2022-11-21 18:44  摩天居士-谢烟客  阅读(88)  评论(0编辑  收藏  举报