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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix