k8s创建容器的几个案例

案例一、nodeSelector:

      deploy.type: biz_app #指定节点运行

apiVersion: v1  #api版本
kind: Namespace    #控制器类型
metadata:        #元数据,也就是定义pod或其他控制的信息
  name: test-tomcat   #设置命名空间名称
---
apiVersion: apps/v1
kind: Deployment                #绑定的是Deployment模板
metadata:    #元数据
  name: tomcat-deployment               # deployment模板的名字
  namespace: test-tomcat
  labels:                                          # 标签
    app: tomcat                             # app 名字,需要和后面的service.yaml 一致
spec:                                              # pod 的描述信息
  replicas: 2                                   # pod的副本数
  selector:                                             #标签选择器
    matchLabels:        #查找匹配的标签
      app: tomcat                               # 需要和app 一致
  template:          #Pod 的模板信息,根据模板信息来创建 Pod
    metadata:          #Pod 的元数据
      labels:            #Pod 的标签
        app: tomcat                             # 需要和app 名字一致
    spec:
      nodeSelector:
        deploy.type: biz_app #指定节点运行
      volumes:                                  # 宿主机挂载目录
      - name: web-app-webapps     # 给需要挂载的宿主机路径起个名字
        hostPath:                                # 宿主机路径
          path: /home/yida/test/webapps      # 路径: 宿主机路径目录       
      - name: web-app-logs
        hostPath:
          path: /home/yida/test/logs
      containers:                                # 容器描述     
      - name: tomcat                     # 容器的名字
        image: 10.143.133.15:5000/tomcat9   # 要拉取的镜像地址
        resources:
          limits:
            memory: 4Gi
          requests:
            memory: 2Gi
        ports:                                  # 容器内部映射的端口号
        - containerPort: 8080    #  容器内部映射的端口号
        volumeMounts:                   # 容器内部映射的目录路径
        - name: web-app-webapps  # 给需要映射的目录路径起个名字,名字要和上面的宿主机器的名字对应
          mountPath: /usr/local/tomcat/webapps  # 容器内部映射挂载的目录路径
        - name: web-app-logs
          mountPath: /usr/local/tomcat/logs
---
apiVersion: v1                  # service api版本
kind: Service                   # 使用service 模块
metadata:                           # 元数据
  name: tomcat-service   # 新建自定义service 模块的名字
  namespace: test-tomcat
spec:                    # service 信息
  type: NodePort                # 使用Nodeport协议,对外提供开放端口
  ports:                        # 端口信息
    - port: 8080                # service 的端口
      targetPort: 8080  # 容器tomcat的端口
      nodePort: 8026   # 自定义对外开发的端口
  selector:                #  选择标签器
    app: tomcat            # app tomcat 此名字要匹配deployment 的app: tomcat

案例二、定义硬亲和性

apiVersion: v1
kind: Namespace
metadata:
  name: test-tomcat
---
apiVersion: apps/v1
kind: Deployment                #绑定的是Deployment模板
metadata:
  name: tomcat-deployment               # deployment模板的名字
  namespace: test-tomcat
  labels:                                          # 标签
    app: tomcat                             # app 名字,需要和后面的service.yaml 一致
spec:                                              # pod 的描述信息
  replicas: 5                                   # 开启五个pods
  selector:                                             # 选择器
    matchLabels:
      app: tomcat                               # 需要和app 一致
  template:
    metadata:
      labels:
        app: tomcat                             # 需要和app 名字一致
    spec:
      affinity:         #定义硬亲和性
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:  # 硬策略
            nodeSelectorTerms:
            - matchExpressions:  #可由 一到多 个标签选择器组成,多个标签选择器彼此间为“逻辑与”的关系
              - key: node
                operator: In
                values:
                - master01
                - master02
      volumes:                                  # 宿主机挂载目录
      - name: web-app-webapps     # 给需要挂载的宿主机路径起个名字
        hostPath:                                # 宿主机路径
          path: /home/yida/test/webapps      # 路径: 宿主机路径目录       
      - name: web-app-logs
        hostPath:
          path: /home/yida/test/logs
      containers:                                # 容器描述     
      - name: tomcat                     # 容器的名字
        image: 10.143.133.15:5000/tomcat9   # 要拉取的镜像地址
        imagePullPolicy: IfNotPresent    #默认值,本地有则使用本地镜像,不拉取
        resources:
          limits:
            memory: 4Gi
          requests:
            memory: 2Gi
        ports:                                  # 容器内部映射的端口号
        - containerPort: 8080    #  容器内部映射的端口号
        volumeMounts:                   # 容器内部映射的目录路径
        - name: web-app-webapps  # 给需要映射的目录路径起个名字,名字要和上面的宿主机器的名字对应
          mountPath: /usr/local/tomcat/webapps  # 容器内部映射挂载的目录路径
        - name: web-app-logs
          mountPath: /usr/local/tomcat/logs
