kubernetes yml配置文档

9 篇文章 2 订阅
9 篇文章 2 订阅

ㅤㅤㅤ
ㅤㅤㅤ
ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ“你以后想成为什么样的人?”“什么意思,难道我以后就不能成为我自己了吗?”—《阿甘正传》
ㅤㅤㅤ
ㅤㅤㅤㅤㅤㅤㅤㅤㅤ
在这里插入图片描述

Deployment
apiVersion: apps/v1    				#api版本
kind: Deployment 					#想要创建的对象类别
metadata:							
  name: nginx-deployment			#创建的对象名称
spec:								#对象规约
  replicas:1						#副本数
  selector:							#标签选择器
    matchLables:					#用于定义一组标签
      tier:frontend				    #架构标签
    matchExpressions:				#用于定义一组基于集合的筛选条件,可用的条件运算符包括In、 NotIn、 Exists和DoesNotExist。
      - {key: tier, operator: In, values: [frontend]}
    template:                       #开始定义pod
      metadata:                     
        labels:                     #定义pod的label
          app: app-demo             #pod标签
          tier: frontend            #架构标签
    spec:                           #指定该pod的资源内容,和对象规约
      containers:                   #业务容器配置
      - name: tomcat-demo           #容器名称
        image: tomcat               #镜像地址
        imagePullPolicy: ifNotPressent  #镜像加载方式,always:每次都查 Never:每次都不查不管本地是否有 ifNotPressent:如果本地有就不查,没有就去拉取
        ports:
        - containerPort: 8080       #容器对外开放端口
Pod
apiVersion: v1                  #必选,版本号,例如v1
kind: Pod                       #必选,Pod
metadata:                       #必选,元数据
  name: string                  #必选,Pod名称
  namespace: string             #必选,Pod所属的命名空间
  labels:                       #自定义标签
    - name: string              #自定义标签名字
  annotations:                  #自定义注释列表
    - name: string
spec:                           #必选,Pod中容器的详细定义
  containers:                   #必选,Pod中容器列表
  - name: string                #必选,容器名称
    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表示一旦不管以何种方式终止运行,kubelet都将重启,OnFailure表示只有Pod以非0退出码退出才重启,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
Service
apiVersion: v1   #kubernetesAPI版本
kind: Service    #想要创建的对象类别
metadata:        #帮助唯一性标识对象的一些数据
  name: myapp    #创建的对象名称
  namespace: default  #创建对象所在的命名空间
spec:                 #对象规约
  type: ClusterIP     #服务暴露类型,一般有ClusterIp,Nodeport,loadBlannce
  selector:           #标签选择器		
    app: mysql        #查找与之匹配的pod标签
    release: stabel
  ports:
  - name: mysql          #端口名称
    port: 3306           #service 暴露在 cluster ip上的端口
    targetPort: 3306     #targetPort 是 pod 上的端口
    nodePort: 33066      #暴露在集群物理节点上 node 的端口 
statefulset
apiVersion: apps/v1beta1								#创建该对象所使用的kubernetes API版本
kind: StatefulSet										#想要创建的对象类别
metadata:												#帮助唯一性标识对象的一些数据
  name: showdoce										#想要创建的对象名字,同一个namespace中必须唯一
  namespace: default									#想要创建的对象所在的命名空间
  labels:												#想要创建的对象的标签,statefulset lables
    app: showdoc
spce:													#对象规约,指定资源的内容
  serviceName: showdoc									#对象名称
  replicas: 1											#副本数
  template: 											#这里开始定义pod
    metadata:											#定义pod的label
	  labels:
	    app: showdoc
	spec:												#指定该资源内容
	  terminationGracePeriodSeconds: 180 	
	  imagePullSecrets:									设置远程镜像仓库登录的账号密码
      - name: registry-pass								#调用secrets中创建的账号和密码
	  containers:										#业务容器
      - name: showdoc									#容器的名字
        image: [容器镜像]								#容器使用的镜像地址
        imagePullPolicy: IfNotPresent 					#同上initcontainers
        env:											#环境变量
        - name: MYSQL_ROOT_PASSWORD						#通过环境变量设置mysql_root的账户和密码
          valueFrom:
            secretKeyRef:								#同样调用secret来设置mysql的初始账户和密码
              name: mysql-pass
              key: password
        ports:
        - containerPort:80								#容器对外开放的端口
          name: port									#端口名字
        volumeMounts:									#挂载持久存储卷
        - name:db										#挂载设备名字,与volume的name对应
		  mountPath: /var/lib/mysql				   	 	#挂载到容器的/var/www/html路径下
  volumeClaimTemplates:									#存储卷申请模板,创建PVC,指定pvc名称大小,将自动创建pvc,且pvc必须由存储类供应
  - metadata:
      name: db											#定义一个挂在设备名字
    spec:
      accessModes: ["ReadWriteMany"]					#挂载存储的默写模式
	  storageClassName: nfs-mysql						#存储类名字"命名空间"
	  resources:										#存储资源
        requests:
	      storage: 50Gi									#存储资源空间大小

Headless Service:用来定义Pod网络标识( DNS domain);
volumeClaimTemplates :存储卷申请模板,创建PVC,指定pvc名称大小,将自动创建pvc,且pvc必须由存储类供应;
StatefulSet :定义具体应用,名为Nginx,有三个Pod副本,并为每个Pod定义了一个域名部署statefulset。

