ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

|NO.Z.00123|——————————|CloudNative|——|KuberNetes&基础标签.V06|------------------------------------------

2022-03-30 12:03:39  阅读:166  来源: 互联网

标签:容器 V06 必选 kubernetes KuberNetes yaml nginx httpGet name




[CloudNative:KuberNetes&基础标签.V06]                                                               [Applications.KuberNetes][|DevOps|k8s基础|yaml文件详解|yaml实验示例|使用yaml部署容器|]








一、yaml概述:yaml文件详解
### --- 查看pod.yaml配置文件

[root@k8s-master01 ~]# vim pod.yaml
apiVersion: v1                              # 必选,API的版本号
kind: Pod                                   # 必选,类型Pod;开头是apiVersion和kind:若是写yaml文件,这两个是必不可少的;因为需要kind参数来区分你写入的是什么东西;apiVersion:来区分是属于哪个apiVersion下面的,
metadata:                                   # 必选,元数据//metadata:元数据,符合1035标准的,不能有大括号,不能有特殊字符,比如感叹号,带些字母,不能是数字开头的,-横线是支持的
  name: nginx                               # 必选,符合RFC 1035规范的Pod名称
  namespace: default                        # 可选,Pod所在的命名空间,不指定默认为default,可以使用-n 指定namespace 
  labels:                                   # 可选,标签选择器,一般用于过滤和区分Pod
    app: nginx
    role: frontend                          # 可以写多个
  annotations:                              # 可选,注释列表,可以写多个;添加注释信息。和annotations和labels的区别是什么,annotations是没有严格的格式,可以自己定义去写,而labels有严格的格式,
    app: nginx
spec:                                       # 必选,用于定义容器的详细信息;正式的声明这个Pod里面的配置。
  initContainers:                           # 初始化容器,在容器启动之前执行的一些初始化操作;启动在containers启动之前先执行的操作,比如创建文件夹用户,设置内核参数等可以使用它来操作。
  - command:                                # 一个横线相当于代表一个资源。相当于一个集合或者切片。
    - sh
    - -c
    - echo "I am InitContainer for init some configuration"
    image: busybox
    imagePullPolicy: IfNotPresent
    name: init-container
  containers:                               # 必选,容器列表;containers里面可以有多个容器,容器的名称都不一样。而且需要符合1035标准。
  - name: nginx                             # 必选,符合RFC 1035规范的容器名称
    image: nginx:latest                     # 必选,容器所用的镜像的地址;没有添加URL,说明是docker官方的镜像,一般都是我们自己的镜像。
    imagePullPolicy: Always                 # 可选,镜像拉取策略;拉取策略分类:IfNotPresent:如果宿主机有这个镜像,那就不要再拉取了。Always:总是为拉取,无论宿主机上有没有镜像,它都会拉取。Never:不管是否存在,都不拉去。一般最常用的是IfNotPresent和Always。
    command:                                # 可选,容器启动执行的命令;相当于:ENTRYPOINT,argument——>cmd    //若是没有,使nginx前台启动,容器里面的进程必须有一个前台进程。在做镜像的时候,可以打到容器里面,若是容器里面没有写,这个位置必须写。
    - nginx 
    - -g
    - "daemon off;"
    workingDir: /usr/share/nginx/html       # 可选,容器的工作目录;一般登入到容器后登入的目录是哪个目录,此环境下是定位到根目录下。可以配置也可以不配置。
    volumeMounts:                           # 可选,存储卷配置,可以配置多个;比如PV或者LVS。
    - name: webroot                         # 存储卷名称
      mountPath: /usr/share/nginx/html      # 挂载目录
      readOnly: true                        # 只读
    ports:                                  # 可选,容器需要暴露的端口号列表;可以配置多个,以斜线切分。
    - name: http                            # 端口名称
      containerPort: 80                     # 端口号
      protocol: TCP                         # 端口协议,默认TCP;支持的协议。
    env:                                    # 可选,环境变量配置列表
    - name: TZ                              # 变量名
      value: Asia/Shanghai                  # 变量的值          //定位时区
    - name: LANG
      value: en_US.utf8                     # 定位语言的。
    resources:                              # 可选,资源限制和资源请求限制;资源请求。
      limits:                               # 最大限制设置
        cpu: 1000m
        memory: 1024Mi
      requests:                             # 启动所需的资源
        cpu: 100m
        memory: 512Mi
