namespace定义
kind: Namespace
apiVersion: v1
metadata:
# 不可以使用 下划线,
name: k8s-tools-os
labels:
name: k8s-tools-os
service定义
# Service
kind: Service
apiVersion: v1
metadata:
# 所属的命名空间
namespace: k8s-tools-os
# Service 名称
name: tools-service-name
# Service 标签
labels:
name: tools-service-label
# 容器的详细定义
spec:
# 选择 Pod的label名
selector:
# Pod的label名
app: tools-pod-label
# 告诉 K8s Docker容器对外开放几个端口,如果指定为 NodePort 则这个service的端口可以被外界访问
type: NodePort
ports:
- name: http
protocol: TCP
# port 是service的端口
port: 880
# targetPort 是pod的端口
targetPort: 80
# 可以被外网访问的端口
nodePort: 30880
创建要部署的容器
# 种类:告诉 k8s 下面这些配置模板的含义(常用的包括:Namespace, Deployment, Service, Pod, ......)
kind: Deployment
# 版本号 规定格式 apps/* 必须这么写
apiVersion: apps/v1
# Pod
metadata:
# Pod 的所属的命名空间
namespace: k8s-tools-os
# Pod 名称
name: tools-pod-name
# 容器的详细定义
spec:
# 告诉 K8s 启动几个节点
replicas: 1
# 滚动升级时,容器准备就绪时间最少为30s
minReadySeconds: 30
# 选择模板
selector:
# 根据模板的labels来选择
matchLabels:
# 选择下面模板中, Pod 的label名
app: tools-pod-label
# 定义 Pod模板
template:
metadata:
# Pod模板的labels
labels:
# Pod的label名,如果和spec.selector
app: tools-pod-label
spec:
# k8s将会给应用发送SIGTERM信号,可以用来正确、优雅地关闭应用,默认为30秒
terminationGracePeriodSeconds: 3
# 将这个pod部署到哪个节点机器上(默认不指定,k8s会自动分配); 因为 nodeName(节点的名称不可以重复,因此使用nodeName只能指定一台节点服务)
# nodeName: k8s-node1
# 将这个pod部署到哪个节点机器上(默认不指定,k8s会自动分配);因为 nodeLabels(节点的标签可以重复,因此使用nodeSelector是可以指定同一个标签的多个节点服务)
nodeSelector:
type: "test"
# 配置 Docker容器
containers:
# 容器名
- name: k8s-tools-os
# 告诉 K8s 要部署的 Docker 镜像名:Tag
image: tools-os:v1.0.0
# 告诉 K8s 如果本地没有这个镜像,那么就新下载一个
imagePullPolicy: IfNotPresent
## 告诉 K8s Docker容器对外开放几个端口
ports:
- containerPort: 80