为什么需要 headless service 无头服务?
在用Deployment时,每一个Pod名称是没有顺序的,是随机字符串,因此是Pod名称是无序的,但是在statefulset中要求必须是有序 ,每一个pod不能被随意取代,pod重建后pod名称还是一样的。而pod IP是变化的,所以是以Pod名称来识别。pod名称是pod唯一性的标识符,必须持久稳定有效。这时候要用到无头服务,它可以给每个Pod一个唯一的名称 。

为什么需要volumeClaimTemplate?
对于有状态的副本集都会用到持久存储,对于分布式系统来讲,它的最大特点是数据是不一样的,所以各个节点不能使用同一存储卷,每个节点有自已的专用存储,但是如果在Deployment中的Pod template里定义的存储卷,是所有副本集共用一个存储卷,数据是相同的,因为是基于模板来的 ,而statefulset中每个Pod都要自已的专有存储卷,所以statefulset的存储卷就不能再用Pod模板来创建了,于是statefulSet使用volumeClaimTemplate,称为卷申请模板,它会为每个Pod生成不同的pvc,并绑定pv,从而实现各pod有专用存储。这就是为什么要用volumeClaimTemplate的原因。

StatefulSet详解
kubectl explain sts.spec :主要字段解释
replicas :副本数
selector:那个pod是由自己管理的
serviceName:必须关联到一个无头服务商
template:定义pod模板(其中定义关联那个存储卷)
volumeClaimTemplates :生成PVC

部署一个statefulset服务
本教程假设你的集群被配置为动态的提供 PersistentVolume,动态PV参考ks8的数据管理—动态配置StorageClass;如果没有这样配置,在开始本教程之前,你需要手动准备存储卷。
如果集群中没有StorageClass的动态供应PVC的机制,也可以提前手动创建多个PV、PVC,手动创建的PVC名称必须符合之后创建的StatefulSet命名规则:(volumeClaimTemplates.name)-(pod_name)

ReplicaSet
apiVersion: extensions/v1beta1      #kubernetesAPI版本
kind: ReplicaSet                    #想要创建的资源对象类别
metadata:                           #帮助唯一性标识对象的一些数据
  name: mysql                       #对象名称
spec:                               #对象规约
  replicas: 1                       #副本数
  selector:                         #标签选择器
    app: mysql                      #标签名称
  template:                         #下面是Pod的定义
    metadata:                         
      labels:                       #pod标签
        app: mysql
    spec:                           #pod对象规约
      containers:                   
      - name: mysql                 #pod名称
        image: mysql                #pod镜像
        env:                        #环境变量
        - name: MYSQL_ROOT_PASSWORD #环境变量名称
          value: "123456"           #环境变量的值
        ports:
        - containerPort: 3306       #容器对外开放端口号,也就是容器监听端口号
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

matchLabels用于定义一组Label, 与直接写在Selector中的作用相
同;
matchExpressions用于定义一组基于集合的筛选条件, 可用的条件
运算符包括In、 NotIn、 Exists和DoesNotExist。
如果同时设置了matchLabels和matchExpressions, 则两组条件为
AND关系, 即需要同时满足所有条件才能完成Selector的筛选。

完整配置
apiVersion: v1       #必选,版本号,例如v1
kind: Pod       #必选,Pod
metadata:       #必选,元数据
  name: string       #必选,Pod名称
  namespace: string    #必选,Pod所属的命名空间
  labels:      #自定义标签
    - name: string     #自定义标签名字
  annotations:       #自定义注释列表
    - name: string
spec:         #必选,Pod中容器的详细定义
  containers:      #必选,Pod中容器列表
  - name: string     #必选,容器名称
    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表示一旦不管以何种方式终止运行,kubelet都将重启,OnFailure表示只有Pod以非0退出码退出才重启,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
yaml模板
apiVersion: v1
kind: Service
metadata:
  name: config
  namespaces: 
  labels:
    app: config
spec:
  ports:
    - name: http
      port: 8888
      protocol: TCP
      targetPort: 8888
      nodePort: 8888
  selector:
    app: blog-nginx
    tier: frontend          #架构标签
  type: NodePort
  sessionAffinity: ClientIP #会话保持,来自于同一个客户端的请求调度到同一个pod中
---
apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: config
  labels:
    app: config
spec:
  replicas: 3
  selector:
    matchLabels:
      app: config
      tier: frontend
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: config
        tier: frontend
    spec:
      restartPolicy: Always
      containers:
      - name: config
        image: 192.168.66.177:5000/sqshq/piggymetrics-config:v01
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 8888
          protocol: TCP
          name: config
        readinessProbe:
          tcpSocket:
            port: 8888
          initialDelaySeconds: 10 #kubelet会在容器启动的10秒后发送第一个就绪探测,这回尝试连接config容器的8888端口,如果探测失败会被重新启动
          periodSeconds: 20 #kubelet 将继续每隔20秒运行一次检测
        livenessProbe:
          tcpSocket:
            port: 8888
          initialDelaySeconds: 20 #kubelet会在容器启动20秒后进行第一次存活探测
          periodSeconds: 30 #kubeleth会尝试连接config容器的8888端口.如果存活探测失败,这个容器会被重新启动
        resources:
          requests:
            cpu: 0.1  #cpu要求0.1个
            memory: 1Gi #内存要求1Gi
          limits:
            cpu: 2    #cpu限制最大限制为2个、
            memory:   #内存最大限制为2Gi
        env:                        #环境变量
        - name: MYSQL_SERVICE_HOST
          value: 'mysql'
        - name: MYSQL_SERVICE_PORT
          value: '3306'
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值