Skip to content

k8s-yaml-模版

Namespace

yaml
apiVersion: v1
kind: Namespace
metadata:
  name: pingcx-prod

Deployment.frontend

yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: pingcx-frontend
  namespace: pingcx-prod
  labels:
    app: pingcx
    component: frontend
    env: prod
spec:
  replicas: 2
  selector:
    matchLabels:
      app: pingcx
      component: frontend
      env: prod
  template:
    metadata:
      labels:
        app: pingcx
        component: frontend
        env: prod
    spec:
      containers:
        - name: frontend
          image: pingcx-frontend:1.0.0
          ports:
            - containerPort: 80

Deployment.backend

yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: pingcx-backend
  namespace: pingcx-prod
  labels:
    app: pingcx
    component: backend
    env: prod
spec:
  replicas: 2
  selector:
    matchLabels:
      app: pingcx
      component: backend
      env: prod
  template:
    metadata:
      labels:
        app: pingcx
        component: backend
        env: prod
    spec:
      containers:
        - name: backend
          image: pingcx-backend:1.0.0
          ports:
            - containerPort: 8080

Service.frontend

yaml
apiVersion: v1
kind: Service
metadata:
  name: pingcx-frontend
  namespace: pingcx-prod
  labels:
    app: pingcx
    component: frontend
    env: prod
spec:
  type: ClusterIP
  selector:
    app: pingcx
    component: frontend
    env: prod
  ports:
    - port: 80
      targetPort: 80

Service.backend

yaml
apiVersion: v1
kind: Service
metadata:
  name: pingcx-backend
  namespace: pingcx-prod
  labels:
    app: pingcx
    component: backend
    env: prod
spec:
  type: ClusterIP
  selector:
    app: pingcx
    component: backend
    env: prod
  ports:
    - port: 8080
      targetPort: 8080

ConfigMap

yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: pingcx-backend-config
  namespace: pingcx-prod
data:
  log_level: "info"
  app_id: 1000

Secret

yaml
apiVersion: v1
kind: Secret
metadata:
  name: pingcx-backend-secret
  namespace: pingcx-prod
type: Opaque # 这是啥
stringData:
  api_key: "???"

PV/PVC

pv

yaml
# pv-hostpath.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-hostpath
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /data/pv-test
  nodeAffinity:
    required:
      nodeSelectorTerms:
        - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
                - k8s-01

pvc

yaml
# pvc-test.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-test
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 500Mi

pod

yaml
# pod-using-pvc.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-pv-test
spec:
  nodeSelector:
    kubernetes.io/hostname: k8s-01
  containers:
    - name: test-container
      image: busybox
      command: ["sleep", "3600"]
      volumeMounts:
        - mountPath: "/mnt/data"
          name: test-volume
  volumes:
    - name: test-volume
      persistentVolumeClaim:
        claimName: pvc-test

验证实验:

  1. kubectl apply -f 上面三个 yaml。
  2. kubectl get pv,pvc 看状态是不是 Bound。
  3. kubectl exec -it pod-pv-test -- sh 进去容器,cd /mnt/data && echo hello > test.txt。
  4. 退出容器,再登上宿主机 cat /data/pv-test/test.txt 看是不是写进去了。