반응형
[ dynamic volume 사용법 ]
1. pvc 에 storageclass 를 지정하여 pvc 만 생성하면 pv 가 다이너믹하게 생성되고 pvc 도 생성된다.
2. 이 때 rbd 이미지도 자동으로 생성된다.
$ vi jenkins-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: jenkins
namespace: ci-infra
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 100Gi
storageClassName: ceph
[ static volume 사용법 ]
1. rbd 이미지를 수동으로 생성해야 한다.
2. pv 에 storageclass 와 rbd 값을 모두 넣어야 한다.
pv 에 pvc 에서 pv 를 selector 로 찾을 수 있게 label 값을 넣어야 한다.
(keyring 값은 안넣어도 됨, storageclass의 secret 이용)
3. pvc 에 storageclass 와 selector 나 volumeName 둘 중에 하나를 사용하여 pv 와 연결한다.
(storageclass 는 값은 없어도 됨. 없으면 default 인 storageclass 값을 활용함)
$ vi jenkins-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: jenkins
labels:
app: jenkins
spec:
capacity:
storage: 100Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
storageClassName: ceph
rbd:
image: jenkins
monitors:
- 192.168.30.23:6789
- 192.168.30.24:6789
- 192.168.30.25:6789
pool: kubes
secretRef:
name: ceph-secret-user
user: kube
$ vi jenkins-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: jenkins
namespace: ci-infra
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 100Gi
storageClassName: ceph
selector:
matchLabels:
app: jenkins
# volumeName: jenkins
$ vi jenkins-deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: jenkins
namespace: ci-infra
labels:
app: jenkins
spec:
replicas: 1
strategy:
type: Recreate
template:
metadata:
labels:
app: jenkins
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: cicd-services
operator: In
values:
- enabled
securityContext:
runAsUser: 1000
fsGroup: 1000
containers:
- name: master
env:
- name: JENKINS_OPTS
value: "--httpsPort=0 --http2Port=0"
- name: JAVA_OPTS
value: "-Xms8G -Xmx8G -XX:+UseG1GC -XX:+ExplicitGCInvokesConcurrent -XX:+ParallelRefProcEnabled -XX:+UseStringDeduplication -XX:+UnlockExperimentalVMOptions -XX:G1NewSizePercent=20 -XX:+UnlockDiagnosticVMOptions -XX:G1SummarizeRSetStatsPeriod=1 -Dorg.apache.commons.jelly.tags.fmt.timeZone=Asia/Seoul"
image: jenkins/jenkins:latest
imagePullPolicy: Always
ports:
- containerPort: 8080
name: http
protocol: TCP
- containerPort: 50000
name: jnlp
protocol: TCP
readinessProbe:
httpGet:
path: /login
port: 8080
periodSeconds: 10
timeoutSeconds: 5
successThreshold: 2
failureThreshold: 5
volumeMounts:
- mountPath: /var/jenkins_home
name: jenkins
# resources:
# limits:
# cpu: 4000m
# memory: 8000Mi
# requests:
# cpu: 1000m
# memory: 8000Mi
volumes:
- name: jenkins
persistentVolumeClaim:
claimName: jenkins
## 생성
$ rbd create kubes/jenkins -s 100G
$ kubectl create -f jenkins-pv.yaml
$ kubectl create -f jenkins-pvc.yaml
$ kubectl create -f jenkins-deployment.yaml
반응형