- Debugging & Troubleshooting/busybox-pod.yaml
apiVersion: v1 kind: Pod metadata: name: busybox-pod spec: containers:
- name: busybox-container image: busybox args: ["echo", "hello"]
apiVersion: v1 kind: Pod metadata: name: busybox-pod spec: containers:
- name: busybox-container image: busybox command: ["printenv"] args: ["HOSTNAME", "KUBERNETES_PORT"]
apiVersion: v1 kind: Pod metadata: name: busybox-pod spec: containers:
- name: busybox-container image: busybox command: ["/bin/sh"] args: ["-c", "while true; do echo hello; sleep 5; done"]
apiVersion: v1 kind: Pod metadata: name: busybox-pod spec: containers:
- name: busybox-container image: busybox command: ["/bin/sh"] args: ["-c", "sleep 100"]---===---
- Debugging & Troubleshooting/commands.md
kubectl run debug-pod --image=busybox -it
nslookup nginx-service.default.svc.cluster.local
nslookup nginx-service
ping service-ip
kubectl exec -it pod-name -- sh -c "ping nginx-service"
kubectl exec -it pod-name -- sh -c "printenv"
kubectl exec -it pod-name -- sh -c "netstat -lntp"
kubectl get node -o json
kubectl get pod -o json
kubectl get pod -o jsonpath='{.items[0].metadata.name}'
kubectl get pod -o jsonpath='{.items[*].metadata.name}'
kubectl get pod -o jsonpath="{.items[*]['metadata.name', 'status.podIP']}"
kubectl get pod -o jsonpath="{.items[*]['metadata.name', 'status.podIP', 'status.startTime']}"
kubectl get pod -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.podIP}{"\n"}{end}'
kubectl get pod -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.podIP}{"\t"}{.status.startTime}{"\n"}{end}'
kubectl get pods -o custom-columns=POD_NAME:.metadata.name,POD_IP:.status.podIP,CREATED_AT:.status.startTime
service kubelet status
sudo vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
sudo systemctl daemon-reload
sudo systemctl restart kubelet
service kubelet status
---===--- 06. Debugging & Troubleshooting/useful-links.md
- Troubleshoot Applications: https://kubernetes.io/docs/tasks/debug-application-cluster/debug-application/
- Troubleshoot Clusters: https://kubernetes.io/docs/tasks/debug-application-cluster/debug-cluster/
- BusyBox Image: https://hub.docker.com/_/busybox
- Debug running Pods: https://kubernetes.io/docs/tasks/debug-application-cluster/debug-running-pod/
- Get Shell of running container: https://kubernetes.io/docs/tasks/debug-application-cluster/get-shell-running-container/
- Define Command & Arguments for Container: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/
- Output Options: https://kubernetes.io/docs/reference/kubectl/overview/#output-options
- Kubectl jsonpath: https://kubernetes.io/docs/reference/kubectl/jsonpath/ ---===---
- Multi-container Pods/expose-pod-info.yaml
apiVersion: v1 kind: Pod metadata: name: myapp-pod labels: app: myapp spec: containers:
- name: myapp-container image: nginx:1.20
- name: logging-sidecar
image: busybox:1.28
command: [ "sh", "-c"]
args:
- while true; do echo sync logs; echo -en '\n'; printenv MY_NODE_NAME MY_POD_NAME MY_POD_NAMESPACE; printenv MY_POD_IP MY_POD_SERVICE_ACCOUNT; sleep 20; done; env:
- name: MY_NODE_NAME valueFrom: fieldRef: fieldPath: spec.nodeName
- name: MY_POD_NAME valueFrom: fieldRef: fieldPath: metadata.name
- name: MY_POD_NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace
- name: MY_POD_IP valueFrom: fieldRef: fieldPath: status.podIP
- name: MY_POD_SERVICE_ACCOUNT valueFrom: fieldRef: fieldPath: spec.serviceAccountName---===---
- Multi-container Pods/multi-container-pod.yaml
apiVersion: v1 kind: Pod metadata: name: myapp-pod labels: app: myapp spec: containers:
- name: myapp-container image: nginx:1.20
- name: logging-sidecar image: busybox:1.28 command: ['sh', '-c', "while true; do echo sync logs; sleep 20; done"] initContainers:
- name: myservice-available image: busybox:1.28 command: ['sh', '-c', "until nslookup mydb-service; do echo waiting for myservice; sleep 4; done"]
- name: logging-sidecar
image: busybox:1.28
command:
- 'sh'
- '-c'
- "while true; do echo sync logs; sleep 20; done"
- name: logging-sidecar
image: busybox:1.28
command: [ "sh", "-c"]
args:
- while true; do echo sync logs; sleep 20; done;---===---
- Multi-container Pods/useful-links.md
- Init Containers: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/
- Sidecar Container: https://kubernetes.io/docs/concepts/workloads/pods/#how-pods-manage-multiple-containers
- Exposing Pod Information: https://kubernetes.io/docs/tasks/inject-data-application/environment-variable-expose-pod-information/ ---===---
- Data Persistence/deployment-with-emptydir.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: my-app labels: app: my-app spec: replicas: 1 selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: containers: - name: my-app image: busybox:1.28 command: ['sh', '-c'] args: - while true; do echo "$(date) INFO some app data" >> /var/log/myapp.log; sleep 5; done
volumeMounts:
- name: log
mountPath: /var/log
- name: log-sidecar
image: busybox:1.28
command: ['sh', '-c']
args:
- tail -f /var/log/myapp.log
volumeMounts:
- name: log
mountPath: /var/log
volumes:
- name: log
emptyDir: {}
---===--- 08. Data Persistence/deployment-with-pvc.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: my-db labels: app: my-db spec: replicas: 1 selector: matchLabels: app: my-db template: metadata: labels: app: my-db spec: containers: - name: mysql image: mysql:8.0
volumeMounts:
- name: db-data
mountPath: "/var/lib/mysql"
volumes:
- name: db-data
persistentVolumeClaim:
claimName: mysql-data-pvc---===---
- Data Persistence/pv-and-pvc.yaml
apiVersion: v1 kind: PersistentVolume metadata: name: data-pv spec: capacity: storage: 10Gi accessModes: - ReadWriteOnce hostPath: path: "/mnt/data"
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mysql-data-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 5Gi---===--- 08. Data Persistence/useful-links.md
- Storage Official Docs: https://kubernetes.io/docs/concepts/storage/
- Volume types: https://kubernetes.io/docs/concepts/storage/volumes/#volume-types
- Example k8s manifests https://gitlab.com/nanuchi/bootcamp-kubernetes/-/tree/master/kubernetes-volumes
- Hostpath Volume Type: https://kubernetes.io/docs/concepts/storage/volumes/#hostpath
- How hostpath is different from local volume type: https://kubernetes.io/blog/2019/04/04/kubernetes-1.14-local-persistent-volumes-ga/#how-is-it-different-from-a-hostpath-volume
- Configure Pod to use PV: https://kubernetes.io/docs/tasks/configure-pod-container/configure-persistent-volume-storage/
- Access Modes: https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes
- emptyDir Volume Type: https://kubernetes.io/docs/concepts/storage/volumes/#emptydir
---===--- 09. Secret & ConfigMap/config-as-env-vars.yaml
apiVersion: v1 kind: Secret metadata: name: myapp-secret type: Opaque data: username: dXNlcm5hbWU= password: cGFzc3dvcmQ=
apiVersion: apps/v1 kind: Deployment metadata: name: my-app labels: app: my-app spec: replicas: 1 selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: containers: - name: my-app image: busybox:1.28 command: ['sh', '-c', "printenv MYSQL_USER MYSQL_PASSWORD MYSQL_SERVER"] env: - name: MYSQL_USER valueFrom: secretKeyRef: name: myapp-secret key: username - name: MYSQL_PASSWORD valueFrom: secretKeyRef: name: myapp-secret key: password - name: MYSQL_SERVER valueFrom: configMapKeyRef: name: myapp-config key: db_host---===--- 09. Secret & ConfigMap/config-as-volumes.yaml
apiVersion: v1 kind: ConfigMap metadata: name: mysql-config data: mysql.conf: | [mysqld] port=3306 socket=/tmp/mysql.sock key_buffer_size=16M max_allowed_packet=128M
apiVersion: v1 kind: Secret metadata: name: mysql-secret type: Opaque data: secret.file: | c29tZXN1cGVyc2VjcmV0IGZpbGUgY29udGVudHMgbm9ib2R5IHNob3VsZCBzZWU=
apiVersion: apps/v1 kind: Deployment metadata: name: my-db labels: app: my-db spec: replicas: 1 selector: matchLabels: app: my-db template: metadata: labels: app: my-db spec: containers: - name: my-db image: busybox:1.28 command: ['sh', '-c', "cat /mysql/db-config; cat /mysql/db-secret"]
volumeMounts:
- name: db-config
mountPath: /mysql/db-config
- name: db-secret
mountPath: /mysql/db-secret
readOnly: true
volumes:
- name: db-config
configMap:
name: mysql-config
- name: db-secret
secret:
secretName: mysql-secret---===---
- Secret & ConfigMap/useful-links.md
- Complete ConfigMap docs: https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/
- Complete Secret docs: https://kubernetes.io/docs/tasks/inject-data-application/distribute-credentials-secure/