-
Notifications
You must be signed in to change notification settings - Fork 30
Expand file tree
/
Copy pathNotes-Kubernetes-20feb
More file actions
279 lines (211 loc) · 5.34 KB
/
Notes-Kubernetes-20feb
File metadata and controls
279 lines (211 loc) · 5.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
Persistent Volume and Persistent Volume Claim:
=============================================
In class Notes:
Problem:
> whenever a pod is created, the container will store data
> if the pod is deleted , the containers data will be lost
So today we have to find the ways in which we can preserve the data of the container
-> preserve data of the container on the Cluster --> Dev/Test Env -> same as docker
-> preserve data of the container outside the cluster -> Prod Env -> external storage
Storage: Container Storage in Kubernetes
Volumes in Kubernetes
Recap of volumes in Containers
1. Persistent Volume Claim => PVC -> always created manually
2. Persistent Volume => PV => manually , dynamically
Manual creation of Volumes in K8s Cluster --> Volume of type -> HostPath --> CKA exam
1. Persistent Volume Claim => PVC
2. Persistent Volume => PV
Dynamic creation of Volumes outside the K8s Cluster -> --> Volume of type -> Persistentdisk --> real time use case
> Container storge Interface
> Storage StorageClass
Retain policy for Persistent Volume :
============================================
Delete : Pod using the volume gets deleted then the volume also get deleted
Retain: Pod using the volume gets deleted but the volume still remains with data retained in the directory
Recycle: Pod using the volume gets deleted then the volume directly gets cleaned up
pdcsi -> It is container storage Interface Pod -> storage driver
This pod comes by default when the cluster is created on GCP
If you create cluster on AWS --> EBSCSI
If you create cluster on Azure --> blobCSI
However we can also install our own CSI -> netapp, ceph,emc etc
StorageClass => it is not an object of kubernetes => It is just a configuration
StorageClass is like a permission that we give to kubernetes to use of CSI driver to create and manage
the storage outside the Cluster
====================================================
# vim pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
name: block-pv
spec:
storageClassName: manual
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle
hostPath:
path: /tmp/data
# vim pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
# vim pod-pvc.yml
apiVersion: v1
kind: Pod
metadata:
name: pod-pvc
spec:
containers:
- image: nginx
name: c1
volumeMounts:
- mountPath: "/data"
name: my-volume
volumes:
- name: my-volume
persistentVolumeClaim:
claimName: pvc
======================================================
Dynamic Provisioning
# vim sc.yml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast
provisioner: kubernetes.io/gce-pd
parameters:
type: pd-ssd
# vim pvc-dynamic.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: sc-pvc
spec:
storageClassName: fast
resources:
requests:
storage: 10Gi
accessModes:
- ReadWriteOnce
# vim pod-dynamic.yml
apiVersion: v1
kind: Pod
metadata:
name: pod-pvc
spec:
containers:
- image: nginx
name: c1
volumeMounts:
- mountPath: "/data"
name: my-volume
volumes:
- name: my-volume
persistentVolumeClaim:
claimName: sc-pvc
================================
# kubectl get configmap
# kubectl create configmap dev-config --from-literal=app.mem=2048m
# kubectl get configmap
# kubectl get configmap dev-config -o yaml
# vim dev.properties
app.env:dev
app.mem=2048m
app.properties=dev.env.url
:wq!
# kubectl create configmap dev-config1 --from-file=dev.properties
# kubectl get configmap
# kubectl get configmap dev-config1 -o yaml
Use configmap for a pod
vim pod-configmap.yml
kind: Pod
apiVersion: v1
metadata:
name: pod-configmap
spec:
containers:
- image: nginx
name: c1
volumeMounts:
- name: config-volume
mountPath: /etc/config
volumes:
- name: config-volume
configMap:
name: dev-config1
restartPolicy: Never
:wq!
# kubectl apply -f pod-configmap.yml
# kubectl exec -it pod-configmap bash
# cd /etc/config
you will find the dev.properties file and configurations
Edit the configMAP
kubectl edit configmap -n <namespace> <configMapName> -o yaml
This opens up a vim editor with the configmap in yaml format. Now simply edit it and save it.
====================================
Secrets:
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
labels:
app: mysql
spec:
replicas: 1
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- image: mysql:8
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
value: root
===============
echo YWRtaW4= | base64 --decode
kind: Secret
apiVersion: v1
metadata:
name: wp-mysql
data:
password: "YWRtaW4="
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
labels:
app: mysql
spec:
replicas: 1
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- image: mysql:8
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: wp-mysql
key: password
=======================================