3-2 K8s集群中常见资源对象介绍

发布于:2023-01-18 ⋅ 阅读:(496) ⋅ 点赞:(0)


前言

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一一对应。



网站公告

今日签到

点亮在社区的每一天
去签到