欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

kubernetes里创建资源的方法

程序员文章站 2022-03-26 14:57:30
上一篇里已经成功的将一个golang的demo服务部署到k8s环境里了,部署的时候我们用到了yaml配置文件,今天这里简单的介绍下如何使用创建kubernetes里的资源。在kubernetes里,一切对象皆为资源,可以通过命令或配置文件来创建。 命令行创建资源 通过命令行可以创建namespace ......

转自:https://www.cnblogs.com/5bug/p/12733863.html

golang服务部署到k8s环境里,部署的时候用到了yaml配置文件,今天这里简单的介绍下如何使用创建kubernetes里的资源。在kubernetes里,一切对象皆为资源,可以通过命令或配置文件来创建。

命令行创建资源

通过命令行可以创建namespace、deployment、service、ingress、configmap、secret等很多资源类型

这里通过命令创建一个名为k8s-test的namespace,命令如下:

kubectl create namespace k8s-test

执行后通过:kubectl get namespace命令可以查到刚刚创建的namespace,如下图:

kubernetes里创建资源的方法

其他的资源创建方法,可以查看kubernetes中文文档:

通过配置文件创建资源

上一篇里我们部署k8s-demo服务的时候就是使用配置文件来创建kubernetes资源的,因为使用配置文件可以定义多种资源类型来同时创建,比手工一条条命令去创建确实是方便很多。这里同样通过创建一个k8s-test2的namespace来测试效果,定义yaml配置文件k8s-test2.yaml如下:

apiversion: v1
kind: namespace
metadata:
   name: k8s-test2
   labels:
     name: k8s-test2

上面的配置文件里定义了k8s-test2的namespace名称,同时还指定了一个label。执行命令"kubectl apply -f k8s-test2.yaml"后查询namespace列表如下图:

kubernetes里创建资源的方法

yaml配置文件里还可以定义很多其他的资源对象,根据创建的资源类型而定。

deployment配置文件说明

这里将上一篇里k8s-demo.yaml文件的配置文件做个简单的说明,补充了若干常用的定义类型:

---
    apiversion: apps/v1  #必须 指定api版本,此值必须在kubectl api-versions里
    kind: deployment  #必须 指定资源类型
    metadata:  #必须 元数据
      name: k8s-demo  #必须 符合rfc1035规范的名称
      namespace: default  #可选 指定命名空间,默认为default
      labels:  #可选 标签选择器,一般用于selector
        app: k8s-demo  #label定义
    spec:  #必须 资源详细
      selector:  #可选 选择器
        matchlabels: 
          app: k8s-demo
      replicas: 4  #可选 创建pod的副本数量
      revisionhistorylimit: 10  #可选 历史版本最多保留的版本数量
      minreadyseconds: 5 #可选 pod对象启动后多长时间认为就绪,单位秒
      strategy:  # 更新策略
        type: rollingupdate # 滚动更新
        rollingupdate:
          maxsurge: 1  #可选 可以超过期望值的最大pod数 默认为25%,maxsurge、maxunavailable不能同时为0,都可以设置为数字或百分比
          maxunavailable: 1  #可选 在更新时最大不可用的pod数量 默认为25% 
      template:
        metadata:
          labels:
            app: k8s-demo
        spec:
          restartpolicy: always  #表示自动重启
          containers:
          - image: www.5bug.wang/docker/k8s-demo:1.0  #容器使用的镜像地址
            imagepullpolicy: ifnotpresent  #镜像拉取策略always、never、ifnotpresent
            command: ["/bin/bash","-c","./k8s-demo"]  #启动命令,需要前台运行命令
            # env:  #指定环境变量
            #   - name: app_env
            #     value: qa
            name: k8s-demo
            ports:
            - containerport: 8080  #容器端口
              protocol: tcp
            resources:  #定义资源数据
              limits:
                cpu: 100m
                memory: 100mi
              requests:
                cpu: 50m
                memory: 50mi
            livenessprobe:  #健康检查设置
              tcpsocket:
                port: 8080  #服务端口
              initialdelayseconds: 10  #第一次检测在容器启动后多长时间后开始
              timeoutseconds: 3  #检测的超时时间 
            readinessprobe:  #探针
              httpget:
                path: /ping  #健康检查接口定义
                port: 8080  #健康检查端口
              initialdelayseconds: 10
              timeoutseconds: 2
            volumemounts:  #挂载配置
              - name: logs  #挂载设备的名字,与volumes[*].name 需要对应    
                mountpath: /data/logs  #挂载到容器的/data/logs下
                readonly: false  
          volumes:  #定义一组挂载设备  
            - name: logs  #定义一个挂载设备的名字  
              hostpath:
                path: /data/logs  #挂载设备类型为hostpath,路径为宿主机下的/data/logs

---
    apiversion: v1
    kind: service  #定义service
    metadata:
      name: k8s-demo-svc
      namespace: default
      labels:
        app: k8s-demo
    spec:
      ports:
        - name: api
          port: 8080
          protocol: tcp
          targetport: 8080
      selector:
        app: k8s-demo
    
---
    apiversion: extensions/v1beta1
    kind: ingress  #定义ingress
    metadata:
      name: k8s-demo-ingress
      namespace: default
    spec:
      rules:
      - host: k8s-demo.local  #ingress名称
        http:
          paths:
          - path: /
            backend:
              servicename: k8s-demo-svc
              serviceport: api