美文网首页
k8s-Pod控制器基础

k8s-Pod控制器基础

作者: 会倒立的香飘飘 | 来源:发表于2021-02-28 10:19 被阅读0次

    快速创建一个pod

    [root@k8s-master ~]# kubectl run --help
    Create and run a particular image in a pod.
    Examples:
      # Start a nginx pod.
      kubectl run nginx --image=nginx
     
      # Start a hazelcast pod and let the container expose port 5701.
      kubectl run hazelcast --image=hazelcast/hazelcast --port=5701
      
      # Start a hazelcast pod and set environment variables "DNS_DOMAIN=cluster" and "POD_NAMESPACE=default" in the
    container.
      kubectl run hazelcast --image=hazelcast/hazelcast --env="DNS_DOMAIN=cluster" --env="POD_NAMESPACE=default"
      
      # Start a hazelcast pod and set labels "app=hazelcast" and "env=prod" in the container.
      kubectl run hazelcast --image=hazelcast/hazelcast --labels="app=hazelcast,env=prod"
      
      # Dry run. Print the corresponding API objects without creating them.
      kubectl run nginx --image=nginx --dry-run=client
      
      # Start a nginx pod, but overload the spec with a partial set of values parsed from JSON.
      kubectl run nginx --image=nginx --overrides='{ "apiVersion": "v1", "spec": { ... } }'
      
      # Start a busybox pod and keep it in the foreground, don't restart it if it exits.
      kubectl run -i -t busybox --image=busybox --restart=Never
      
      # Start the nginx pod using the default command, but use custom arguments (arg1 .. argN) for that command.
      kubectl run nginx --image=nginx -- <arg1> <arg2> ... <argN>
      
      # Start the nginx pod using a different command and custom arguments.
      kubectl run nginx --image=nginx --command -- <cmd> <arg1> ... <argN>
    

    创建一个pod:

    kubectl run nginx-deploy --image=nginx:1.14-alpine ---port=80
    

    查看是否创建成功:

    [root@k8s-master ~]# kubectl get pods -o wide
    NAME           READY   STATUS    RESTARTS   AGE    IP            NODE        NOMINATED NODE   READINESS GATES
    nginx-deploy   1/1     Running   0          100s   10.244.2.21   k8s-node2   <none>           <none>
    

    删除pod:

    kubectl delete pod nginx-deploy 
    

    使用命令创建一个deploy

    kubectl create deploy nginx-deploy --image=nginx:1.14-alpine
    

    k8s的资源类别:

    资源类型:
    workload:pod,ReplicaSet,deployment,statefulSet,DaemonSet,Joob,CronJob
    服务发现及均衡:
    Services,Ingress
    配置与存储:
    Volume CSI
    特殊类型存储卷: configmap,secret,DownwardAPI
    集群级别资源:
    Namespace,Node,Role,ClusterRole,RoleBinding,ClusterRoleBinding
    元数据类型资源:
    HPA,PodTemplate,LimitRange
    创建资源的方法:
    apiserver仅接收JSON格式的资源定义,如果用yaml格式提供的配置清单,apiserver可自动将其转为json格式,然后在提交,大部分资源的配置清单都有五个一级字段组成
    apiVersion:指明我们创建的资源是属于哪个api群组及其版本( kubectl api-versions查看)
    kind:资源类别 (标记打算创建一个什么资源,不能随意定义一般都是内键的)
    metadate:元数据(主要是提供一下几个字段)
    name:(在同一类别中这个那么必须是唯一的)
    namespace:(名称空间)
    labels:(标签)
    annotations:(注解)
    spec:(此字段是最重要的 ,定义用户期望的状态)
    status:当前状态,此字段是由kubernetes集群维护
    以上字段格式说明都可以在集群中查看:kubectl explain pods


    image.png

    比如想要查看metadata的二级字段怎么定义:kubectl explain pods.metadata
    labels <map[string]string> (像这种map类型的是映射,由键值组成的映射,是另外一种json格式的数组,不是一个列表是众多kv组成的数据)
    finalizers <[]string> (这种前面有中括号的一般都是字符串列表,就是字符串类型的数组)
    ownerReferences <[]Object>(这种就是对象列表里面可以嵌套很多三级字段)
    containers <[]Object> -required- (像这种对象列表后面有required是必选字段)

    [root@k8s-master daem]# cat pod.yaml 
    apiVersion: v1
    kind: Pod
    metadata:
      name: myapp
      namespace: default
      labels:
        app: myapp 
        tier: frnotend
    spec:
      containers:
      - name: myapp
        image: ikubernetes/myapp:v1
        imagePullPolicy: IfNotPresent
      - name: busybox
        image: busybox:latest
        command:
        - "/bin/sh"
        - "-c"
        - "sleep 3600"
    

    查看状态

    [root@k8s-master daem]# kubectl get pods
    NAME    READY   STATUS    RESTARTS   AGE
    myapp   2/2     Running   0          13m
    

    定义pod时在spec中的常用字段

    spec.containers

    • name <string> -required- (pod内嵌的容器名称)
      image <string> (启动内嵌容器使用的镜像仓库地址,)
      imagePullPolicy <string>
      Always (总是到仓库中去下载,本地仓库中有或者没有都去仓库中下载)
      Never (如果有镜像就用,没有也不去下载,需要用户手动去下载镜像)
      IfNotPresent (如果本地有镜像就使用没有就去下载)
      如果你的镜像标签是latest的默认就是Always,如果是其他的就使用IfNotPresent,一旦镜像创建过后这个字段的值是不能更改的,
      ports <[]Object> (定义容器内部的要暴露端口号,协议)
      • name <string> (名称)
        containerPort <integer> -required- (容器的端口)
        protocol <string> (协议,不指定默认是TCP)
        修改镜像中的默认应用:
        command <[]string>
        args <[]string>


        image.png

        如果要覆盖默认的 Entrypoint 与 Cmd,需要遵循如下规则:
        如果在容器配置中没有设置 command 或者 args,那么将使用 Docker 镜像自带的命令及其参数。
        如果在容器配置中只设置了 command 但是没有设置 args,那么容器启动时只会执行该命令, Docker 镜像中自带的命令及其参数会被忽略。
        如果在容器配置中只设置了 args,那么 Docker 镜像中自带的命令会使用该新参数作为其执行时的参数。
        如果在容器配置中同时设置了 command 与 args,那么 Docker 镜像中自带的命令及其参数会被忽略。 容器启动时只会执行配置中设置的命令,并使用配置中设置的参数作为命令的参数。
        示例:


        image.png

    Dod中的常用字段

    apiVersion: v1                    #必选,版本号,例如v1,版本号必须可以用 kubectl api-versions 查询到 .
    kind: Pod                      #必选,Pod
    metadata:                      #必选,元数据
      name: string                    #必选,Pod名称
      namespace: string               #必选,Pod所属的命名空间,默认为"default"
      labels:                       #自定义标签
        - name: string                 #自定义标签名字
      annotations:                           #自定义注释列表
        - name: string
    spec:                            #必选,Pod中容器的详细定义
      containers:                       #必选,Pod中容器列表
      - name: string                        #必选,容器名称,需符合RFC 1035规范
        image: string                       #必选,容器的镜像名称
        imagePullPolicy: [ Always|Never|IfNotPresent ]  #获取镜像的策略 Alawys表示总是到仓库中去下载,本地仓库中有或者没有都去仓库中下载 IfNotPresent表示如果本地有镜像就使用没有就去下载,Nerver如果有镜像就用,没有也不去下载,需要用户手动去下载镜像
        command: [string]               #容器的启动命令列表,如不指定,使用打包时使用的启动命令
        args: [string]                     #容器的启动命令参数列表
        workingDir: string                     #容器的工作目录
        volumeMounts:                 #挂载到容器内部的存储卷配置
        - name: string                 #引用pod定义的共享存储卷的名称,需用volumes[]部分定义的的卷名
          mountPath: string                 #存储卷在容器内mount的绝对路径,应少于512字符
          readOnly: boolean                 #是否为只读模式
        ports:                      #需要暴露的端口库号列表
        - name: string                 #端口的名称
          containerPort: int                #容器需要监听的端口号
          hostPort: int                    #容器所在主机需要监听的端口号,默认与Container相同
          protocol: string                  #端口协议,支持TCP和UDP,默认TCP
        env:                          #容器运行前需设置的环境变量列表
        - name: string                    #环境变量名称
          value: string                   #环境变量的值
        resources:                          #资源限制和请求的设置
          limits:                       #资源限制的设置
            cpu: string                   #Cpu的限制,单位为core数,将用于docker run --cpu-shares参数
            memory: string                  #内存限制,单位可以为Mib/Gib,将用于docker run --memory参数
          requests:                         #资源请求的设置
            cpu: string                   #Cpu请求,容器启动的初始可用数量
            memory: string                    #内存请求,容器启动的初始可用数量
        livenessProbe:                    #对Pod内各容器健康检查的设置,当探测无响应几次后将自动重启该容器,检查方法有exec、httpGet和tcpSocket,对一个容器只需设置其中一种方法即可
          exec:                     #对Pod容器内检查方式设置为exec方式
            command: [string]               #exec方式需要制定的命令或脚本
          httpGet:                    #对Pod内个容器健康检查方法设置为HttpGet,需要制定Path、port
            path: string
            port: number
            host: string
            scheme: string
            HttpHeaders:
            - name: string
              value: string
          tcpSocket:            #对Pod内个容器健康检查方式设置为tcpSocket方式
             port: number
           initialDelaySeconds: 0       #容器启动完成后首次探测的时间,单位为秒
           timeoutSeconds: 0          #对容器健康检查探测等待响应的超时时间,单位秒,默认1秒
           periodSeconds: 0           #对容器监控检查的定期探测时间设置,单位秒,默认10秒一次
           successThreshold: 0
           failureThreshold: 0
           securityContext:
             privileged: false
        restartPolicy: [Always | Never | OnFailure] #Pod的重启策略,Always必须重启,总是重启,OnFailure表示只有状态为错误时才重启,Nerver表示不再重启该Pod
        nodeSelector: obeject         #设置NodeSelector表示将该Pod调度到包含这个label的node上,以key:value的格式指定
        imagePullSecrets:         #Pull镜像时使用的secret名称,以key:secretkey格式指定
        - name: string
        hostNetwork: false            #是否使用主机网络模式,默认为false,如果设置为true,表示使用宿主机网络
        volumes:                  #在该pod上定义共享存储卷列表
        - name: string              #共享存储卷名称 (volumes类型有很多种)
          emptyDir: {}              #类型为emtyDir的存储卷,与Pod同生命周期的一个临时目录。为空值
          hostPath: string            #类型为hostPath的存储卷,表示挂载Pod所在宿主机的目录
            path: string                #Pod所在宿主机的目录,将被用于同期中mount的目录
          secret:                 #类型为secret的存储卷,挂载集群与定义的secre对象到容器内部
            scretname: string  
            items:     
            - key: string
              path: string
          configMap:                      #类型为configMap的存储卷,挂载预定义的configMap对象到容器内部
            name: string
            items:
            - key: string
              path: string
    

    相关文章

      网友评论

          本文标题:k8s-Pod控制器基础

          本文链接:https://www.haomeiwen.com/subject/nojhfltx.html