Kubernetes使用教程·配置文件

Kubernetes支持YAML或者JSON格式的配置文件,最常用还是YAML,它使用通用的数据串行化格式专门用来写配置文件,比JSON更方便。

YAML语法规则

  • 须严格区分字符大小写
  • 使用缩进表示层级关系
  • 缩进只允许使用空格符
  • 缩进的空格数目不重要
  • 同层级的元素须左对齐
  • 用“#” 符号表示注释

在Kubernetes的配置文件中,只需要知道Maps和Lists两种结构类型,Map即“Key:Value”,List即数组,Lists的子项也可以是Maps,Maps的子项也可以是List,例如:

apiVersion: v1
kind: Pod
metadata:
  name: website
  labels:
    app: web
spec:
  containers:
    - name: nginx
      image: nginx
      ports:
        - containerPort: 80
    - name: nginx-demo
      image: depository/nginx-demo:v1.15.0
      ports: 8080

Kubernetes配置文件详细说明

通过“kubectl api-versions”命令查看Kubernetes支持的apiVersion,对应关系如下:

k8s版本 api版本
v1.5-v1.15 extensions/v1beta1
v1.7-v1.15 apps/v1beta1
v1.8-v1.15 apps/v1beta2
v1.9+ apps/v1

Deployment配置:

apiVersion: apps/v1                      # 指定api版本,请参照版本对应表 
kind: Deployment                         # 指定资源角色和类型   
metadata:                                # 设置资源元数据和属性 
  name: POD_NAME                         # 资源名字,同一个namespace中必须唯一
  namespace: default                     # 指定资源所在的namespace
  labels:                                # 设置资源标签
    app: POD_NAME
    version: stable
spec:                                    # 资源规范字段
  replicas: 1                            # 指定副本数量
  revisionHistoryLimit: 3                # 保留历史版本
  selector:                              # 选择器
    matchLabels:                         # 匹配标签
      app: POD_NAME
      version: stable
  strategy:                              # 策略
    rollingUpdate:                       # 滚动更新
      maxSurge: 30%                      # 最大额外可以存在的副本数,百分比或整数
      maxUnavailable: 30%                # 在更新过程中能够进入不可用状态的Pod的最大值,百分比或整数
    type: RollingUpdate                  # 滚动更新策略
  template:                              # 模版
    metadata:                            # 资源元数据和属性 
      annotations:                       # 自定义注解列表
        sidecar.istio.io/inject: "false" # 自定义注解名字
      labels:                            # 设置资源标签
        app: POD_NAME
        version: stable
    spec:                                # 资源规范字段
      containers:
      - name: CONTNER_NAME               # 容器名字   
        image: CONTNER_NAME:POD_VERSION  # 容器使用的镜像地址   
        imagePullPolicy: IfNotPresent    # 每次Pod启动拉取镜像策略
                                         # Always(默认):每次都检查,然后会进行拉取新镜像
                                         # Never:从不检查
                                         # IfNotPresent:若本地有则不检查,若没有就拉取
        resources:                       # 资源管理
          limits:                        # 最大资源限制
            cpu: 500m                    # CPU,1核心 = 1000m
            memory: 512Mi                # 内存,1G = 1000Mi
          requests:                      # 最低资源需求
            cpu: 100m
            memory: 128Mi
        livenessProbe:                   # Pod内部健康检查的设置
          httpGet:                       # 健康检查,返回200-399之间为正常
            path: /healthCheck           # URI地址
            port: 8080                   # 端口
            scheme: HTTP                 # 协议,常见如HTTP/TCP
            host: 127.0.0.1              # 主机地址
          initialDelaySeconds: 30        # 容器启动多长时间后开始检测
          timeoutSeconds: 5              # 检测超时时间
          periodSeconds: 30              # 检查间隔时间
          successThreshold: 1            # 成功阀值
          failureThreshold: 5            # 失败阀值,达到该值后会重启新的pod
        readinessProbe:                  # Pod准备服务健康检查设置
          httpGet:
            path: /healthCheck
            port: 8080
            scheme: HTTP
          initialDelaySeconds: 30
          timeoutSeconds: 5
          periodSeconds: 10
          successThreshold: 1
          failureThreshold: 5
        ports:
          - name: http                   # 名称
            containerPort: 8080          # 容器对外的端口 
            protocol: TCP                # 协议
      imagePullSecrets:                  # 镜像仓库拉取密钥
        - name: harbor-certification
      affinity:                          # 亲和性调试
        nodeAffinity:                    # 节点亲和力
          requiredDuringSchedulingIgnoredDuringExecution:
                                         # Pod必须部署到满足条件的节点上
            nodeSelectorTerms:           # 节点满足任何一个条件就可以
            - matchExpressions:          # 可有多个选项,只有同时满足这些逻辑选项的节点才能运行pod
              - key: beta.kubernetes.io/arch
                operator: In
                values:
                - amd64

Service配置(可以和Deployment写在同一个配置文件中):

apiVersion: v1                           # 指定api版本,请参照版本对应表
kind: Service                            # 指定资源的角色和类型 
metadata:                                # 资源的元数据和属性
  name: POD_NAME                         # 资源名字,同一个namespace中必须唯一
  namespace: default                     # 指定资源所在的namespace
  labels:                                # 设置资源标签
    app: POD_NAME
spec:                                    # 资源规范字段
  type: ClusterIP                        # ClusterIP类型
  ports:
    - port: 8080                         # Service端口
      targetPort: http                   # 容器暴露的端口
      protocol: TCP                      # 协议
      name: http                         # 端口名称
  selector:                              # 选择器
    app: POD_NAME

原创文章禁止转载:技术学堂 » Kubernetes使用教程·配置文件

精彩评论

3+2=

感谢您的支持与鼓励

支付宝扫一扫打赏

微信扫一扫打赏