---
apiVersion: v1                  # service api版本
kind: Service                   # 使用service 模块
metadata:                           # 元数据
  name: tomcat-service   # 新建自定义service 模块的名字
  namespace: test-tomcat
spec:                    # service 信息
  type: NodePort                # 使用Nodeport协议,对外提供开放端口
  ports:                        # 端口信息
    - port: 8080                # service 的端口
      targetPort: 8080  # 容器tomcat的端口
      nodePort: 8066   # 自定义对外开发的端口
  selector:                #  选择标签器
    app: tomcat            # app tomcat 此名字要匹配deployment 的app: tomcat

案例三、容器健康探测

#apiVersion: v1
#kind: Namespace
#metadata:
#  name: test-tomcat
#---
apiVersion: apps/v1
kind: Deployment                #绑定的是Deployment模板
metadata:
  name: tomcat3-deployment               # deployment模板的名字
  namespace: test-tomcat
  labels:                                          # 标签
    app: tomcat3                             # app 名字,需要和后面的service.yaml 一致
spec:                                              # pod 的描述信息
  replicas: 5                                   # 开启五个pods
  selector:                                             # 选择器
    matchLabels:
      app: tomcat3                               # 需要和app 一致
  template:
    metadata:
      labels:
        app: tomcat3                             # 需要和app 名字一致
    spec:
      affinity:         #定义硬亲和性
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:  # 硬策略
            nodeSelectorTerms:
            - matchExpressions:  #可由 一到多 个标签选择器组成,多个标签选择器彼此间为“逻辑与”的关系
              - key: node
                operator: In
                values:
                - master03
                - node01
                - node02
      volumes:                                  # 宿主机挂载目录
      - name: web-app-webapps     # 给需要挂载的宿主机路径起个名字
        hostPath:                                # 宿主机路径
          path: /home/yida/test/webapps      # 路径: 宿主机路径目录       
      - name: web-app-logs
        hostPath:
          path: /home/yida/test/logs
      containers:                                # 容器描述     
      - name: tomcat                     # 容器的名字
        image: 10.143.133.15:5000/tomcat9   # 要拉取的镜像地址
        imagePullPolicy: IfNotPresent    #默认值,本地有则使用本地镜像,不拉取
        resources:
          limits:
            memory: 4Gi
          requests:
            memory: 2Gi
        ports:                                  # 容器内部映射的端口号
        - containerPort: 8080    #  容器内部映射的端口号
        livenessProbe: #探测pod是否健康
          httpGet:
            path: /
            port: 8080
          initialDelaySeconds: 60
          timeoutSeconds: 20
          periodSeconds: 30          # 探测周期,每30s探测一次
          successThreshold: 1        # 连续探测1次成功表示成功
          failureThreshold: 3        # 连续探测3次失败表示失败
        readinessProbe: #探测访问状态请求
          httpGet:
            path: /
            port: 8080
          initialDelaySeconds: 60 #容器启动多久后开始探测
          timeoutSeconds: 20 #表示容器必须在5s内做出相应反馈给probe,否则视为探测失败
          periodSeconds: 30          # 探测周期,每30s探测一次
          successThreshold: 1        # 连续探测1次成功表示成功
          failureThreshold: 3        # 连续探测3次失败表示失败
        volumeMounts:                   # 容器内部映射的目录路径
        - name: web-app-webapps  # 给需要映射的目录路径起个名字,名字要和上面的宿主机器的名字对应
          mountPath: /usr/local/tomcat/webapps  # 容器内部映射挂载的目录路径
        - name: web-app-logs
          mountPath: /usr/local/tomcat/logs
---
apiVersion: v1                  # service api版本
kind: Service                   # 使用service 模块
metadata:                           # 元数据
  name: tomcat-service3   # 新建自定义service 模块的名字
  namespace: test-tomcat
