1.Deployment控制器模板
1.常见模板
apiVersion: apps/v1
kind: Deployment
metadata:
name: bdqn1 #控制器名称
labels:
app: bdqn1 #标签,用于匹配标签选择器
spec:
selector: #定义标签选择器,用于识别pod
matchLabels:
app: bdqn1
replicas: 3 #生成的实例数量
template: #pod模板,用于创建新pod
metadata:
labels:
app: bdqn1 #pod名称
spec:
containers:
- name: bdqn1
image: httpd:latest #容器名称
imagePullPolicy: IfNotPresent #镜像下载策略
ports:
- containerPort: 80 #向外暴露的网络端口2.使用环境变量模板
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment # Deployment 名称
spec:
replicas: 3 # 期望运行的 Pod 副本数量
selector:
matchLabels:
app: my-app # 用于选择关联的 Pod 的标签选择器
template:
metadata:
labels:
app: my-app # 该模板下创建的 Pod 的标签,需与 selector 匹配
spec:
containers:
- name: my-container # 容器名称
image: my-image:tag # 容器使用的镜像及标签
ports:
- containerPort: 80 # 容器内暴露的端口
env: # 环境变量设置
- name: ENV_VAR_NAME_1 # 环境变量名 1
value: "env_var_value_1" # 环境变量值 1
- name: ENV_VAR_NAME_2 # 环境变量名 2
valueFrom: # 从其他源获取环境变量值
configMapKeyRef:
name: my-configmap # 引用的 ConfigMap 名称
key: configmap_key_2 # ConfigMap 中的键名3.挂载pvc模板
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-container
image: my-image:tag
ports:
- containerPort: 80
volumeMounts: # 容器内挂载点配置
- name: my-pvc-volume # 挂载的卷名称,与 volumes 中定义的名称对应
mountPath: /data # 容器内的挂载路径
volumes: # 定义卷
- name: my-pvc-volume
persistentVolumeClaim:
claimName: my-pvc # 引用的持久化卷声明名称2.service服务模板
apiVersion: v1
kind: Service
metadata:
name: bdqn-svc #服务名称
spec:
selector:
app: bdqn1 #标签选择器,指定哪些pod绑定此服务
ports:
- port: 1000 #定义此服务对外暴露的端口
targetPort: 80 #定义此服务映射的pod端口
# nodePort: 32034 #将端口映射至外部主机,范围是 30000-32767(不常用)3.Ingress模板
1.http模板
kind: Ingress
apiVersion: extensions/v1beta1
metadata:
name: bdqn-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: ingress.bdqn.com #定义需要转发的域名
http:
paths:
- path: /nginx #定义网址路径为/nginx时匹配此规则
backend:
serviceName: svc1 #转发至对应service服务
servicePort: 80
- path: /httpd #定义网址路径为/httpd时匹配此规则
backend:
serviceName: svc2
servicePort: 802.https模板
# 需提前将证书保存至k8s集群中
# kubectl create secret tls tls-secret --key=tls.key --cert tls.crt
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: https
spec:
tls:
- hosts:
- ingress5.bdqn.com #匹配启用TLS的域名
secretName: tls-secret #匹配预先保存的证书名称
rules:
- host: ingress5.bdqn.com
http:
paths:
- path: / #所有针对此域名的访问都匹配下列规则
backend:
serviceName: svc-5 #定义匹配转发规则的service服务
servicePort: 804.secret模板
1.yaml文件模板
#不常用
apiVersion: v1
kind: Secret
metadata:
name: mysecret4 #定义secret名称
type: Opaque #填写secret类型(可选)
data: #定义键值对
username: cm9vdAo=
password: MTIzLmNvbQo=2.命令模板
1. --from-literal
kubectl create secret generic secretname --from-literal=key=value2.--from-file
文件名为key
文件内容为value
kubectl create secret generic secretname --from-file=filename3.--from-env-file
#文件内容
key=value
key=valuekubectl create secret generic secretname --from-env-file=envfilename3.使用方法
1.使用secret取环境变量
apiVersion: v1
kind: Pod
metadata:
name: mysql-pod
spec:
containers:
- name: mysql-container
image: mysql:5.7
imagePullPolicy: IfNotPresent
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysecret1 #输入secret名称
key: mysql-root-password #输入secret内部的键名
ports:
- containerPort: 3306
restartPolicy: Always2.使用secret匹配私有仓库用户
创建secret(使用docker-registry类型)
#指定registry类型 secret名称 后面为固定结构(可tab补全)
kubectl create secret docker-registry registry-secret2 --docker-server=192.168.8.6 --docker-username=admin --docker-password=Harbor12345#下载私有仓库镜像
kind: Deployment
apiVersion: apps/v1
metadata:
name: testdeploy
spec:
selector:
matchLabels:
test: registry
replicas: 2
template:
metadata:
labels:
test: registry
spec:
containers:
- name: testdeploy
image: 192.168.8.6/library/nginx:latest #私有仓库地址
imagePullPolicy: IfNotPresent
imagePullSecrets:
- name: secretname #需使用的secret5.pv模板
apiVersion: v1
kind: PersistentVolume
metadata:
name: new-pv #pv名称
spec:
capacity:
storage: 8Gi #pv容量
accessModes: #访问模式
- ReadWriteOnce #表示此持久卷可以被单个节点以读写方式挂载(RWO)
#- ReadOnlyMany 表示此持久卷可被多个节点以只读方式挂载(ROX)
#- ReadWriteMany 表示此持久卷可被多个节点以读写方式挂载(RWX)
persistentVolumeReclaimPolicy: Retain #回收策略(此处为不回收) Recycle(回收) Delete(删除)
nfs: #指定以nfs挂载
path: /nfsdata/new-pv #指定nfs的路径
#readOnly: true 只读(可选)
server: 192.168.8.5 #指定nfs服务器的IP地址6.pvc模板
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc # PVC 的名称,自定义
spec:
accessModes: #访问模式(需与要匹配的pv一致)
- ReadWriteOnce #表示此持久卷可以被单个节点以读写方式挂载(RWO)
#- ReadOnlyMany 表示此持久卷可被多个节点以只读方式挂载(ROX)
#- ReadWriteMany 表示此持久卷可被多个节点以读写方式挂载(RWX)
resources:
requests:
storage: 5Gi #请求的存储容量大小(需小于要匹配的pv)