美文网首页
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控制器基础

    快速创建一个pod 创建一个pod: 查看是否创建成功: 删除pod: 使用命令创建一个deploy k8s的资源...

  • K8S-pod控制器

    Controller Manager 由 kube-controller-manager 和 cloud-cont...

  • 2.控制器、表单验证

    基础控制器

  • k8s-Pod控制器之ReplicaSet

    Pod控制器之ReplicaSet 简介:说到ReplicaSet对象,得先说说ReplicationContro...

  • 5.2 GestureRecognizer---UI手势

    GestureRecognizer---UI手势 基础控制器 导航栏视图控制器, 根试图控制器 单击手势 双击手势...

  • 9月17日知识点记录

    一.Laravel控制器 基础控制器(组织请求处理逻辑) 通过路由来指定控制器行为:Route::get('use...

  • 父子控制器

    理论基础任何控制器都可以添加子控制器如果A(childVc)控制器的view添加到B(ViewController...

  • 经验分享|裸金属服务器部署

    一、简介 裸金属相关功能是由机房控制器、物理机控制器、IPMI控制器和noVNC控制器组成基础的自动化支持。 机房...

  • 喜报基础架构

    喜报基础架构 [图片上传失败...(image-849d87-1522134151970)] 基础控制器 Root...

  • Laravel artisan 命令

    Controller 表示在Controller/Cont目录下面创建控制器 表示创建控制器的同时创建几个基础方法...

网友评论

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

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