spec:                    # service 信息
  type: NodePort                # 使用Nodeport协议,对外提供开放端口
  ports:                        # 端口信息
    - port: 8080                # service 的端口
      targetPort: 8080  # 容器tomcat的端口
      nodePort: 8076   # 自定义对外开发的端口
  selector:                #  选择标签器
    app: tomcat3            # app tomcat 此名字要匹配deployment 的app: tomcat

案例四、

apiVersion: v1
kind: Namespace
metadata:
  name: test-tomcat2
---
apiVersion: apps/v1
kind: Deployment                #绑定的是Deployment模板
metadata:    #元数据
  name: tomcat-deployment2               # deployment模板的名字
  namespace: test-tomcat2
  labels:                                          # 标签
    app: tomcat                             # app 名字,需要和后面的service.yaml 一致
spec:                                              # pod 的描述信息
  replicas: 2                                   # 开启两个pods
  selector:                                             #关联pod 选择器
    matchLabels:
      app: tomcat                               # 需要和app 一致
  template:
    metadata:
      labels:
        app: tomcat                             # 需要和app 名字一致
    spec:
      nodeSelector:
        node: master02 #指定节点运行
      volumes:                                  # 宿主机挂载目录
      - name: web-app-webapps     # 给需要挂载的宿主机路径起个名字
        hostPath:                                # 宿主机路径
          path: /home/yida/test/webapps      # 路径: 宿主机路径目录       
      - name: web-app-logs
        hostPath:
          path: /home/yida/test/logs
      containers:                                # 容器描述     
      - name: tomcat                     # 容器的名字
        image: 10.143.133.15:5000/tomcat9   # 要拉取的镜像地址
        resources:
          limits:
            memory: 4Gi
          requests:
            memory: 2Gi
        ports:                                  # 容器内部映射的端口号
        - containerPort: 8080    #  容器内部映射的端口号
        volumeMounts:                   # 容器内部映射的目录路径
        - name: web-app-webapps  # 给需要映射的目录路径起个名字,名字要和上面的宿主机器的名字对应
          mountPath: /usr/local/tomcat/webapps  # 容器内部映射挂载的目录路径
        - name: web-app-logs
          mountPath: /usr/local/tomcat/logs
---
apiVersion: v1                  # service api版本
kind: Service                   # 使用service 模块
metadata:                           # 元数据
  name: tomcat-service   # 新建自定义service 模块的名字
  namespace: test-tomcat2
spec:                    # service 信息
  type: NodePort                # 使用Nodeport协议,对外提供开放端口
  ports:                        # 端口信息
    - port: 8080                # service 的端口
      targetPort: 8080  # 容器tomcat的端口
      nodePort: 8026   # 自定义对外开发的端口
  selector:                #  选择标签器
    app: tomcat            # app tomcat 此名字要匹配deployment 的app: tomcat

案例五、固定pod ip

apiVersion: v1
kind: Namespace
metadata:
  name: test-tomcat5
---
apiVersion: v1
kind: Pod               #绑定的是pod模板
metadata:    #元数据
  name: tomcat3333               # deployment模板的名字
  namespace: test-tomcat5
  labels:                                          # 标签
    app: tomcat                             # app 名字,需要和后面的service.yaml 一致
  annotations:                                 #固定pod IP 
    cni.projectcalico.org/ipAddrs: "[\"192.168.217.217\"]"
spec:
  volumes:                                  # 宿主机挂载目录
  - name: web-app-webapps     # 给需要挂载的宿主机路径起个名字
    hostPath:                                # 宿主机路径
      path: /home/yida/test/webapps      # 路径: 宿主机路径目录       
  - name: web-app-logs
    hostPath:
      path: /home/yida/test/logs
  containers:                                # 容器描述     
  - name: tomcat                     # 容器的名字
    image: private.yd-data.com/test/tomcat9:v1   # 要拉取的镜像地址
    resources:
      limits:
        memory: 2Gi
      requests:
        memory: 1Gi
    ports:                                  # 容器内部映射的端口号 
    - containerPort: 8080    #  容器内部映射的端口号
    volumeMounts:                   # 容器内部映射的目录路径
    - name: web-app-webapps  # 给需要映射的目录路径起个名字,名字要和上面的宿主机器的名字对应
      mountPath: /usr/local/tomcat/webapps  # 容器内部映射挂载的目录路径
    - name: web-app-logs
      mountPath: /usr/local/tomcat/logs
