CKAD_Lab_Guide
CKAD_Lab_Guide
Day – 01
TASK - 01
TASK - 02
#vim multicon.yml
apiVersion: v1
kind: Pod
metadata:
name: multicon
spec:
containers:
- name: cont1
image: quay.io/gauravkumar9130/mywebapp
imagePullPolicy: IfNotPresent
- name: cont2
image: redis
imagePullPolicy: IfNotPresent
TASK - 03
#vim label.yml
apiVersion: v1
kind: Pod
metadata:
name: dev-pod
labels:
env: dev
manager: gaurav
spec:
containers:
- name: abc
image: quay.io/gauravkumar9130/nginxdemo
#vim rs.yml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: rs-web
spec:
replicas: 5
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: mycontainer
image: quay.io/gauravkumar9130/nginxdemo
TASK - 04B
#vim rs-setbased.yml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: rs-web
spec:
replicas: 5
selector:
matchExpressions:
- key: "app"
operator: "In"
values:
- "nginx"
- "web"
template:
metadata:
labels:
app: web
spec:
containers:
- name: mycontainer
image: quay.io/gauravkumar9130/nginxdemo
TASK - 05
#vim ecom.yml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: ecommerce
spec:
replicas: 5
selector:
matchLabels:
app: ecommerce
template:
metadata:
labels:
app: ecommerce
spec:
containers:
- name: abc
image: quay.io/gauravkumar9130/mywebapp
#vim cip-ecom.yml
apiVersion: v1
kind: Service
metadata:
name: cip-ecommerce
spec:
type: ClusterIP
ports:
- targetPort: 80 ##container port no
port: 5000 ##clusterip port no
selector:
app: ecommerce
#vim nodep.yml
apiVersion: v1
kind: Service
metadata:
name: ecommerce-outside-app
spec:
type: NodePort
ports:
- targetPort: 80 ##container port no
port: 80 ##cluster ip port
nodePort: 30003 ####range between 30000-32767 only allowed
selector:
app: ecommerce
#vim lb.yml
apiVersion: v1
kind: Service
metadata:
name: cip-ecommerce
spec:
type: LoadBalancer
ports:
- targetPort: 80
port: 80
selector:
app: ecommerce
TASK - 05
apiVersion: v1
kind: Pod
metadata:
name: my-custom-pod
spec:
containers:
- name: abc
image: quay.io/gauravkumar9130/nginxdemo
nodeName: aks-agentpool-97484218-vmss000002
Day-02
ASK - 01
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: mycontainer
image: quay.io/gauravkumar9130/nginxdemo
tolerations:
- key: "app"
operator: "Equal"
value: "blue"
effect: "NoSchedule"
TASK - 02
#vim selector.yml
apiVersion: v1
kind: Pod
metadata:
name: newpod
spec:
containers:
- name: newcontainer
image: quay.io/gauravkumar9130/nginxdemo
nodeSelector:
size: large
TASK - 03
#vim affinity.yml
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: abc
image: quay.io/gauravkumar9130/nginxdemo
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: size
operator: In
values:
- large
- medium
TASK - 04
#vim dep.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
replicas: 5
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: c1
image: quay.io/gauravkumar9130/production:v1
TASK - 05
#vim blue.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: blue-deployment
spec:
replicas: 5
selector:
matchLabels:
app: nginx
version: blue ##it can be anything
template:
metadata:
labels:
app: nginx
version: blue
spec:
containers:
- name: abc
image: quay.io/gauravkumar9130/production:v1
#vim bgsvc.yml
apiVersion: v1
kind: Service
metadata:
name: bgsvc
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 80
selector:
version: blue
Note - Open new tab in web browser and paste the load balancer IP address
#vim green.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: green-deployment
spec:
replicas: 5
selector:
matchLabels:
app: nginx
version: green ##it can be anything
template:
metadata:
labels:
app: nginx
version: green
spec:
containers:
- name: abc
image: quay.io/gauravkumar9130/production:v2
TASK - 06
#kubectl get ns
#kubectl get sa
#kubectl describe sa default -n default | less
#kubectl get secret
#kubectl create ns myns
#kubectl get ns
#kubectl create sa sam -n myns
#kubectl get sa -n myns
#kubectl get secret -n myns
#vim podsa.yml
apiVersion: v1
kind: Pod
metadata:
name: podsa
namespace: myns
spec:
containers:
- name: c1
image: quay.io/gauravkumar9130/nginx
serviceAccountName: sam
- PLAIN KEY
#vim plainenv.yml
apiVersion: v1
kind: Pod
metadata:
name: plain
spec:
containers:
- name: c1
image: quay.io/gauravkumar9130/mysql
env:
- name: MYSQL_ROOT_PASSWORD
value: myroot
- name: MYSQL_USER
value: sam
- name: MYSQL_PASSWORD
value: sam12345
- CONFIG MAP
apiVersion: v1
kind: Pod
metadata:
name: cm
spec:
containers:
- name: c1
image: quay.io/gauravkumar9130/mysql
envFrom:
- configMapRef:
name: conf
#kubectl create -f configmapenv.yml
#kubectl exec -it cm -- bash
#env
#exit
#kubectl delete -f configmapenv.yml
#kubectl delete cm conf
- SECRET
apiVersion: v1
kind: Pod
metadata:
name: sec
spec:
containers:
- name: c1
image: quay.io/gauravkumar9130/mysql
envFrom:
- secretRef:
name: sec
apiVersion: v1
kind: Pod
metadata:
name: abc
spec:
volumes:
- name: myvol
configMap:
name: db-config-vol
containers:
- name: db
image: quay.io/gauravkumar9130/nginxdemo
volumeMounts:
- name: myvol ##same name as volume name
mountPath: /data ##data folder will be created automatically
TASK - 08
- EMPTYDIR
#vim emptydir.yml
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
volumes:
- name: cache
emptyDir: {}
containers:
- name: c1
image: quay.io/gauravkumar9130/nginx
volumeMounts:
- name: cache
mountPath: /mydata
- PV AND PVC
#vim pvol.yml
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv
spec:
storageClassName: hdd
accessModes:
- ReadWriteMany
capacity:
storage: "3Gi"
hostPath:
path: "/insidenode"
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc
spec:
storageClassName: hdd
accessModes:
- ReadWriteMany
resources:
requests:
storage: "2Gi"
apiVersion: v1
kind: Pod
metadata:
name: vpod
spec:
volumes:
- name: pv
persistentVolumeClaim:
claimName: pvc
containers:
- name: c1
image: quay.io/gauravkumar9130/nginx
volumeMounts:
- name: pv
mountPath: /usr/share/nginx/html
- PV AS AZURE DISK
#vim azpvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: azpvc
spec:
storageClassName: default
accessModes:
- ReadWriteOnce
resources:
requests:
storage: "2Gi"
apiVersion: v1
kind: Pod
metadata:
name: azpod
spec:
volumes:
- name: vol
persistentVolumeClaim:
claimName: azpvc
containers:
- name: c1
image: quay.io/gauravkumar9130/nginx
volumeMounts:
- name: vol
mountPath: /usr/share/nginx/html
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-policy
spec:
podSelector:
matchLabels: {}
policyTypes:
- Ingress
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: db-policy
spec:
podSelector:
matchLabels:
app: db
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
app: web
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: db-policy
spec:
podSelector:
matchLabels:
app: db
policyTypes:
- Ingress
- Egress
ingress:
- from:
- podSelector:
matchLabels:
app: web
egress:
- to:
- podSelector:
matchLabels:
app: web
TASK - 10
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: hotel-app
annotations:
kubernetes.io/ingress.class: nginx
spec:
rules:
- http:
paths:
- path: /hotel
pathType: Prefix
backend:
service:
name: hotel
port:
number: 80
- path: /tea
pathType: Prefix
backend:
service:
name: tea
port:
number: 80
- path: /coffee
pathType: Prefix
backend:
service:
name: coffee
port:
number: 80
Day – 03
STATEFULSETS [TASK - 1]
vim sf.yml
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: myweb
spec:
serviceName: websvc
selector:
matchLabels:
app: web
replicas: 4
template:
metadata:
labels:
app: web
spec:
containers:
- name: abc
image: quay.io/gauravkumar9130/nginxdemo
vim hdsvc.yml
apiVersion: v1
kind: Service
metadata:
name: websvc
spec:
ports:
- targetPort: 80
port: 80
selector:
app: web
clusterIP: None
#myweb-2.websvc.default.svc.cluster.local
cp sf.yml sfst.yml
vim sfst.yml
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: myweb-statefulset
spec:
serviceName: websvc-hsvc
replicas: 3
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: abc
image: quay.io/gauravkumar9130/nginxdemo
volumeMounts:
- mountPath: /mydata
name: data-volume
volumeClaimTemplates:
- metadata:
name: data-volume
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 500Mi
#vim nordsvc.yml
apiVersion: v1
kind: Service
metadata:
name: nordsvc
spec:
ports:
- targetPort: 8080
port: 8080
selector:
app: jenkins
type: LoadBalancer
apiVersion: apps/v1
kind: Deployment
metadata:
name: rddep
spec:
selector:
matchLabels:
app: jenkins
replicas: 5
template:
metadata:
labels:
app: jenkins
spec:
containers:
- name: c1
image: quay.io/gauravkumar9130/jenkins
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: rdnessdep
name: rdnessdep
spec:
replicas: 5
selector:
matchLabels:
app: jenkins
strategy: {}
template:
metadata:
labels:
app: jenkins
spec:
containers:
- image: quay.io/gauravkumar9130/jenkins
name: jenkins
readinessProbe:
httpGet:
path: /login
port: 8080
initialDelaySeconds: 5
periodSeconds: 5
cp rdnessdep.yml rdlvnessdep.yml
vim rdlvnessdep.yml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: rdnessdep
name: rdnessdep
spec:
replicas: 5
selector:
matchLabels:
app: jenkins
strategy: {}
template:
metadata:
labels:
app: jenkins
spec:
containers:
- image: quay.io/gauravkumar9130/jenkins
name: jenkins
readinessProbe:
httpGet:
path: /login
port: 8080
initialDelaySeconds: 5
periodSeconds: 5
livenessProbe:
exec:
command: ["ls","/usr/share/jenkins/jenkins.war"]
initialDelaySeconds: 5
periodSeconds: 5
vim logging.yml
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: c1
image: quay.io/gauravkumar9130/mywebapp
Note - https://grafana.com/grafana/dashboards/6417
SIDECAR [TASK - 1]
vim sidecar.yml
apiVersion: v1
kind: Pod
metadata:
name: nginx-app
spec:
volumes:
- name: myvol
emptyDir: {}
containers:
- name: nginx-main-app
image: quay.io/gauravkumar9130/nginx
volumeMounts:
- name: myvol
mountPath: /usr/share/nginx/html
- name: side-car
image: quay.io/gauravkumar9130/ubuntu-git
command: ["/bin/sh"]
args: ["-c","while true; do git clone https://github.com/gauravkumar9130/webpage; cd
webpage; mv * /website/; sleep 10; done"]
volumeMounts:
- name: myvol
mountPath: /website
vim cronjob.yml
apiVersion: batch/v1
kind: CronJob
metadata:
name: cronjob
spec:
schedule: "*/1 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: pod
image: quay.io/gauravkumar9130/busybox
command:
- /bin/sh
- -c
- date; echo hello from the Kubernetes cluster
restartPolicy: OnFailure
vim job.yml
apiVersion: batch/v1
kind: Job
metadata:
name: first-job
spec:
template:
spec:
containers:
- name: c1
image: quay.io/gauravkumar9130/busybox
command: ["/bin/sh"]
args: ["-c","echo Hello World"]
restartPolicy: Never
mkdir charts
cd charts
helm create mycharts
ls
cd mycharts
ls
cp Chart.yaml Chartbk.yaml
ls
vim Chart.yaml
apiVersion: v2
name: mycharts
description: My Helm chart for Kubernetes
type: application
version: 0.1.0
appVersion: "1.16.0"
cd templates
cp vim deployment.yaml vim deploymentbk.yaml
vim deployment.yaml
cd ..
cp values.yaml valuesbk.yaml
vim values.yaml
line 5 - replicaCount: 3
line 8 - repository: quay.io/gauravkumar9130/production:v1
line 40 - type: LoadBalancer
cd ..
helm install myapp mycharts
kubectl get pods
kubectl get svc
helm uninstall myapp
#vim /etc/hosts
MASTERMACHINEIP master
WORKER1MACHINEIP worker1
WORKER2CHINEIP worker2