资源清单创建

发布时间 2023-10-08 15:42:16作者: 普里莫

http://k8s.driverzeng.com/v1.19/

不同资源清单用---进行隔离

---

命名空间

# 资源清单创建
apiVersion: "v1"
kind: "Namespace"
metadata:
  name: zls                          // 创建命名空间的名称

# 命令创建
kubectl create namespace 666

# 查看
[root@master-1 ~]# kubectl get namespaces
NAME              STATUS   AGE
666               Active   5s
# 删除
[root@master-1 ~]# kubectl delete namespaces 666

peployment

1. 一个pod里创建多个容器
apiVersion: apps/v1                                    // 要使用kubernetes的版本
kind: Deployment                                       // [1]要创建对象类型
metadata:                                            // 源数据
  name: mysql                                          // 名称
  namespace: he                                        // 指定命名空间
spec:                                                // 规范说明
  replicas: 1                                          // 要创建几个容器
  selector:                                            // Pod 的选择器
    matchLabels:                                       // 匹配选定的标签
      app: mysql                                       // 指定pod的标签
  template:                                            // 定义pod
    metadata:
      labels:                                         // 打pod的标签()
        app: mysql                                    // pod的标签
    spec:
      containers:                                     // 容器列表
        - name: mysql
          image: mysql:5.7
          imagePullPolicy: IfNotPresent                // [2]拉取镜像规则
          ports:
            - containerPort: 3306
          env:
            - name: MYSQL_ROOT_PASSWORD
              value: "123"
            - name: MYSQL_DATABASE
              value: wordpress
            - name: MYSQL_USER
              value: wp-
            - name: MYSQL_PASSWORD
              value: "123"
            args:                                          // 传参
            - --character-set-server=utf8                  // 数据库的默认字符集
            - --collation-server=utf8_general_ci           // 数据库的默认规则(ci不区分大小写)
          volumeMounts:                                    // 容器位置
            - name: mysql-persistent-storage
              mountPath: /var/lib/mysql


#       volumes:                                            // nfs 挂载示例
#         - name: wp-data                                   // 给这个起个名字
#           nfs:                                            // 使用nfs服务             
#             path: /data/wordpress                         // nfs上的目录,服务要挂载到的
#             server: 172.16.1.7                            // nfs的ip
------
#       volumes:                                           // pvc 挂载示例
#       - name: wp-data                                  // 名字(和之前的写法略微不同,这个是没有空格)
#         persistentVolumeClaim:                         // 使用pvc服务
#           claimName: wp-pvc                            // pvc服务的名字


## wordpress连接数据库
          env:
            - name: WORDPRESS_DB_HOST
              value: mysql                              // 填写的是mysql的service的名字
[2]: 
imagePullPolicy:镜像拉取策略:
Always:总是拉取镜像 nginx:latest
Never:永远不拉镜像
IfNotPresent:如果镜像在机器上不存在,则拉,否则不拉

资源限制

apiVersion: v1
kind: Pod
metadata:
  name: resource-demo
spec:
  containers:
  - name: resource-demo
    image: nginx
    ports:
    - containerPort: 80
    resources:                       
      requests:                        // 要启动容器需要的资源,至少
        memory: 50Mi                   // 内存,50mi
        cpu: 1500m                     // cpu:1500(1.5核)
      limits:                           // 一个容器最大能使用的资源,最大
        memory: 100Mi                   // 内存,100mi
        cpu: 200m                       // cpu(0.2核)

service

apiVersion: v1
kind: Service
metadata:
  name: wordpress
spec:
  type: NodePort                              // [1]随机分配端口(默认ClusterIP)
  sessionAffinity: ClientIP                   // [2]会话保持
  selector:
    app: wordpress                            // 指定pod的标签
  ports:
    - name: http                              // 起个名字
      protocol: TCP                           // 端口的协议
      port: 80                                // service的端口,(ClusterIP)
      targetPort: http                        // 把流量转发到http,可端口80
#     nodePort: 30003                         // 指定的端口(加不加都可以,加的话需要,随机分配端口,30000-32767)
apiVersion: v1
kind: Service
metadata:
  name: php-apache
  labels:
    run: php-apache
spec:
  ports:
  - port: 80
  selector:
    run: php-apache
# 解释
selector:选择器部分,用于选择要路由流量的 Pod。
  run: php-apache:选择具有标签 run: php-apache 的 Pod。
[1]
ExternalName
ClusterIP                                  // 用来动态发现和负载均衡POD的IP(一般都用这个,搭配infress来对外提供服务)(默认)
NodePort                                   // 节点对外提供访问的IP
LoadBalancer
“ExternalName”映射到指定的externalName。

[2]
None:默认值。不使用会话保持,负载均衡器基于客户端 IP 地址和端口将连接路由到后端 Pod。

ClientIP:根据客户端 IP 地址对连接进行哈希处理,并将其路由到相应的后端 Pod。这种类型的会话保持适用于需要将连接路由到同一台服务器上的长时间连接应用程序。
[root@master-1 mysql]# kubectl describe svc mysql 

ingress

[root@master-1 ingress]# cat nginx-in.yaml 
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: welcom-to-nginx
spec:
  rules:                                     // #转发规则
  - host: www.zls.com                        // #匹配的域名
    http:                                    // #基于http协议解析
      paths:                                 // #基于路径进行匹配
      - path: /                              // #匹配/路径
        pathType: ImplementationSpecific     // #[1]路径类型
        backend:                             // #匹配后跳转的后端服务
          service:                           // #设置后端跳转到Service的配置
            name: nginx-svc                  // #跳转到标签名为nginx-svc的ClusterIP
            port:                            // #跳转到的端口
              number: 80                     // #Service端口号
[1]
pathType路径类型支持的类型:

ImplementationSpecific 系统默认,由IngressClass控制器提供
Exact 精确匹配URL路径,区分大小写
Prefix 匹配URL路径的前缀,区分大小写

hpa

apiVersion: "autoscaling/v1"
kind: "HorizontalPodAutoscaler"
metadata:
  name: php-apache
  namespace: default
spec:
  maxReplicas: 10                            // 指定允许的最大副本数量
  minReplicas: 1                             // 指定允许的最小副本数量
  scaleTargetRef:
    apiVersion: apps/v1                       // 目标对象的 API 版本
    kind: Deployment                          // #目标对象的类型
    name: wordpress                           // #目标对象的名称,这里是一个名为 "wordpress" 的 Deployment。(不是pod的名称)
  targetCPUUtilizationPercentage: 50          // #指定期望的目标 CPU 利用率百分比

健康探针

  containers:
    - name: liveness
      livenessProbe:
        httpGet:
          path: /                    // #指定要发送 GET 请求的路径.在此示例中,使用的路径是根路径 "/",即容器的根目录
          port: 80                   // #指定要发送请求到的端口号
        initialDelaySeconds: 3       // #初始化延迟时间,表示在容器启动后等待多长时间开始进行第一次存活探测。在此示例中,延迟时间为 3 秒。
        periodSeconds: 1             // #存活探测的间隔时间,表示每隔多长时间进行一次存活探测。在此示例中,间隔时间为 1 秒

就绪探针