---
apiVersion: v1                  # service api版本 
kind: Service                   # 使用service 模块
metadata:                           # 元数据
  name: tomcat-service   # 新建自定义service 模块的名字
  namespace: test-tomcat5
spec:                    # service 信息
  type: NodePort                # 使用Nodeport协议,对外提供开放端口 
  ports:                        # 端口信息
    - port: 8080                # service 的端口
      targetPort: 8080  # 容器tomcat的端口
      nodePort: 18073   # 自定义对外开发的端口
  selector:                #  选择标签器
    app: tomcat            # app tomcat 此名字要匹配deployment 的app: tomcat

案例六、指定命名空间提取私有仓库镜像

apiVersion: v1
kind: Namespace
metadata:
  name: test-tomcat5
---
apiVersion: apps/v1
kind: Deployment                #绑定的是Deployment模板
metadata:    #元数据
  name: tomcat-deployment2               # deployment模板的名字
  namespace: test-tomcat5
  labels:                                          # 标签
    app: tomcat                             # app 名字,需要和后面的service.yaml 一致
spec:                                              # pod 的描述信息
  replicas: 1                                   # 开启两个pods
  selector:                                             #关联pod 选择器
    matchLabels:
      app: tomcat                               # 需要和app 一致
  template:
    metadata:
      labels:
        app: tomcat                             # 需要和app 名字一致
    spec:
      imagePullSecrets:  #提取私有仓库秘钥
      - name: test-tomcat3/login #指定命名空间中的秘钥仓库
      nodeSelector:
        node: master02 #指定节点运行
      volumes:                                  # 宿主机挂载目录
      - name: web-app-webapps     # 给需要挂载的宿主机路径起个名字
        hostPath:                                # 宿主机路径
          path: /home/yida/test/webapps      # 路径: 宿主机路径目录       
      - name: web-app-logs
        hostPath:
          path: /home/yida/test/logs
      containers:                                # 容器描述     
      - name: tomcat                     # 容器的名字
        image: private.yd-data.com/test/tomcat9:v1   # 要拉取的镜像地址
        resources:
          limits:
            memory: 2Gi
          requests:
            memory: 1Gi
        ports:                                  # 容器内部映射的端口号 
        - containerPort: 8080    #  容器内部映射的端口号
        volumeMounts:                   # 容器内部映射的目录路径
        - name: web-app-webapps  # 给需要映射的目录路径起个名字,名字要和上面的宿主机器的名字对应
          mountPath: /usr/local/tomcat/webapps  # 容器内部映射挂载的目录路径
        - name: web-app-logs
          mountPath: /usr/local/tomcat/logs
---
apiVersion: v1                  # service api版本 
kind: Service                   # 使用service 模块
metadata:                           # 元数据
  name: tomcat-service   # 新建自定义service 模块的名字
  namespace: test-tomcat5
spec:                    # service 信息
  type: NodePort                # 使用Nodeport协议,对外提供开放端口 
  ports:                        # 端口信息
    - port: 8080                # service 的端口
      targetPort: 8080  # 容器tomcat的端口
      nodePort: 4497   # 自定义对外开发的端口
  selector:                #  选择标签器
    app: tomcat            # app tomcat 此名字要匹配deployment 的app: tomcat

案例7、 单个pod创建多个容器 并开通外网映射

apiVersion: v1
kind: Namespace
metadata:
  name: test-tomcat6
---
apiVersion: v1
kind: Pod               #绑定的是pod模板
metadata:    #元数据
  name: tomcat-nginx               # deployment模板的名字
  namespace: test-tomcat6
  labels:                                          # 标签
    app: nginx-tomcat                             # app 名字,需要和后面的service.yaml 一致
  annotations:                                 #固定pod IP 
    cni.projectcalico.org/ipAddrs: "[\"192.168.217.216\"]"
spec:
  volumes:                                  # 宿主机挂载目录
  - name: web-app-webapps     # 给需要挂载的宿主机路径起个名字
    hostPath:                                # 宿主机路径
      path: /home/yida/test/webapps      # 路径: 宿主机路径目录       
  - name: web-app-logs
    hostPath:
      path: /home/yida/test/logs
  containers:                                # 容器描述     
  - name: tomcat                     # 容器的名字
    image: private.yd-data.com/test/tomcat9:v1   # 要拉取的镜像地址
    resources:
      limits:
        memory: 2Gi
      requests:
        memory: 1Gi
    ports:                                  # 容器内部映射的端口号 
    - containerPort: 8080    #  容器内部端口号
    volumeMounts:                   # 容器内部映射的目录路径
    - name: web-app-webapps  # 给需要映射的目录路径起个名字,名字要和上面的宿主机器的名字对应
      mountPath: /usr/local/tomcat/webapps  # 容器内部映射挂载的目录路径
    - name: web-app-logs
      mountPath: /usr/local/tomcat/logs
  - name: nginx            #创建第二个容器
    image: nginx:latest
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 80     #容器内部端口号
---
apiVersion: v1                  # service api版本 
kind: Service                   # 使用service 模块
metadata:                           # 元数据
  name: nginx-service   # 新建自定义service 模块的名字
  namespace: test-tomcat6
spec:                    # service 信息
  type: NodePort                # 使用Nodeport协议,对外提供开放端口 
  ports:                        # 端口信息
    - port: 1809                # service 的端口 (CLUSTER-IP)
      targetPort: 80  # 容器tomcat的端口
      nodePort: 48073   # 自定义对外开发的端口
  selector:                #  选择标签器
    app: nginx-tomcat            # app tomcat 此名字要匹配deployment 的app: tomcat

案例8、 elasticsearch pod内网多端口映射

apiVersion: v1
kind: Namespace
metadata:
  name: elasticsearch
---
apiVersion: v1
kind: Pod               #绑定的是pod模板
metadata:    #元数据
  name: es               # deployment模板的名字
  namespace: elasticsearch
  labels:                                          # 标签
    app: myes                             # app 名字,需要和后面的service.yaml 一致
  annotations:                                 #固定pod IP 
    cni.projectcalico.org/ipAddrs: "[\"192.168.106.106\"]"
spec:
  imagePullSecrets:  #提取私有仓库秘钥
  - name: login #指定命名空间中的秘钥仓库
  #nodeSelector:
  #  node: master02
  containers:                                # 容器描述     
  - name: myes01                     # 容器的名字
    image: private.yd-data.com/zjj/es-ps-6.2.2:v1   # 要拉取的镜像地址
    #image: redis   # 要拉取的镜像地址
    imagePullPolicy: Always
    livenessProbe:
      failureThreshold: 2    #失败的最大次数2次
      initialDelaySeconds: 10  #启动容器后10秒开始检测
      periodSeconds: 10  #每过10s检测一次
      successThreshold: 1  #只要成功了1次,就表示成功了
      tcpSocket:  #对容器内的端口或socket进行TCP检查,如果端口成功打开,证明容器正常运行
        port: 9300
      timeoutSeconds: 2
    resources:
      limits:
        memory: 2Gi
        #cpu: 500m
      requests:
        memory: 1Gi
    ports:                                  # 容器内部映射的端口号 
    - containerPort: 9200
    readinessProbe:
      failureThreshold: 2
      initialDelaySeconds: 10
      periodSeconds: 10
      successThreshold: 1
      tcpSocket: #对容器内的端口或socket进行TCP检查,如果端口成功打开,证明容器正常运行
        port: 9300
      timeoutSeconds: 2
---
apiVersion: v1                  # service api版本 
kind: Service                   # 使用service 模块
metadata:                           # 元数据
  name: es-service   # 新建自定义service 模块的名字
  namespace: elasticsearch
spec:                    # service 信息
  #type: ClusterIP                # 使用Nodeport协议,对外提供开放端口 
  type: NodePort                # 使用Nodeport协议,对外提供开放端口 
  ports:                        # 端口信息
    - name: port1                # service 的端口
      port: 9200                # service 的端口
      targetPort: 9200  # 容器tomcat的端口
      nodePort: 9200   # 自定义对外开发的端口
    - name: port2                # service 的端口
      port: 9300                # service 的端口
      targetPort: 9300  # 容器tomcat的端口
      nodePort: 9300   # 自定义对外开发的端口
  selector:                #  选择标签器
    app: myes            # app tomcat 此名字要匹配deployment 的app: tomcat

案例9、rabbitmq数据库存储挂载

apiVersion: v1
kind: Namespace
metadata:
  name: rabbitmq
---
apiVersion: v1
kind: Service
metadata:
  name: rabbit-service
  namespace: rabbitmq
spec:
  type: NodePort
  ports:
    - name: rabbitmq
      port: 5672
      targetPort: 5672
      nodePort: 5672
    - name: management
      port: 15672
      targetPort: 15672
      nodePort: 15672
  selector:
    app: rabmq

---

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: myrabbit
  namespace: rabbitmq
spec:
  serviceName: rabbitmq-service
  replicas: 1
  selector:
    matchLabels:
      app: rabmq
  template:
    metadata:
      labels:
        app: rabmq
    spec:
      imagePullSecrets:
        - name: login
      containers:
        - name: myrabbitmq
          image: private.yd-data.com/zjj/rabbitmq-3.12.2
          ports:
            - containerPort: 5672
            - containerPort: 15672
          #env:
          #  - name: RABBITMQ_DEFAULT_USER
          #    value: "Ydmqadmin"
          #  - name: RABBITMQ_DEFAULT_PASS
          #    value: "12345678"
          resources:
            limits:
              cpu: 1024m
              memory: 2048Mi
            requests:
              cpu: 100m
              memory: 200Mi
          livenessProbe:
            initialDelaySeconds: 30
            periodSeconds: 10
            timeoutSeconds: 5
            successThreshold: 1
            failureThreshold: 3
            tcpSocket:
              port: 5672
          readinessProbe:
            initialDelaySeconds: 10
            periodSeconds: 10
            timeoutSeconds: 5
            successThreshold: 1
            failureThreshold: 3
            tcpSocket:
              port: 5672
          volumeMounts:
            - name: data
              mountPath: /var/lib/rabbitmq
            - name: localtime
              readOnly: true  #表示这个挂载点是只读的,不允许对其进行写操作。
              mountPath: /etc/localtime
      volumes:
        - name: data
          hostPath:
            type: DirectoryOrCreate   #表示宿主机路径的类型是"DirectoryOrCreate",即如果路径不存在就创建一个目录.
            path: /home/yida/test-data/data2
        - name: localtime
          hostPath:
            type: File
            path: /etc/localtime
      nodeName: k8s-node02  #表示此配置指定了容器所在的节点的名称。在Kubernetes集群中,一个节点代表着物理或虚拟机器,容器可以被调度到特定的节点上运行。

案例10、rocketmq环境变量设置

apiVersion: v1
kind: Namespace
metadata:
  name: rocketmq
---
apiVersion: v1
kind: Pod               #绑定的是pod模板
metadata:    #元数据
  name: rocket               # deployment模板的名字
  namespace: rocketmq
  labels:                                          # 标签
    app: myrocket                             # app 名字,需要和后面的service.yaml 一致
  annotations:                                 #固定pod IP 
    cni.projectcalico.org/ipAddrs: "[\"192.168.106.206\"]"
spec:
  imagePullSecrets:  #提取私有仓库秘钥
  - name: login #指定命名空间中的秘钥仓库
  containers:                                # 容器描述     
  - name: namesrv                     # 容器的名字
    image: private.yd-data.com/zjj/rocketmq-4.9.3:v1   # 要拉取的镜像地址
    imagePullPolicy: Always
    command: ["/bin/sh","mqnamesrv"]
    ports:
    - containerPort: 9876
      name: tcp-9876
      protocol: TCP
    resources:
      limits:
        memory: 600Mi
      requests:
        memory: 600Mi
  - name: broker
    image: private.yd-data.com/zjj/rocketmq-4.9.3:v1
    imagePullPolicy: Always
    env:
    - name: NAMESRV_ADDR
      value: 192.168.106.206:9876
    command: ["/bin/sh","mqbroker"]
    ports:
    - containerPort: 10909
      name: tcp-10909
      protocol: TCP
    - containerPort: 10911
      name: tcp-10911
      protocol: TCP
    - containerPort: 10912
      name: tcp-10912
      protocol: TCP

---
apiVersion: v1
kind: Service
metadata:
  name: rocketmq-service
  namespace: rocketmq
