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

命令行创建资源

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

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

kubectl create namespace k8s-test

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




k8s restart次数重置 k8s重启命令_命令行


其他的资源创建方法,可以查看kubernetes中文文档:http://docs.kubernetes.org.cn/490.html

通过配置文件创建资源

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

apiVersion: v1kind: Namespacemetadata:   name: k8s-test2   labels:     name: k8s-test2

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


k8s restart次数重置 k8s重启命令_k8s 命令 重启_02


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