~~~     # 健康检查:
~~~     怎么去判断我的容器时启动OK的,而且是正在接受流量的。
~~~     startuProbe是比较新的,1.16版本之后才引出来的概念

//    startupProbe:                         # 可选,检测容器内进程是否完成启动。注意三种检查方式同时只能使用一种。
//      httpGet:                            # httpGet检测方式,生产环境建议使用httpGet实现接口级健康检查,健康检查由应用程序提供。
//            path: /api/successStart       # 检查路径
//            port: 80
    readinessProbe:                         # 可选,健康检查。注意三种检查方式同时只能使用一种。
      httpGet:                              # httpGet检测方式,生产环境建议使用httpGet实现接口级健康检查,健康检查由应用程序提供。
            path: /                         # 检查路径
            port: 80                        # 监控端口
    livenessProbe:                          # 可选,健康检查
      //exec:                               # 执行容器命令检测方式
            //command: 
            //- cat
            //- /health
    //httpGet:                              # httpGet检测方式
    //   path: /_health                     # 检查路径
    //   port: 8080
    //   httpHeaders:                       # 检查的请求头
    //   - name: end-user
    //     value: Jason 
      tcpSocket:                            # 端口检测方式
            port: 80
      initialDelaySeconds: 60               # 初始化时间
      timeoutSeconds: 2                     # 超时时间
      periodSeconds: 5                      # 检测间隔
      successThreshold: 1                   # 检查成功为2次表示就绪
      failureThreshold: 2                   # 检测失败1次表示未就绪
    lifecycle:                              # 生命周期
      postStart:                            # 容器创建完成后执行的指令, 可以是exec httpGet TCPSocket
        exec:
          command:
          - sh
          - -c
          - 'mkdir /data/ '
      preStop:
        httpGet:      
              path: /
              port: 80
      //  exec:
      //    command:
      //    - sh
      //    - -c
      //    - sleep 9
  restartPolicy: Always                     # 可选,默认为Always      //重启的策略;默认是Always,容器故障或者没有启动成功,那就自动重启该容器。Onfailure:容器以不为0的状态码终止,自动重启该容器。Never:无论何种状态,都不会重启。
  //nodeSelector:                           # 可选,指定Node节点;假设我们集群有50个节点,某个容器必须部署在某一个节点上,可以使用nodSelector来控台它部署到指定node节点上。
### --- 可以查看容器的标签
~~~     1和CPU就相当于1000M

[root@k8s-master01 ~]# kubectl get node --show-labels
NAME           STATUS   ROLES    AGE     VERSION   LABELS
k8s-master01   Ready    <none>   5d20h   v1.20.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-master01,kubernetes.io/os=linux,node.kubernetes.io/node=
k8s-master02   Ready    <none>   5d20h   v1.20.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-master02,kubernetes.io/os=linux,node.kubernetes.io/node=
  //      region: subnet7
  imagePullSecrets:                         #  可选,拉取镜像使用的secret,可以配置多个;一般公司业务镜像是在我们私有仓库中的,私有仓库不可能是公开的,需要配置账号密码,就是通过imagePullSecrets来配置的。
  - name: default-dockercfg-86258
  hostNetwork: false                        #  可选,是否为主机模式,如是,会占用主机端口;启用ingress就是通过hostNetwork来启动的,它是会占用宿主机的端口的。
  volumes:                                  #  共享存储卷列表;存储卷配置。
  - name: webroot                           #  名称,与上述对应
    emptyDir: {}                            #  挂载目录
        //hostPath:                         #  挂载本机目录
        //  path: /etc/hosts

二、yaml实验示例
### --- yaml文件实验示例
~~~		查看pod.yaml配置参数说明

[root@k8s-master01 ~]# vim pod.yaml 
apiVersion: v1 								# 必选,API的版本号
kind: Pod       							# 必选,类型Pod
metadata:       							# 必选,元数据
  name: nginx   							# 必选,符合RFC 1035规范的Pod名称
  #mespace: default 						# 可选,Pod所在的命名空间,不指定默认为default,可以使用-n 指定namespace 
  labels:       							# 可选,标签选择器,一般用于过滤和区分Pod
    app: nginx
    role: frontend 							# 可以写多个
  annotations:  							# 可选,注释列表,可以写多个
    app: nginx