spec:
  ports:
  - name: tcp-9876
    port: 9876
    protocol: TCP
    targetPort: 9876
  - name: tcp-10909
    port: 10909
    protocol: TCP
    targetPort: 10909
  - name: tcp-10911
    port: 10911
    protocol: TCP
    targetPort: 10911
  - name: tcp-10912
    port: 10912
    protocol: TCP
    targetPort: 10912
  selector:
    app: myrocket
apiVersion: v1
kind: Namespace
metadata:
  name: rocketmq
---
apiVersion: v1
kind: Pod               #绑定的是pod模板
metadata:    #元数据
  name: rocket-console               # deployment模板的名字
  namespace: rocketmq
  labels:                                          # 标签
    app: myroc-console                             # app 名字,需要和后面的service.yaml 一致
spec:
  containers:                                # 容器描述     
  - name: roc-console                     # 容器的名字
    image: private.yd-data.com/zjj/rocket-console-ng:v1   # 要拉取的镜像地址
    env:
    - name: JAVA_OPTS
      value: -Drocketmq.namesrv.addr=192.168.106.206:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false   #注意替换此处namesrv svc的名称
---
apiVersion: v1                  # service api版本 
kind: Service                   # 使用service 模块
metadata:                           # 元数据
  name: rocket-console-service   # 新建自定义service 模块的名字
  namespace: rocketmq
spec:                    # service 信息
  type: NodePort                # 使用Nodeport协议,对外提供开放端口 
  ports:                        # 端口信息
    - port: 8080                # service 的端口 (CLUSTER-IP)
      targetPort: 8080  # 容器tomcat的端口
      nodePort: 8080   # 自定义对外开发的端口
  selector:                #  选择标签器
    app: myroc-console            # app tomcat 此名字要匹配deployment 的app: tomcat

案例11、nacos配置文件映射

apiVersion: v1
kind: Namespace
metadata:
  name: nacos

---
apiVersion: v1
kind: ConfigMap
metadata:
  name: nacos-configmap
  namespace: nacos
data:
  MYSQL_SERVICE_HOST: '10.143.133.118'
  MYSQL_SERVICE_PORT: '3306'
  MYSQL_SERVICE_DB_NAME: 'nacos'
  MYSQL_SERVICE_DB_PARAM: 'characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8'
  MYSQL_SERVICE_USER: 'yida'
  MYSQL_SERVICE_PASSWORD: 'xxxxxx'
  SPRING_DATASOURCE_PLATFORM: 'mysql'
  MODE: 'standalone'

---

apiVersion: v1
kind: Service
metadata:
  name: nacos-service
  namespace: nacos
spec:
  type: NodePort
  selector:
    app: nacos-app
  ports:
    - name: http
      port: 8848
      targetPort: 8848
      nodePort: 8848

---

apiVersion: v1
kind: Pod
metadata:
  name: nacos
  namespace: nacos
  labels:                                          # 标签
    app: nacos-app                             # app 名字,需要和后面的service.yaml 一致
  annotations:                                 #固定pod IP 
    cni.projectcalico.org/ipAddrs: "[\"192.168.106.201\"]"
spec:
 imagePullSecrets:  #提取私有仓库秘钥
 - name: login #指定命名空间中的秘钥仓库
 containers:
 - name: mynacos
   image: private.yd-data.com/zjj/nacos-2.0.2
   imagePullPolicy: Always
   livenessProbe:
     failureThreshold: 2    #失败的最大次数2次
     initialDelaySeconds: 10  #启动容器后10秒开始检测
     periodSeconds: 10  #每过10s检测一次
     successThreshold: 1  #只要成功了1次,就表示成功了
     tcpSocket:  #对容器内的端口或socket进行TCP检查,如果端口成功打开,证明容器正常运行
       port: 8848
     timeoutSeconds: 2
   ports:
   - containerPort: 8848
   readinessProbe:
     failureThreshold: 2
     initialDelaySeconds: 10
     periodSeconds: 10
     successThreshold: 1
     tcpSocket: #对容器内的端口或socket进行TCP检查,如果端口成功打开,证明容器正常运行
       port: 8848
     timeoutSeconds: 2
   envFrom:
     - configMapRef:
         name: nacos-configmap

案例12、积分实战

apiVersion: v1
kind: Namespace
metadata:
  name: jf
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: jf-configmap
  namespace: jf
