k8s学习笔记(2)

121 阅读5分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

Kubernetes 中的资源

  • 工作负载型资源 :
    • Pod
    • ReplicaSet
    • Deployment
    • StatefulSet
    • DaemonSet
    • Job
    • Cronjob
    • ...
  • 服务发现及均衡
    • Service
    • Ingress
    • ...
  • 配置与存储
    • Volume
    • ConfigMap
    • Secret
    • ...
  • 集群级资源
    • Namespace
    • Node
    • Role
    • RoleBinding
    • ...
  • 元数据型资源
    • HPA
    • PodTemplate
    • LimitRange
    • ...

kubectl命令

kubectl是api server的客户端程序

  • 查看节点详细信息 kubectl describe node k8s-node1

  • 创建pod kubectl run nginx-deploy --image=nginx --port=80 --replicas=1 nginx-deploy名称 --image=nginx指定镜像 --port=80暴露端口 --replicas=1创建副本数

  • 查看pod信息 kubectl describe pods nginx-deploy-98c9d6c66-tvsqc 详细信息 kubectl get pods -o wide 获取pods运行在哪个节点上 kubectl get pods -n kube-system 查看kube-system名称空间的pods kubectl logs nginx-deploy-98c9d6c66-tvsqc 查看pod运行日志

  • 删除pod kubectl delete pods nginx-deploy-98c9d6c66-tvsqc 再执行kubectl get pods会发现新的nginx-deploy生成了,pod管理确保pod副本数量严格符合用户定义,即上述--replicas

  • 为pod资源创建一个service kubectl expose deployment nginx-deploy --name=nginx --port=80 --target-port=80 --protocol=TCP 为pod提供固定访问端点

  • 查看service kubectl get svc

  • 创建pod客户端 kubectl run client --image=busybox --replicas=1 -it --restart=Never 客户端内可直接使用第5步定义的名称访问pod:通过label-selector

  • 动态扩缩容 kubectl scale --replicas=5 deployment nginx-deploy

  • 更新镜像 kubectl set image deployment nginx-deploy nginx-deploy=nginx:1.15

  • 回滚 kubectl rollout undo deployment nginx-deploy

  • 修改service属性 kubectl edit svc nginxtype修改为NodePort。 查看service kubectl get svc 可以看到nginx的ports多了个80外的端口 即可在集群外部访问节点ip:新的port

  • 查看pod的yaml信息 kubectl get pod nginx-deploy-68875965fc-dw22b -o yaml

  • 查看创建pod的yaml字段 kubectl explain pods 内嵌字段使用kubectl explain pods.metadata

  • 通过yaml文件创建资源 kubectl create -f pod-demo.yaml

  • 通过yaml文件删除资源 kubectl delete -f pod-demo.yaml

  • 给资源打标签 kubectl label pods pod-demo release=canary 如果是修改标签 kubectl label pods pod-demo release=stable --overwrite

  • 选择标签

    • kubectl get pods -l
      • 等值关系:
        • =, kubectl get pods -l release=stable 选择所有有release=stable标签的资源
        • ==, 同上
          • !=, kubectl get pods -l release!=stable 选择所有release!=stable标签的资源,包括没有release标签的资源
      • 集合关系:
        • key in (value1, value2, ...) 选择所有key=value1或key=value2或...的资源
        • key notin(value1, value2, ...) 选择所有key!=value1且key!=value2且...的资源
        • key 选择所有有key标签的资源
        • !key 选择所有没有key标签的资源
  • 显示所有key标签的值

    kubectl get pods -L key

  • 通过文件对资源应用配置

    kubectl apply -f demo.yaml

    首次执行为创建

    多次执行为更新

  • 更新资源字段、打补丁

    kubectl patch deployment deploy-demo -p '{"spec":{"replicas":5}}'

img

yaml配置清单

创建资源的方法

apiserver 仅接收JSON格式的资源定义。 yaml 格式提供配置清单,apiserver可自动将其转换为json格式,然后再执行。

配置清单字段

使用kubectl explain TYPE命令获取各类型资源的字段

  • apiVersion api版本 group/version kubectl api-versions可获取

  • kind 资源类别

  • metadata 元数据

    • name 同一类别中name唯一

    • namespace 名称空间

    • labels 标签 key 字母、数字、、-、. value 可以为空,只能字母或数字开头及结尾,中间可使用字母、数字、、-、.

    • annotations注解

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

  • spec 期望目标状态, 不同资源类型的spec字段内容不尽相同

    • container 容器

      • name 容器名称

      • image 容器镜像

      • imagePullPolicy 拉取镜像策略 Always 总是自动拉取 Never 从不自动拉取(需要用户手动拉取) IfNotPresent 如果存在该镜像则不拉取

      • port 暴露端口

        • containerPort 需要暴露的容器端口
      • commandargs 修改镜像中的默认设置 command 容器的启动命令列表,相较于DockerFile的Entrypoint字段 args 容器的启动命令参数列表,相较于DockerFile的Cmd字段

        • 如果commandargs均不指定,则默认使用Docker镜像定义的EntrypointCmd
        • 指定了command没指定args,只运行command,忽略EntrypointCmd
        • 指定了args没指定command,只运行Entrypoint并使用args参数
        • 如果commandargs均指定,使用args参数运行command

        image-20200825091158807

      • livenessProbe存活性探测

        • exechttpGettcpSocket三种探针类型
        • failureThreshold 被认为失败的最少连续失败次数
        • initialDelaySeconds 容器启动后、探针初始化前的时间
        • periodSeconds 探针频率
        • successThreshold 被认为成功的最少连续成功次数
        • timeoutSeconds超时时间
      • readinessProbe就绪性探测

      • lifecycle 生命周期回调

        • postStart 容器创建后立刻执行,如果失败,容器将停止并根据重启策略重启容器。
        • preStop 结束前回调,执行于以下情况引起的容器终止
          • API 请求
          • 管理事件
            • 探测失败
            • 抢占
            • 资源争夺
            • ...
    • nodeSelector 节点标签选择器 key: value 运行在拥有key=value标签的节点上

    • nodeName 指定节点

    • selector 适用于kind=deployment的资源,把所有正在运行的,拥有给定标签的pod识别为被管理的对象。

      • matchLabels 直接给定键值
      • matchExpressions 基于表达式定义选择器。 {key:"KEY", operator:"OPERATOR", values:[val1, val2, ...]}operator为:
        • In, NotIn时,values字段非空
        • Exists, NotExists时,values字段为空
    • restartPolicy Pod内所有容器的重启策略

      • Always 总是重启
      • OnFailure 出错时重启
      • Never 从不重启
  • status 当前状态,无限向期望状态靠近,由kubernetes集群维护,用户不能定义