文章目录
前言
k8s里面操作的资源实体,就是k8s的对象。它们是Kubernetes系统的持久化实体,这些对象合起来,代表了你集群的实际情况。
对象可以使用yaml来声明,并可以进行创建、修改,或者删除等操作。
所有资源对象必备的字段。用于定义资源类型与唯一性,下面以命名空间为例:
apiVersion: v1
kind: Namespace
metadata:
name: mynamespace
字段 | 描述 |
---|---|
apiVersion | 对象使用k8s的api版本 |
kind | 对象类型 |
metadata | 元数据,用于标记唯一性。包括名字,标签等。 |
Deployment
Deployment是最主要的pod控制器,yaml描述了目标状态。集群不管处于何种实际状态,都会朝着期望状态改变。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
字段 | 描述 |
---|---|
spec | 对象详细参数,是yaml文件主体。 |
replicas | 副本数,创建或者维持3个pod。 |
selector | 选择器,标签为app=nginx的pod将被创建3个副本。 |
template | 单个pod模板,包括定义标签(给selector使用),容器参数。 |
containers | 容器参数,选择nginx镜像,使用80端口。 |
Service
pod创建ip随机生成,用户无法直接访问pod。service解耦了服务和应用,还起到了对pods的负载均衡作用。
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 9376
字段 | 描述 |
---|---|
selector | 选择器,标签为app=MyApp的pods将提供service。 |
ports | 转发端口,可以是一个或多个。 |
protocol | 端口协议,多数为TCP,少数为UDP等。 |
port | 端口号,这里指service的端口号,允许外网访问80端口。 |
targetPort | 目的端口,这里指pods的端口号,外网访问80将被转发到某个pod的9376端口。 |
ConfigMap
ConfigMap存储对象用来将非加密数据保存到键值对中。可以用作环境变量、命令行参数或者存储卷中的配置文件。
apiVersion: v1
kind: ConfigMap
metadata:
name: example-redis-config
data:
redis-config: |
maxmemory 2mb
maxmemory-policy allkeys-lru
---
apiVersion: v1
kind: Pod
metadata:
name: redis
spec:
containers:
- name: redis
image: redis:5.0.4
volumeMounts:
- name: config
mountPath: /redis-master
volumes:
- name: config
configMap:
name: example-redis-config
items:
- key: redis-config
path: redis.conf
字段 | 描述 |
---|---|
data | 配置文件数据,每组配置自定义名字。 |
redis-config | 该配置文件的信息,定义了最大内存与原则。 |
volumeMounts | 卷挂载,pod中挂载一个目录用于存放配置。 |
volumes | 配置信息需要通过卷的形式传递。 |
name | 选择挂载对象,与volumeMounts名一一对应。 |
configMap | 选择的配置信息,名字与ConfigMap的metadata一一对应。 |
key | 选择了名为redis-config的配置组。 |
path | 配置信息存储到pod里面的配置文件路径为 /redis-master/redis.conf |
Secret
Secret 是一种包含少量敏感信息例如密码、令牌或密钥的对象。 这样的信息可能会被放在 Pod 规约中或者镜像中。
apiVersion: v1
data:
username: YWRtaW4=
password: MWYyZDFlMmU2N2Rm
kind: Secret
metadata:
name: mysecret
namespace: default
type: Opaque
---
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: mypod
image: redis
volumeMounts:
- name: foo
mountPath: "/etc/foo"
readOnly: true
volumes:
- name: foo
secret:
secretName: mysecret
字段 | 描述 |
---|---|
data | 配置数据,username和password已加密处理。 |
type | Secret 类型,Opaque为用户定义的任意数据。 |
volumeMounts | 卷挂载,pod中挂载一个目录用于存放账密。 |
volumes | 加密信息需要通过卷的形式传递。 |
name | 选择挂载对象,与volumeMounts名一一对应。 |
secretName | 选择的加密信息,名字与Secret的metadata一一对应。 |