data:
  MYSQL_SERVICE_HOST: '10.143.133.118'
  MYSQL_SERVICE_PORT: '3306'
  MYSQL_SERVICE_USER: 'yida'
  MYSQL_SERVICE_PASSWORD: 'z9ufenaRc3QaH1'
  REDIS_SERVICE_HOST: '10.143.133.92'
  REDIS_SERVICE_PORT: '6379'

---
apiVersion: apps/v1
kind: Deployment                #绑定的是Deployment模板
metadata:    #元数据
  name: jf-deploy               # deployment模板的名字
  namespace: jf
  labels:                                          # 标签
    app: app-jf                             # app 名字,需要和后面的service.yaml 一致
spec:                                              # pod 的描述信息
  replicas: 1                                   # 开启两个pods
  selector:                                             #关联pod 选择器
    matchLabels:
      app: app-jf                               # 需要和app 一致
  template:
    metadata:
      labels:
        app: app-jf                             # 需要和app 名字一致
    spec:
      volumes:                                  # 宿主机挂载目录
      - name: web-app-logs
        hostPath:
          path: /home/yida/jf/logs
          type: DirectoryOrCreate #表示宿主机路径的类型是"DirectoryOrCreate",即如果路>径不存在就创建一个目录

      containers:                                # 容器描述     
      - name: tomcat                     # 容器的名字
        image: private.yd-data.com/jf/jftomcat:v1   # 要拉取的镜像地址
        imagePullPolicy: Always    #默认值,本地有则使用本地镜像,不拉取
        resources:
          limits:
            memory: 2Gi
          requests:
            memory: 1Gi
        ports:                                  # 容器内部映射的端口号 
        - containerPort: 8080    #  容器内部映射的端口号
        livenessProbe: #探测pod是否健康
          httpGet:   #状态在200-400 为正确
            path: /pointsWeb/a/points/toConfigJsp
            port: 8080
          initialDelaySeconds: 60
          timeoutSeconds: 20
          periodSeconds: 30          # 探测周期,每30s探测一次
          successThreshold: 1        # 连续探测1次成功表示成功
          failureThreshold: 3        # 连续探测3次失败表示失败
        readinessProbe: #探测访问状态请求
          httpGet:
            path: /pointsWeb/a/points/toConfigJsp
            port: 8080
          initialDelaySeconds: 60 #容器启动多久后开始探测
          timeoutSeconds: 20 #表示容器必须在5s内做出相应反馈给probe,否则视为探测失败
          periodSeconds: 30          # 探测周期,每30s探测一次
          successThreshold: 1        # 连续探测1次成功表示成功
          failureThreshold: 3        # 连续探测3次失败表示失败
      restartPolicy: Always #Always :容器失效时,自动重启该容器,这也是默认值。 OnFailure : 容器终止运行且退出码不为0时重启  Never : 不论状态为何,都不重启该容器  
        volumeMounts:                   # 容器内部映射的目录路径
        - name: web-app-logs
          mountPath: /usr/local/tomcat/logs
        envFrom:
        - configMapRef:
            name: jf-configmap


---
apiVersion: v1                  # service api版本 
kind: Service                   # 使用service 模块
metadata:                           # 元数据
  name: jf-service   # 新建自定义service 模块的名字
  namespace: jf
spec:                    # service 信息
  type: NodePort                # 使用Nodeport协议,对外提供开放端口 
  ports:                        # 端口信息
    - port: 8080                # service 的端口
      targetPort: 8080  # 容器tomcat的端口
      nodePort: 8076   # 自定义对外开发的端口
  selector:                #  选择标签器
    app: app-jf            # app tomcat 此名字要匹配deployment 的app: tomcat

案例13、externalIPs固定service ip

apiVersion: v1
kind: Namespace
metadata:
  name: test-service111
---
apiVersion: v1                  # service api版本 
kind: Service                   # 使用service 模块
metadata:                           # 元数据
  name: myservice   # 新建自定义service 模块的名字
  namespace: test-service111
spec:                    # service 信息
  type: NodePort                # 使用Nodeport协议,对外提供开放端口 
  ports:                        # 端口信息
    - port: 8080                # service 的端口
      targetPort: 8080  # 容器tomcat的端口
      nodePort: 6903   # 自定义对外开发的端口
  externalIPs:
  - 10.23.109.25
  selector:                #  选择标签器
    app: tomcat3            # app tomcat 此名字要匹配deployment 的app: tomcat
posted @   追梦$少年  阅读(261)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示