部署deployment + statefulset 服务测试
部署deployment
环境准备:
环境中需要部署storageclass 可以提供创建pv,pvc能力
环境中需要部署ingress-controller 可以使用域名访问pod
资源创建
pv-pvc资源创建
# pv
apiVersion: v1
kind: PersistentVolume
metadata:
name: default-pv
namespace: default
spec:
persistentVolumeReclaimPolicy: "Recycle"
accessModes:
- ReadWriteOnce
storageClassName: "nfs-storage"
capacity:
storage: 2Gi
nfs:
server: 10.0.0.13
path: /data/
# pvc
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: default-pvc
namespace: default
spec:
accessModes:
- ReadWriteOnce
storageClassName: "nfs-storage"
resources:
requests:
storage: 1Gi
deployment资源创建
apiVersion: apps/v1
kind: Deployment
metadata:
name: default-deploy-nginx
namespace: default
spec:
replicas: 3
selector:
matchLabels:
iter: nginx
template:
metadata:
labels:
iter: nginx
spec:
initContainers:
- name: busybox
image: busybox
imagePullPolicy: IfNotPresent
command: ["/bin/sh"]
args: ["-c","echo statefulset-deploy-nginx-pod > /data/index.html"]
volumeMounts:
- name: mount-deploy
mountPath: /data/
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
ports:
- name: http
containerPort: 80
volumeMounts:
- name: mount-deploy
mountPath: /usr/share/nginx/html
volumes:
- name: mount-deploy
persistentVolumeClaim:
claimName: default-pvc
service资源创建
apiVersion: v1
kind: Service
metadata:
name: default-svc-nginx
namespace: default
spec:
selector:
iter: nginx
ports:
- name: www
port: 80
targetPort: 80
ingress资源创建
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: default-ing-nginx
namespace: default
spec:
rules:
- host: www.nginx.com
http:
paths:
- path: /
backend:
serviceName: default-svc-nginx
servicePort: 80
资源检查
[root@master deployment]# kubectl get pv,pvc
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
persistentvolume/default-pv 2Gi RWO Recycle Bound default/default-pvc nfs-storage 23m
persistentvolume/pvc-05eb79f7-4554-4e0f-a6a5-b2e42e7c52d4 1Gi RWO Delete Bound default/test-default-sts-test-1 managed-nfs-storage 47m
persistentvolume/pvc-2236aadf-bd89-4975-afa1-1ad2d49eee8d 1Gi RWO Delete Bound default/test-default-sts-test-2 managed-nfs-storage 47m
persistentvolume/pvc-eb955f49-12c2-4f02-aea8-44ef3b8cd02f 1Gi RWO Delete Bound default/test-default-sts-test-0 managed-nfs-storage 48m
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
persistentvolumeclaim/default-pvc Bound default-pv 2Gi RWO nfs-storage 22m
persistentvolumeclaim/test-default-sts-test-0 Bound pvc-eb955f49-12c2-4f02-aea8-44ef3b8cd02f 1Gi RWO managed-nfs-storage 48m
persistentvolumeclaim/test-default-sts-test-1 Bound pvc-05eb79f7-4554-4e0f-a6a5-b2e42e7c52d4 1Gi RWO managed-nfs-storage 47m
persistentvolumeclaim/test-default-sts-test-2 Bound pvc-2236aadf-bd89-4975-afa1-1ad2d49eee8d 1Gi RWO managed-nfs-storage 47m
[root@master deployment]# kubectl get ing,svc,pod
NAME HOSTS ADDRESS PORTS AGE
ingress.extensions/default-ing www.qiaoning.com 80 40m
ingress.extensions/default-ing-nginx www.nginx.com 80 16m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/default-svc ClusterIP None <none> 80/TCP 47m
service/default-svc-nginx ClusterIP 10.254.151.219 <none> 80/TCP 17m
service/kubernetes ClusterIP 10.254.0.1 <none> 443/TCP 62m
NAME READY STATUS RESTARTS AGE
pod/default-deploy-nginx-b6978cc8d-752tb 1/1 Running 0 6m51s
pod/default-deploy-nginx-b6978cc8d-bq8lf 1/1 Running 0 6m51s
pod/default-deploy-nginx-b6978cc8d-k24lc 1/1 Running 0 6m51s
pod/default-sts-test-0 1/1 Running 0 49m
pod/default-sts-test-1 1/1 Running 0 48m
pod/default-sts-test-2 1/1 Running 0 48m
pod/nfs-client-provisioner-64949c6bfc-q2xlv 1/1 Running 0 54m
[root@master deployment]#
配置hosts并测试
[root@master deployment]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.0.12 master
10.0.0.13 node www.nginx.com
[root@master deployment]# curl www.nginx.com
statefulset-deploy-nginx-pod
statefulset服务测试
statefulset资源创建
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: default-sts-test
namespace: default
spec:
serviceName: default-svc
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
ports:
- name: www
containerPort: 80
volumeMounts:
- name: test
mountPath: /usr/share/nginx/html
volumeClaimTemplates:
- metadata:
name: test
spec:
accessModes:
- ReadWriteOnce
storageClassName: "managed-nfs-storage"
resources:
requests:
storage: 1Gi
service资源创建
apiVersion: v1
kind: Service
metadata:
name: default-svc
namespace: default
spec:
selector:
app: nginx
clusterIP: None
ports:
- name: www
port: 80
targetPort: 80
ingress资源创建
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: default-ing
namespace: default
spec:
rules:
- host: www.qiaoning.com
http:
paths:
- path: /
backend:
serviceName: default-svc
servicePort: 80
资源检查
[root@master statefulset]# kubectl get pods,pvc,pv,sts,ing,svc
NAME READY STATUS RESTARTS AGE
pod/default-deploy-nginx-b6978cc8d-752tb 1/1 Running 0 9m33s
pod/default-deploy-nginx-b6978cc8d-bq8lf 1/1 Running 0 9m33s
pod/default-deploy-nginx-b6978cc8d-k24lc 1/1 Running 0 9m33s
pod/default-sts-test-0 1/1 Running 0 52m
pod/default-sts-test-1 1/1 Running 0 50m
pod/default-sts-test-2 1/1 Running 0 50m
pod/nfs-client-provisioner-64949c6bfc-q2xlv 1/1 Running 0 57m
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
persistentvolumeclaim/default-pvc Bound default-pv 2Gi RWO nfs-storage 25m
persistentvolumeclaim/test-default-sts-test-0 Bound pvc-eb955f49-12c2-4f02-aea8-44ef3b8cd02f 1Gi RWO managed-nfs-storage 52m
persistentvolumeclaim/test-default-sts-test-1 Bound pvc-05eb79f7-4554-4e0f-a6a5-b2e42e7c52d4 1Gi RWO managed-nfs-storage 50m
persistentvolumeclaim/test-default-sts-test-2 Bound pvc-2236aadf-bd89-4975-afa1-1ad2d49eee8d 1Gi RWO managed-nfs-storage 50m
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
persistentvolume/default-pv 2Gi RWO Recycle Bound default/default-pvc nfs-storage 26m
persistentvolume/pvc-05eb79f7-4554-4e0f-a6a5-b2e42e7c52d4 1Gi RWO Delete Bound default/test-default-sts-test-1 managed-nfs-storage 50m
persistentvolume/pvc-2236aadf-bd89-4975-afa1-1ad2d49eee8d 1Gi RWO Delete Bound default/test-default-sts-test-2 managed-nfs-storage 50m
persistentvolume/pvc-eb955f49-12c2-4f02-aea8-44ef3b8cd02f 1Gi RWO Delete Bound default/test-default-sts-test-0 managed-nfs-storage 52m
NAME READY AGE
statefulset.apps/default-sts-test 3/3 52m
NAME HOSTS ADDRESS PORTS AGE
ingress.extensions/default-ing www.qiaoning.com 80 43m
ingress.extensions/default-ing-nginx www.nginx.com 80 18m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/default-svc ClusterIP None <none> 80/TCP 50m
service/default-svc-nginx ClusterIP 10.254.151.219 <none> 80/TCP 20m
service/kubernetes ClusterIP 10.254.0.1 <none> 443/TCP 65m
配置hosts 测试
[root@master statefulset]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.0.12 master
10.0.0.13 node www.qiaoning.com www.nginx.com
[root@master statefulset]# while sleep 0.1 ;do curl www.qiaoning.com ;done
333
222
333
111
222
111
333
333
222
222
111
111
333
333
222
222
111
111
测试Pod挂载
apiVersion: v1
kind: Pod
metadata:
name: mount-pod
namespace: default
spec:
containers:
- name: http
image: busybox
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
volumeMounts:
- name: test
mountPath: /data/
command:
- "/bin/sh"
args:
- "-c"
- "sleep infinity
volumes:
- name: test
hostPath:
path: /opt/cni/bin/
---
apiVersion: v1
kind: Pod
metadata:
name: pod-command
namespace: default
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: name
operator: In
values:
- qiaoning
initContainers:
- name: busybox
image: busybox
imagePullPolicy: IfNotPresent
command: ["/bin/sh"]
args: ["-c","sleep 10 ; echo success > /root/Done.txt"]
containers:
- name: qiaoning
image: nginx
imagePullPolicy: IfNotPresent
envFrom:
- configMapRef:
name: default-cm
ports:
- containerPort: 80
lifecycle:
postStart:
exec:
command:
- "/bin/bash"
- "-c"
- "echo hello nginx !!! ; touch /root/qiaoning.txt"
preStop:
exec:
command:
- "/bin/bash"
- "-c"
- "echo hello nginx !!! ; rm -rf /tmp/"
resources:
limits:
cpu: 0.5m
requests:
cpu: 0.3m
volumeMounts:
- name: command-path
mountPath: /usr/share/nginx/html
volumes:
- name: command-path
persistentVolumeClaim:
claimName: default-pvc
各种资源手动编写
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: default-pv
namespace: default
spec:
storageClassName: "nfs-storage"
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle
capacity:
sotrage: 1Gi
nfs:
server: 10.0.0.13
path: /data/
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: default-pvc
namespace: default
spec:
storageClassName: "nfs-storage"
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
---
apiVersion:
kind: Ingress
metadata:
name: default-ing
namespace: default
spec:
rules:
- host: www.qiaoning.com
http:
paths:
- path: /
backend:
serviceName: default-svc
servicePort: 80
---
apiVersion: v1
kind: Service
metadata:
name: default-svc
namespace: default
spec:
clusterIP: None
selector:
app: nginx
ports:
- name: www
port: 80
targetPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: default-deploy
namespace: default
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
ports:
- name: http
containerPort: 80
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: default-sts
namespace: default
spec:
serviceName: default-svc
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: www
image: nginx
imagePullPolicy: IfNotPresent
ports:
- name: http
containerPort: 80
volumeMounts:
- name: test-path
mountPath: /usr/share/nginx/html
volumeClaimTemplates:
- metadata:
name: test-path
spec:
accessModes:
- ReadWriteOnce
storageClassName: "nfs-storage"
resources:
requests:
storage: 1Gi
网友评论