吾八哥学k8s(三):kubernetes里创建资源的方法
上一篇里已经成功的将一个golang的demo服务部署到k8s环境里了,部署的时候我们用到了yaml配置文件,今天这里简单的介绍下如何使用创建kubernetes里的资源。在kubernetes里,一切对象皆为资源,可以通过命令或配置文件来创建。
命令行创建资源
通过命令行可以创建namespace、deployment、service、ingress、configmap、secret等很多资源类型
这里通过命令创建一个名为k8s-test的namespace,命令如下:
kubectl create namespace k8s-test
执行后通过:kubectl get namespace命令可以查到刚刚创建的namespace,如下图:
其他的资源创建方法,可以查看kubernetes中文文档:http://docs.kubernetes.org.cn/490.html
通过配置文件创建资源
上一篇里我们部署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列表如下图:
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
Kubernetes、golang、工程效能方向爱好者!个人博客:http://www.5bug.wang/