Deployment
deployment-centos
apiVersion: apps/v1
kind: Deployment
metadata:
name: deployment-centos
spec:
replicas: 2
selector:
matchLabels:
name: deployment-centos
template:
metadata:
labels:
name: deployment-centos
spec:
containers:
- name: centos
image: centos:7
imagePullPolicy: IfNotPresent
command:
- sleep
- "360"
deployment-jenkins
apiVersion: apps/v1
kind: Deployment
metadata:
name: deployment-jenkins
labels:
app: deployment-jenkins
spec:
replicas: 1
selector:
matchLabels:
app: jenkins
template:
metadata:
labels:
app: jenkins
spec:
containers:
- name: test-jenkins
image: jenkins/jenkins:2.409
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: jenkins-service
spec:
type: NodePort
ports:
- port: 8080
nodePort: 30000
selector:
app: jenkins
deployment-nginx(回滚操作)
apiVersion: apps/v1
kind: Deployment
metadata:
name: deploy-nginx
spec:
replicas: 4
selector:
matchLabels:
name: deploy-nginx
strategy:
type: RollingUpdate
minReadySeconds: 5 #指定多少秒后更新
rollingUpdate:
maxSurge: 2 #升级的百分比或者数字
maxUnavailable: 3 #升级失败的百分比或数字
template:
metadata:
labels:
name: deploy-nginx
spec:
containers:
- name: nginx
image: nginx:1.20
ports:
- containerPort: 80
DaemonSet
daemonset-zabbix
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: daemonset-zabbix-agent
labels:
name: daemonset-zabbix-agent
spec:
selector:
matchLabels:
name: daemonset-zabbix-agent
template:
metadata:
labels:
name: daemonset-zabbix-agent
spec:
containers:
- name: daemonset-zabbix-agent
image: busybox:1.27
imagePullPolicy: IfNotPresent
command:
- sleep
- "300"
---
apiVersion: v1
kind: Service
metadata:
name: zabbix-agent-service
labels:
name: zabbix-agent-service
spec:
type: NodePort
ports:
- port: 10050
nodePort: 30010
selector:
name: daemonset-zabbix-agent
StatefulSet
statefulset-mysql(nfs共享存储)
apiVersion: v1
kind: ConfigMap
metadata:
name: config-mysql
data:
db_password: redhat
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: statefuset
spec:
replicas: 2
selector:
matchLabels:
app: mysql
serviceName: "mysql"
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:5.7
imagePullPolicy: IfNotPresent
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
configMapKeyRef:
name: config-mysql
key: db_password
ports:
- containerPort: 3306
volumeMounts:
- name: mysql-volume
mountPath: /var/lib/mysql
volumes:
- name: mysql-volume
nfs:
server: 192.168.252.144
path: "/data"
statefulset-mysql(pv,pvc)
apiVersion: v1
kind: PersistentVolume
metadata:
name: test1-mysql-pv
spec:
capacity:
storage: 8G
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Recycle
nfs:
server: 192.168.252.16
path: /data3
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: test1-mysql-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 6G
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: test-mysql
spec:
replicas: 1
selector:
matchLabels:
app: test-mysql
serviceName: "test-mysql"
template:
metadata:
labels:
app: test-mysql
spec:
containers:
- name: mysql
image: mysql:5.7
imagePullPolicy: IfNotPresent
env:
- name: MYSQL_ROOT_PASSWORD
value: redhat
volumeMounts:
- name: mysql-data-volume
mountPath: /var/lib/mysql
volumes:
- name: mysql-data-volume
persistentVolumeClaim:
claimName: test1-mysql-pvc
---
apiVersion: v1
kind: Service
metadata:
name: test-mysql
spec:
ports:
- port: 3306
selector:
app: test-mysql
ConfigMap
configmap-mysql(pv,pvc)
apiVersion: v1
kind: PersistentVolume
metadata:
name: test1-mysql-pv
spec:
capacity:
storage: 8G
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Recycle
nfs:
server: 192.168.252.16
path: /data3
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: test1-mysql-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 6G
---
apiVersion: v1
kind: ConfigMap
metadata:
name: mysql-config
data:
db_password: redhat
db_name: jiaowu
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql
spec:
replicas: 1
selector:
matchLabels:
app: mysql
serviceName: "test-mysql"
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:5.7
imagePullPolicy: IfNotPresent
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
configMapKeyRef:
name: mysql-config
key: db_password
- name: MYSQL_DATABASE
valueFrom:
configMapKeyRef:
name: mysql-config
key: db_name
volumeMounts:
- name: mysql-data-volume
mountPath: /var/lib/mysql
volumes:
- name: mysql-data-volume
persistentVolumeClaim:
claimName: test1-mysql-pvc
---
apiVersion: v1
kind: Service
metadata:
name: test-mysql
spec:
ports:
- port: 3306
selector:
app: test-mysql
config-map(configmap)
apiVersion: v1
kind: ConfigMap
metadata:
name: mysql-config-02
data:
db_password: redhat
my.cnf: |
[mysqld]
server_id=10
log_bin=master
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql-deploy-02
spec:
replicas: 2
selector:
matchLabels:
app: mysql57-02
template:
metadata:
labels:
app: mysql57-02
spec:
containers:
- name: dbserver-02
image: mysql:5.7
imagePullPolicy: IfNotPresent
env:
- name: MYSQL_ROOT_PASSWORD
value: redhat
volumeMounts:
- name: mysql-config-volume
mountPath: "/etc/mysql/"
readOnly: true
volumes:
- name: mysql-config-volume
projected:
sources:
- configMap:
name: mysql-config-02
PV,PVC
test1-pvc
apiVersion: v1
kind: PersistentVolume
metadata:
name: test1-pv
spec:
capacity:
storage: 2G
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Recycle
nfs:
server: 192.168.252.16
path: /data1
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: test1-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 2G
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: test1-pvc-pod
spec:
replicas: 1
selector:
matchLabels:
name: test1-pvc-pod
template:
metadata:
labels:
name: test1-pvc-pod
spec:
containers:
- name: test1-pvc-pod
image: centos:7
imagePullPolicy: IfNotPresent
command:
- sleep
- "3600"
volumeMounts:
- name: nfs-pvc-test1
mountPath: /data1
volumes:
- name: nfs-pvc-test1
persistentVolumeClaim:
claimName: test1-pvc
test2-pvc
apiVersion: v1
kind: PersistentVolume
metadata:
name: test2-pv
spec:
capacity:
storage: 4G
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Recycle
nfs:
server: 192.168.252.16
path: /data2
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: test2-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 4G
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: test2-pvc-pod
spec:
replicas: 1
selector:
matchLabels:
name: test2-pvc-pod
template:
metadata:
labels:
name: test2-pvc-pod
spec:
containers:
- name: test2-pvc-pod
image: centos:7
imagePullPolicy: IfNotPresent
command:
- sleep
- "3600"
volumeMounts:
- name: nfs-pvc-test2
mountPath: /data2
volumes:
- name: nfs-pvc-test2
persistentVolumeClaim:
claimName: test2-pvc
Job、CronJob
job
apiVersion: batch/v1
kind: Job
metadata:
name: test1-job
spec:
template:
metadata:
name: test1-job
spec:
restartPolicy: Never
containers:
- name: test1-job
image: centos:7
imagePullPolicy: IfNotPresent
command:
- "/bin/bash"
- "-c"
- "for i in 1 2 3 4 5; do echo $i; done"
cronjob
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: cronjob-demo
spec:
successfulJobsHistoryLimit: 3
failedJobsHistoryLimit: 3
schedule: "*/1 * * * *"
jobTemplate:
spec:
template:
metadata:
name: cronjob-demo
spec:
restartPolicy: OnFailure
containers:
- name: counter02
image: busybox
imagePullPolicy: IfNotPresent
command:
- "/bin/sh"
- "-c"
- "for i in 9 8 7 6 5; do echo $i; done"
Service
clusterip类型,有IP
apiVersion: apps/v1
kind: Deployment
metadata:
name: test1-nginx
labels:
app: test1-nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: test1-nginx
image: nginx:1.20
imagePullPolicy: IfNotPresent
---
apiVersion: v1
kind: Service
metadata:
name: test-nginx-service
labels:
app: test-nginx-service
spec:
ports:
- port: 80
selector:
app: nginx
clusterip类型,无ip
apiVersion: apps/v1
kind: Deployment
metadata:
name: test2-nginx
labels:
app: test2-nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx2
template:
metadata:
labels:
app: nginx2
spec:
containers:
- name: test2-nginx
image: nginx:1.20
imagePullPolicy: IfNotPresent
---
apiVersion: v1
kind: Service
metadata:
name: test2-nginx-service
labels:
app: test2-nginx-service
spec:
clusterIP: None
ports:
- port: 80
selector:
app: nginx2
nodeport类型
apiVersion: apps/v1
kind: Deployment
metadata:
name: test3-nginx
labels:
app: test3-nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx3
template:
metadata:
labels:
app: nginx3
spec:
containers:
- name: test3-nginx
image: nginx:1.20
imagePullPolicy: IfNotPresent
---
apiVersion: v1
kind: Service
metadata:
name: test3-nginx-service
labels:
app: test3-nginx-service
spec:
type: NodePort
ports:
- port: 80
nodePort: 30001
selector:
app: nginx3
ingress 基于名称发布nginx
apiVersion: apps/v1
kind: Deployment
metadata:
name: test-nginx-deploy
spec:
replicas: 2
selector:
matchLabels:
name: test-nginx-deploy
template:
metadata:
labels:
name: test-nginx-deploy
spec:
containers:
- name: webserver
image: nginx:1.18
imagePullPolicy: IfNotPresent
---
apiVersion: v1
kind: Service
metadata:
name: test-service
spec:
ports:
- port: 80
selector:
name: test-nginx-deploy
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-nginx
annotations:
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- host: test.linux.com
http:
paths:
- path:
backend:
serviceName: test-service
servicePort: 80
ingress 基于名称发布tomcat
apiVersion: apps/v1
kind: Deployment
metadata:
name: test-tomcat
spec:
replicas: 2
selector:
matchLabels:
name: test-tomcat
template:
metadata:
labels:
name: test-tomcat
spec:
containers:
- name: tomcatserver
image: tomcat
imagePullPolicy: IfNotPresent
---
apiVersion: v1
kind: Service
metadata:
name: test-tomcat-service
spec:
ports:
- port: 8080
selector:
name: test-tomcat
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-tomcat
annotations:
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- host: java.linux.com
http:
paths:
- path:
backend:
serviceName: test-tomcat-service
servicePort: 8080
Volume
emptydir 临时卷
apiVersion: apps/v1
kind: Deployment
metadata:
name: test1-centos
labels:
app: test1-centos
spec:
replicas: 1
selector:
matchLabels:
app: centos
template:
metadata:
labels:
app: centos
spec:
containers:
- name: centos
image: centos:7
imagePullPolicy: IfNotPresent
command:
- sleep
- "3600"
volumeMounts:
- name: test1-volume
mountPath: /test1
volumes:
- name: test1-volume
emptyDir: {}
hostpath 挂载物理机目录
apiVersion: apps/v1
kind: Deployment
metadata:
name: test2-centos
labels:
app: test2-centos
spec:
replicas: 1
selector:
matchLabels:
app: test2-centos
template:
metadata:
labels:
app: test2-centos
spec:
containers:
- name: test2-pod
image: centos:7
imagePullPolicy: IfNotPresent
command:
- sleep
- "3600"
volumeMounts:
- name: test2-volume
mountPath: /test2
volumes:
- name: test2-volume
hostPath:
path: /data
nfs 网络卷
apiVersion: apps/v1
kind: Deployment
metadata:
name: test3-centos
labels:
app: test3-centos
spec:
replicas: 1
selector:
matchLabels:
app: test3-centos
template:
metadata:
labels:
app: test3-centos
spec:
containers:
- name: test3-centos
image: centos:7
imagePullPolicy: IfNotPresent
command:
- sleep
- "3600"
volumeMounts:
- name: test3-volume
mountPath: /test3
volumes:
- name: test3-volume
nfs:
server: "192.168.252.16"
path: "/data"
Schduler
nodename node名称调度
apiVersion: apps/v1
kind: Deployment
metadata:
name: test1
labels:
app: centos7
spec:
replicas: 2
selector:
matchLabels:
app: centos7
template:
metadata:
labels:
app: centos7
spec:
nodeName: node02
containers:
- name: centos7
image: centos:7
imagePullPolicy: IfNotPresent
command:
- sleep
- "36000"
nodeselector 标签调度
apiVersion: apps/v1
kind: Deployment
metadata:
name: test-deploy
labels:
app: test-deploy
spec:
replicas: 2
selector:
matchLabels:
app: test-pod
template:
metadata:
labels:
app: test-pod
spec:
nodeSelector:
ram: high
nodeName: node01
containers:
- name: test-pod
image: centos:7
imagePullPolicy: IfNotPresent
command:
- sleep
- "36000"
wordpress项目,MySQL主从配置,PV,PVC,Redis
apiVersion: v1
kind: Namespace
metadata:
name: wordpress
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-master-pv
namespace: wordpress
spec:
capacity:
storage: 20G
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Recycle
nfs:
server: 192.168.252.16
path: /wordpress_master_data
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-slave-pv
namespace: wordpress
spec:
capacity:
storage: 20G
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Recycle
nfs:
server: 192.168.252.16
path: /wordpress_slave_data
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-master-pvc
namespace: wordpress
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 15G
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-slave-pvc
namespace: wordpress
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 15G
---
apiVersion: v1
kind: ConfigMap
metadata:
name: mysql-master-config
namespace: wordpress
data:
my.cnf: |
[mysqld]
server_id=10
log_bin=master
collation-server = utf8_general_ci
character-set-server = utf8
gtid_mode=on
enforce_gtid_consistency=true
---
apiVersion: v1
kind: ConfigMap
metadata:
name: mysql-slave-config
namespace: wordpress
data:
my.cnf: |
[mysqld]
server_id=11
log_bin=master
collation-server = utf8_general_ci
character-set-server = utf8
gtid_mode=on
enforce_gtid_consistency=true
read_only=1
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: wordpress-master-mysql
namespace: wordpress
spec:
replicas: 1
selector:
matchLabels:
name: wordpress-master-mysql
serviceName: "mysql-master"
template:
metadata:
labels:
name: wordpress-master-mysql
spec:
containers:
- name: wordpress-master-mysql
image: mysql:5.7
imagePullPolicy: IfNotPresent
env:
- name: MYSQL_ROOT_PASSWORD
value: redhat
- name: MYSQL_DATABASE
value: wordpress
- name: MYSQL_USER
value: wordpress
- name: MYSQL_PASSWORD
value: redhat
ports:
- containerPort: 3306
volumeMounts:
- name: mysql-master-data-volume
mountPath: /var/lib/mysql
- name: mysql-master-config-volume
mountPath: "/etc/mysql/"
readOnly: true
volumes:
- name: mysql-master-data-volume
persistentVolumeClaim:
claimName: mysql-master-pvc
- name: mysql-master-config-volume
projected:
sources:
- configMap:
name: mysql-master-config
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: wordpress-slave-mysql
namespace: wordpress
spec:
replicas: 1
selector:
matchLabels:
name: wordpress-slave-mysql
serviceName: "mysql-slave"
template:
metadata:
labels:
name: wordpress-slave-mysql
spec:
containers:
- name: wordpress-salve-mysql
image: mysql:5.7
imagePullPolicy: IfNotPresent
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: redhat
volumeMounts:
- name: mysql-slave-data-volume
mountPath: /var/lib/mysql
- name: mysql-slave-config-volume
mountPath: "/etc/mysql/"
readOnly: true
volumes:
- name: mysql-slave-data-volume
persistentVolumeClaim:
claimName: mysql-slave-pvc
- name: mysql-slave-config-volume
projected:
sources:
- configMap:
name: mysql-slave-config
---
apiVersion: v1
kind: Service
metadata:
name: mysql-master
namespace: wordpress
spec:
ports:
- port: 3306
selector:
name: wordpress-master-mysql
---
apiVersion: v1
kind: Service
metadata:
name: mysql-slave
namespace: wordpress
spec:
ports:
- port: 3306
selector:
name: wordpress-slave-mysql
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress
namespace: wordpress
spec:
replicas: 1
selector:
matchLabels:
name: wordpress
template:
metadata:
labels:
name: wordpress
spec:
containers:
- name: wordpress
image: wordpress:latest
imagePullPolicy: IfNotPresent
env:
- name: WORDPRESS_DB_HOST
value: mysql-master
- name: WORDPRESS_DB_USER
value: wordpress
- name: WORDPRESS_DB_PASSWORD
value: redhat
- name: WORDPRESS_DB_NAME
value: wordpress
- name: WORDPRESS_TABLE_PREFIX
value: wp_
ports:
- containerPort: 80
volumeMounts:
- name: wordpress-volume
mountPath: /var/www/html/wp-config.php
subPath: wp-config.php
volumes:
- name: wordpress-volume
nfs:
server: "192.168.252.16"
path: "/data"
---
apiVersion: v1
kind: Service
metadata:
name: wordpress
namespace: wordpress
spec:
ports:
- port: 80
selector:
name: wordpress
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-test
namespace: wordpress
annotations:
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- host: wordpress.linux.com
http:
paths:
- path:
backend:
serviceName: wordpress
servicePort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress-redis
namespace: wordpress
spec:
replicas: 1
selector:
matchLabels:
name: redis
template:
metadata:
labels:
name: redis
spec:
containers:
- name: redis
image: redis:latest
imagePullPolicy: IfNotPresent
ports:
- containerPort: 6379
---
apiVersion: v1
kind: Service
metadata:
name: redis
namespace: wordpress
spec:
ports:
- port: 6379
selector:
name: redis