--- notion-id: 37629600-9cbf-4d28-ba61-cf854a216bd2 --- ![[Notion/技术支持/Kubernetes/attachments/Untitled 6.png]] 快速生成YAML文件 ```shell 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文件 ``` ```yaml apiVersion: apps/v1 kind: StatefulSet metadata: name: mysql spec: serviceName: "mysql-service" replicas: 1 #Kubernetes会创建两个副本(即两个Pod实例)来运行你的应用程序。 #这两个Pod将通过负载均衡来分配流量,从而实现负载均衡的效果。 #流量将被均匀地分配给这两个Pod,以便实现高可用性和负载均衡。 ``` ## service部署【pod注册IP,服务发现】 ```yaml 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 ```yaml 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模板【守护进程-收集日志】 ```shell 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【加密数据-定义变量】 ```shell echo -n 'admin' | base64 ``` ```shell 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【不加密数据-定义变量】 #创建配置文件 ```bash #file_name redis.properties #在文件中输入所需信息 redis.host-127.0.0.1 redis.port=6379 redis.password=123456 #以变量的形式挂载pod #以volume形式挂载pod ``` ```bash kubectl create configmap redis-config --from-file=redis.properties #模板 kubectl create configmap --from-file= ``` ```yaml #变量挂载 kind: ConfigMap apiVersion: v1 metadata: name: CM namespace: default data: key: default ```