Kubernetes Troubleshoot Issue

@Inderpreet I need your help to understand whether is it a platform level issue or not. Please visit the following link to see the video


Hi @onik.azad 

Sorry for delay, as promised   find below some good news :

The template was fixed successfully on the website : 

https://kubernetes.io/docs/tutorials/kubernetes-basics/create-cluster/cluster-interactive/

Find  below  the original template, which was  splitted afterwards    into 4 parts :( pv, pvc, svc and dep)

Good Luck !

cd /home/thor


Original template before correction(s):
-------------------------------------
cat mysql_deployment.yml 

---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: mysql-pv
  labels:
  type: local
spec:
  capacity:
    storage: 250Mi
  acessModes:
    - ReadWriteOnce:
  hostPath:
  path: "/mnt/data"
  persistentVolumeReclaimPolicy:
  -Retain
---
apiVersion: apps/v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pv-claim
  labels:
  type: mysql-app
spec:
  acessModes:
    - ReadWriteOnce:
  resource:
    requests:
      storage: 250MB
---
apiVersion: v1
kind: Service
metadata:
  name: mysql
  labels:
    app: mysql-app
spec:
  type: NodePort
  ports:
    - targetPorts: 3306
      ports: 3306
      nodePort: 30011
  selector:
    app: mysql-app
  tier: mysql
  
---
apiVersion: v1
kind: Deployment
metadata:
  name: mysql-deployment
  labels:
    app: mysql-app
spec:
  selector:
    matchlabels:
      app:mysql-app
    tier: mysql
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: mysql-app
        tier: mysql
    spec:
      containers:
      - images: mysql:5.6
        name: mysql
        env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
          secretKeyRef:
            name: mysql-root-pass
              key: password
        - name: MYSQL_DATABASE
          valueFrom:
          secretKeyRef:
            name: mysql-db-url
            key: database
        - name: MYSQL_USER
          valueFrom:
            secretKeyRef:
              name: mysql-user-pass
              key: username
        - name: MYSQL_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-user-pass
              key: password
        ports:
        - containerPort: 3306
          name: mysql
        volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /var/lib/mysql
     volumes:
     - name: mysql-persistent-storage
         persistentVolumeClaim:
             claimName: mysql-pv-claim
             
 
In order to check every part of  this file , you will create 4 files :

- pv.yml  :persistent volume 
- pvc.yml:  persistent volume claim
- svc.yml:  service 
- dep.yml:  deployment

To troubleshoot , we have to delete all  what was created before : deployment,  service , pv and pvC

delete PV:
-----------
kubectl delete pv  mysql-pv
persistentvolume "mysql-pv" deleted

delete PVC:
-----------
kubectl delete pvc  mysql-pv-claim
persistentvolume "mysql-pv-claim" deleted

delete SVC:
-----------
kubectl  delete svc  mysql
service "mysql" deleted

No need to delete deployment , it has to be fixed , this is the aim  of  the task

check secret:
-------------

 kubectl get secret
 
NAME                  TYPE                                  DATA   AGE
default-token-f7ht6   kubernetes.io/service-account-token   3      30m
mysql-db-url          Opaque                                1      27m
mysql-root-pass       Opaque                                1      27m
mysql-user-pass       Opaque                                2      28m

## if  wanted to test   the task on kubernetes playground below:
https://kubernetes.io/docs/tutorials/kubernetes-basics/create-cluster/cluster-interactive/

## you have to create MYSQL_ROOT_PASSWORD secret do it as follow:
###-------------------------------------------------------------
 kubectl create secret generic mysql-root-pass --from-literal=password='secret'
secret/mysql-root-pass created

## you have to create MYSQL_DATABASE secret do it as follow:
###-------------------------------------------------------------  

kubectl create secret generic mysql-db-url --from-literal=database='kodekloud_db5'
secret/mysql-db-url created

## you have to create MYSQL_USER secret and  MYSQL_PASSWORD:
###-------------------------------------------------------------  
kubectl create secret generic mysql-user-pass  \
 --from-literal=username='kodekloud_aim' \
 --from-literal=password='Rc5C9EyvbU'
secret/mysql-user-pass created

fixing  persistent volume:
--------------------------

vi pv.yml

---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: mysql-pv
  labels:
    type: local
spec:
  capacity:
    storage: 250Mi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/data"
  persistentVolumeReclaimPolicy: Retain 

save &  exit

apply pv:
--------

kubectl apply -f  pv.yml

persistentvolume/mysql-pv created    ## Ok pv  created !



fixing  persistent volume claim:
------------------------------

vi pvc.yml

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pv-claim
  labels:
    type: mysql-app
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 250Mi
      
      
save &  exit


apply pvc:
--------

kubectl apply -f  pvc.yml

persistentvolumeclaim/mysql-pv-claim created     ## Ok  pvc created !


fixing service:
--------------

vi  svc.yml

---
apiVersion: v1
kind: Service
metadata:
  name: mysql
  labels:
    app: mysql-app
spec:
  type: NodePort
  ports:
  - targetPort: 3306
    port: 3306
    nodePort: 30011
  selector:
    app: mysql-app
    tier: mysql
    
save & exit

apply  svc:
-----------

kubectl apply -f svc.yml    ## Ok service created !  

service/mysql created




fixing  deployment:
------------------

vi dep.yml

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql-deployment
  labels:
    app: mysql-app
spec:
  selector:
    matchLabels:
      app: mysql-app
      tier: mysql
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: mysql-app
        tier: mysql
    spec:
      containers:
      - image: mysql:5.6
        name: mysql
        env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-root-pass
              key: password
        - name: MYSQL_DATABASE
          valueFrom:
            secretKeyRef:
              name: mysql-db-url
              key: database
        - name: MYSQL_USER
          valueFrom:
            secretKeyRef:
              name: mysql-user-pass
              key: username
        - name: MYSQL_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-user-pass
              key: password
        ports:
        - containerPort: 3306
          name: mysql
        volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /var/lib/mysql
      volumes:
      - name: mysql-persistent-storage
        persistentVolumeClaim:
           claimName: mysql-pv-claim
             
 save  &  exit
 
 
 applying deployment:
 --------------------
 
 kubectl apply -f  dep.yml
 
 deployment.apps/mysql-deployment created   ## Ok deployement created !
 
 check if ALL is done:
 ---------------------
 
 check pv:
 --------
 
kubectl  get pv

NAME                                      CAPACITY  ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM                    STORAGECLASS   REASON   AGE
mysql-pv                                  250Mi     RWO            Retain           Available                                                    14m
pvc-b14509b9-8b33-47bc-81d2-029dbe78278c  250Mi     RWO            Delete           Bound       default/mysql-pv-claim   standard                13m


 check pvc:
 --------
 kubectl  get pvc
 
 NAME             STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
mysql-pv-claim   Bound    pvc-b14509b9-8b33-47bc-81d2-029dbe78278c   250Mi      RWO            standard       14m


 check svc:
 --------
 kubectl  get svc
 
 
 NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
kubernetes   ClusterIP   10.96.0.1      <none>        443/TCP          49m
mysql        NodePort    10.99.183.94   <none>        3306:30011/TCP   15m

check pod:
--------- 
kubectl  get pod

NAME                                READY   STATUS    RESTARTS   AGE
mysql-deployment-74f5dd5cdf-2nhcp   1/1     Running   0          3m54s
 
check deploy:
-------------

kubectl get deploy
 
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
mysql-deployment   1/1     1            1           4m51s







@samer thank you so very much for your reply. It was really helpful.