Skip to content

Files

Latest commit

dff5425 · Aug 31, 2023

History

History
444 lines (396 loc) · 10.7 KB

02.md

File metadata and controls

444 lines (396 loc) · 10.7 KB
  1. 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"]---===---
  1. Debugging & Troubleshooting/commands.md

Debug pod

start busybox in interactive mode
kubectl run debug-pod --image=busybox -it
check service name can be resolved
nslookup nginx-service.default.svc.cluster.local
nslookup nginx-service
access service ip returned by nslookup
ping service-ip

Execute commands in pod from master node

ping service
kubectl exec -it pod-name -- sh -c "ping nginx-service"
print all envs
kubectl exec -it pod-name -- sh -c "printenv"
print all running ports
kubectl exec -it pod-name -- sh -c "netstat -lntp"

Jsonpath output format

kubectl get node -o json
kubectl get pod -o json
for single pod
kubectl get pod -o jsonpath='{.items[0].metadata.name}'
print for all pods
kubectl get pod -o jsonpath='{.items[*].metadata.name}'
multiple attributes
kubectl get pod -o jsonpath="{.items[*]['metadata.name', 'status.podIP']}"
kubectl get pod -o jsonpath="{.items[*]['metadata.name', 'status.podIP', 'status.startTime']}"
print multiple attributes on new lines
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}'

Custom columns output

kubectl get pods -o custom-columns=POD_NAME:.metadata.name,POD_IP:.status.podIP,CREATED_AT:.status.startTime

Debugging kubelet

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

troubleshooting in k8s
debuging pods - commands & args
kubectl output formats
  1. 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---===---
  1. 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"]

alternative command syntax

  • name: logging-sidecar image: busybox:1.28 command:
    • 'sh'
    • '-c'
    • "while true; do echo sync logs; sleep 20; done"

alternative with args

  • name: logging-sidecar image: busybox:1.28 command: [ "sh", "-c"] args:
    • while true; do echo sync logs; sleep 20; done;---===---
  1. Multi-container Pods/useful-links.md
multi-container pods
exposing pod data to containers
  1. 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---===---
  1. 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

volumes
hostpath
emptydir

---===--- 09. Secret & ConfigMap/config-as-env-vars.yaml

apiVersion: v1 kind: ConfigMap metadata: name: myapp-config data: db_host: mysql-service

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---===---
  1. Secret & ConfigMap/useful-links.md
configmap
secret