小明
小明
Published on 2025-01-18 / 4 Visits
0

k8s yaml模板

1.Deployment控制器模板

1.常见模板

apiVersion: apps/v1
kind: Deployment
metadata:
  name: bdqn1 #控制器名称
  labels:
    app: bdqn1 #标签,用于匹配标签选择器
spec:
  selector: #定义标签选择器,用于识别pod
    matchLabels:
      app: bdqn1
  replicas: 3 #生成的实例数量
  template: #pod模板,用于创建新pod
    metadata:
      labels:
        app: bdqn1 #pod名称
    spec:
      containers:
        - name: bdqn1
          image: httpd:latest #容器名称
          imagePullPolicy: IfNotPresent #镜像下载策略
          ports:      
            - containerPort: 80 #向外暴露的网络端口

2.使用环境变量模板

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment  # Deployment 名称
spec:
  replicas: 3  # 期望运行的 Pod 副本数量
  selector:
    matchLabels:
      app: my-app  # 用于选择关联的 Pod 的标签选择器
  template:
    metadata:
      labels:
        app: my-app  # 该模板下创建的 Pod 的标签,需与 selector 匹配
    spec:
      containers:
      - name: my-container  # 容器名称
        image: my-image:tag  # 容器使用的镜像及标签
        ports:
        - containerPort: 80  # 容器内暴露的端口
        env:  # 环境变量设置
        - name: ENV_VAR_NAME_1  # 环境变量名 1
          value: "env_var_value_1"  # 环境变量值 1
        - name: ENV_VAR_NAME_2  # 环境变量名 2
          valueFrom:  # 从其他源获取环境变量值
            configMapKeyRef:
              name: my-configmap  # 引用的 ConfigMap 名称
              key: configmap_key_2  # ConfigMap 中的键名

3.挂载pvc模板

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-container
        image: my-image:tag
        ports:
        - containerPort: 80
        volumeMounts:  # 容器内挂载点配置
        - name: my-pvc-volume  # 挂载的卷名称,与 volumes 中定义的名称对应
          mountPath: /data  # 容器内的挂载路径
      volumes:  # 定义卷
      - name: my-pvc-volume
        persistentVolumeClaim:
          claimName: my-pvc  # 引用的持久化卷声明名称

2.service服务模板

apiVersion: v1
kind: Service
metadata:
  name: bdqn-svc #服务名称
spec:
  selector:
    app: bdqn1 #标签选择器,指定哪些pod绑定此服务
  ports:              
    - port: 1000 #定义此服务对外暴露的端口
      targetPort: 80 #定义此服务映射的pod端口
      # nodePort: 32034  #将端口映射至外部主机,范围是 30000-32767(不常用)

3.Ingress模板

1.http模板

kind: Ingress
apiVersion: extensions/v1beta1
metadata:
  name: bdqn-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: ingress.bdqn.com #定义需要转发的域名
    http:
      paths:
      - path: /nginx #定义网址路径为/nginx时匹配此规则
        backend:
          serviceName: svc1 #转发至对应service服务
          servicePort: 80
      - path: /httpd #定义网址路径为/httpd时匹配此规则
        backend:
          serviceName: svc2
          servicePort: 80

2.https模板

# 需提前将证书保存至k8s集群中
# kubectl create secret tls tls-secret --key=tls.key --cert tls.crt 
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: https
spec:
  tls:
    - hosts:
      - ingress5.bdqn.com #匹配启用TLS的域名
      secretName: tls-secret #匹配预先保存的证书名称
  rules:
    - host: ingress5.bdqn.com
      http:
        paths:
        - path: / #所有针对此域名的访问都匹配下列规则
          backend:
            serviceName: svc-5 #定义匹配转发规则的service服务
            servicePort: 80

4.secret模板

1.yaml文件模板

#不常用
apiVersion: v1
kind: Secret
metadata:
  name: mysecret4 #定义secret名称
type: Opaque #填写secret类型(可选)
data: #定义键值对
  username: cm9vdAo= 
  password: MTIzLmNvbQo=

2.命令模板

1. --from-literal

kubectl create secret generic secretname --from-literal=key=value

2.--from-file

文件名为key

文件内容为value

kubectl create secret generic secretname --from-file=filename

3.--from-env-file

#文件内容
key=value
key=value
kubectl create secret generic secretname --from-env-file=envfilename

3.使用方法

1.使用secret取环境变量

apiVersion: v1
kind: Pod
metadata:
  name: mysql-pod
spec:
  containers:
    - name: mysql-container
      image: mysql:5.7
      imagePullPolicy: IfNotPresent
      env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysecret1 #输入secret名称
              key: mysql-root-password #输入secret内部的键名
      ports:
        - containerPort: 3306
  restartPolicy: Always

2.使用secret匹配私有仓库用户

创建secret(使用docker-registry类型)

                     #指定registry类型  secret名称       后面为固定结构(可tab补全)
kubectl create secret docker-registry registry-secret2 --docker-server=192.168.8.6 --docker-username=admin --docker-password=Harbor12345
#下载私有仓库镜像
kind: Deployment
apiVersion: apps/v1
metadata:
  name: testdeploy
spec:
  selector:
    matchLabels:
      test: registry
  replicas: 2
  template:
    metadata:
      labels:
        test: registry
    spec:
      containers:
      - name: testdeploy
        image: 192.168.8.6/library/nginx:latest #私有仓库地址
        imagePullPolicy: IfNotPresent
      imagePullSecrets:
      - name: secretname #需使用的secret

5.pv模板

apiVersion: v1
kind: PersistentVolume
metadata:
  name: new-pv #pv名称
spec:
  capacity:
    storage: 8Gi #pv容量
  accessModes: #访问模式
    - ReadWriteOnce #表示此持久卷可以被单个节点以读写方式挂载(RWO)
   #- ReadOnlyMany 表示此持久卷可被多个节点以只读方式挂载(ROX)
   #- ReadWriteMany 表示此持久卷可被多个节点以读写方式挂载(RWX)
  persistentVolumeReclaimPolicy: Retain #回收策略(此处为不回收) Recycle(回收) Delete(删除)
  nfs: #指定以nfs挂载
    path: /nfsdata/new-pv #指定nfs的路径
    #readOnly: true 只读(可选)
    server: 192.168.8.5 #指定nfs服务器的IP地址

6.pvc模板

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc  # PVC 的名称,自定义
spec:
  accessModes: #访问模式(需与要匹配的pv一致)
    - ReadWriteOnce #表示此持久卷可以被单个节点以读写方式挂载(RWO)
   #- ReadOnlyMany 表示此持久卷可被多个节点以只读方式挂载(ROX)
   #- ReadWriteMany 表示此持久卷可被多个节点以读写方式挂载(RWX)
  resources:
    requests:
      storage: 5Gi  #请求的存储容量大小(需小于要匹配的pv)