spec:   									# 必选,用于定义容器的详细信息
#  initContainers: 							# 初始化容器,在容器启动之前执行的一些初始化操作
#  - command:
#    - sh
#    - -c
#    - echo "I am InitContainer for init some configuration"
#    image: busybox
#    imagePullPolicy: IfNotPresent
#    name: init-container
  containers:   							# 必选,容器列表
  - name: nginx 							# 必选,符合RFC 1035规范的容器名称
    image: nginx:1.15.2    					# 必选,容器所用的镜像的地址
    imagePullPolicy: IfNotPresent     		# 可选,镜像拉取策略, IfNotPresent: 如果宿主机有这个镜像,那就不需要拉取了. Always: 总是拉取, Never: 不管是否存储都不拉去
    command: 								# 可选,容器启动执行的命令 ENTRYPOINT, arg --> cmd
    - nginx
    - -g
    - "daemon off;"
    workingDir: /usr/share/nginx/html      	# 可选,容器的工作目录
#    volumeMounts:   						# 可选,存储卷配置,可以配置多个
#    - name: webroot 						# 存储卷名称
#      mountPath: /usr/share/nginx/html		# 挂载目录
#      readOnly: true       				# 只读
    ports:  								# 可选,容器需要暴露的端口号列表
    - name: http   		 					# 端口名称
      containerPort: 80    					# 端口号
      protocol: TCP 						# 端口协议,默认TCP
    env:    								# 可选,环境变量配置列表
    - name: TZ      						# 变量名
      value: Asia/Shanghai 					# 变量的值
    - name: LANG
      value: en_US.utf8
#    resources:      						# 可选,资源限制和资源请求限制
#      limits:       						# 最大限制设置
#        cpu: 1000m
#        memory: 1024Mi
#      requests:     						# 启动所需的资源
#        cpu: 100m
#        memory: 512Mi
#    startupProbe: 							# 可选,检测容器内进程是否完成启动。注意三种检查方式同时只能使用一种。
#      httpGet:      						# httpGet检测方式,生产环境建议使用httpGet实现接口级健康检查,健康检查由应用程序提供。
#            path: /api/successStart 		# 检查路径
#            port: 80
#    readinessProbe: 						# 可选,健康检查。注意三种检查方式同时只能使用一种。
#      httpGet:      						# httpGet检测方式,生产环境建议使用httpGet实现接口级健康检查,健康检查由应用程序提供。
#            path: / 						# 检查路径
#            port: 80        				# 监控端口
#    livenessProbe:  						# 可选,健康检查
      #exec:       						 	# 执行容器命令检测方式
           #command: 
            #- cat
            #- /health
    #httpGet:       						# httpGet检测方式
    #   path: /_health 						# 检查路径
    #   port: 8080
    #   httpHeaders: 						# 检查的请求头
    #   - name: end-user
    #     value: Jason 
#      tcpSocket:    						# 端口检测方式
#            port: 80
#      initialDelaySeconds: 60       		# 初始化时间
#      timeoutSeconds: 2    				# 超时时间
#      periodSeconds: 5      				# 检测间隔
#      successThreshold: 1 					# 检查成功为2次表示就绪
#      failureThreshold: 2 					# 检测失败1次表示未就绪
#    lifecycle:
#      postStart: 							# 容器创建完成后执行的指令, 可以是exec httpGet TCPSocket
#        exec:
#          command:
#          - sh
#          - -c
#          - 'mkdir /data/ '
#      preStop:
#        httpGet:      
#              path: /
#              port: 80
      #  exec:
      #    command:
      #    - sh
      #    - -c
      #    - sleep 9
  restartPolicy: Always   					# 可选,默认为Always,容器故障或者没有启动成功,那就自动该容器,Onfailure: 容器以不为0的状态终止,自动重启该容器, Never:无论何种状态,都不会重启
  #nodeSelector: 							# 可选,指定Node节点
  #      region: subnet7
#  imagePullSecrets:     					# 可选,拉取镜像使用的secret,可以配置多个
#  - name: default-dockercfg-86258
#  hostNetwork: false    					# 可选,是否为主机模式,如是,会占用主机端口
#  volumes:     							# 共享存储卷列表
#  - name: webroot 							# 名称,与上述对应
#    emptyDir: {}    						# 挂载目录
#        #hostPath:              			# 挂载本机目录
#        #  path: /etc/hosts








===============================END===============================


Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart                                                                                                                                                   ——W.S.Landor



来自为知笔记(Wiz)

标签:容器,V06,必选,kubernetes,KuberNetes,yaml,nginx,httpGet,name
来源: https://www.cnblogs.com/yanqivip/p/16076292.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有