Kubernetes配置YAML.md 4.9 KB


notion-id: 37629600-9cbf-4d28-ba61-cf854a216b

![[Notion/技术支持/Kubernetes/attachments/Untitled 6.png]] 快速生成YAML文件

kubectl create deployment web --image=nginx -o yaml --dry --run > my.yaml
#创建一个名称叫web,镜像为nginx,以yaml文件的形式输出
#并且尝试运行实际不允许,然后输出保存到my.yaml

kubectl get deploy
#列出当前在集群中定义的所有部署

kubectl get deploy nginx -o=yaml --export >my.yaml
#导出运行的pod的yaml文件

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql
spec:
  serviceName: "mysql-service"
  replicas: 1

#Kubernetes会创建两个副本(即两个Pod实例)来运行你的应用程序。
#这两个Pod将通过负载均衡来分配流量,从而实现负载均衡的效果。
#流量将被均匀地分配给这两个Pod,以便实现高可用性和负载均衡。

service部署【pod注册IP,服务发现】

apiVersion: v1
kind: Service
metadata:
  name: mysql-service
  labels:
    app: mysql                                      #设定service名称
spec:
# type: NodePort                                     #指定公开端口
  type: LoadBalancer                                 #指定公开端口,并且可以连接外网
  ports:
    - port: 3306                                    #POD内部端口
      nodePort: 30001                               #不指定,则随机分配外部段偶
  selector:                                         #选择app名称
    app: mysql                                      #选择需要绑定的pod名称        

PersistentVolume

apiVersion: v1
kind: PersistentVolume
metadata:
  name: mysql-pv
spec:
  capacity:
    storage: 1Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain        #PVC删除PV不会删除
  storageClassName: manual                     #对应配置的类
  local:                                       #hostpath
    path: /mysql_data                          #物理本地地址
  nodeAffinity:                                #偏好配置
   required:
     nodeSelectorTerms:
     - matchExpressions:
       - key: kubernetes.io/hostname
         operator: In
         values:
         - k8s-node               #本地PV将只在localhost.localdomain节点上运行

DaemonSet模板【守护进程-收集日志】

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: node-exporter          # DaemonSet 的名称
spec:
  selector:                    # 选择器
    matchLabels:               # 匹配的lable
      app: node-tag            # 选择包含此名称的 Label 节点上部署 Pod守护进程
  template:
    metadata:
      labels:
        app: pod-tag            # 为创建的 进入守护进程的所有Pod 设置 Label名称
    spec:
      containers:
        - name: node-exporter
          image: prom/node-exporter:v1.2.2   # 容器镜像名称及版本(Prometheus Node Exporter)
          ports:
            - name: http
              containerPort: 9100          # 容器监听的端口号(Prometheus Node Exporter 的默认端口)
          resources:
            limits:
              cpu: 200m                   # 容器的 CPU 资源限制
              memory: 200Mi               # 容器的内存资源限制
            requests:
              cpu: 100m                   # 容器的 CPU 资源请求
              memory: 100Mi               # 容器的内存资源请求
          securityContext:
            runAsNonRoot: true             # 以非 root 用户运行容器
            readOnlyRootFilesystem: true   # 将容器根文件系统设置为只读
          volumeMounts:
            - name: proc
              mountPath: /host/proc        # 容器挂载路径(用于监控宿主机的 /proc 目录)
              readOnly: true               # 挂载为只读
      volumes:
        - name: proc
          hostPath:
            path: /proc                   # 宿主机物理真实的目录路径(用于监控宿主机的 /proc 目录)

Secret【加密数据-定义变量】

echo -n 'admin' | base64
apiVersion: v1
kind: Secret
metadata:
  name: mysecret
  namespace: default
type: Opaque
data:
	user:
	password:{{ .Values.password | b64enc }}  #指定编码
  # Example:
  # password: {{ .Values.password | b64enc }}

#以变量的形式挂载pod
#以volume形式挂载pod

Configmap【不加密数据-定义变量】

#创建配置文件

#file_name
redis.properties
#在文件中输入所需信息
redis.host-127.0.0.1
redis.port=6379
redis.password=123456


#以变量的形式挂载pod
#以volume形式挂载pod
kubectl create configmap redis-config --from-file=redis.properties
#模板
kubectl create configmap <configmap_name> --from-file=<file_name>
#变量挂载
kind: ConfigMap
apiVersion: v1
metadata:
  name: CM
  namespace: default
data:
  key: default