Force delete pods

Bash
kubectl delete pod --grace-period=0 --force {POD_NAME}

Install Prometheus using Helm

Bash
helm install monitor prometheus-community/kube-prometheus-stack \
    --version 39.11.0 -n monitor

Prometheus & ServiceMonitor

No need to edit Prometheus config, Prometheus can automatically find your /metrics through service monitor!

flowchart LR
    A[Prometheus] -->|Auto detect| B(ServiceMonitor)
    B -->|Monitor| C(Service)
    subgraph "Provides '/metrics'"
        C --> D(Pod A)
        C --> E(Pod B)
        C --> F(Pod C)
    end

Service
Replace followings:

  • SERVICE_LABEL_KEY, SERVICE_LABEL_VALUE: Used for service monitor to locating service.
  • SERVICE_NAME, SERVICE_PORT_NAME, POD_PORT, SERVICE_PORT: Set by yourself.
  • POD_LABEL_KEY, POD_LABEL_VALUE: Used for locating pods.
  • NAMESPACE: Just namespace.
YAML
apiVersion: v1
kind: Service
metadata:
  labels:
    {SERVICE_LABEL_KEY}: {SERVICE_LABEL_VALUE}
  name: {SERVICE_NAME}
  namespace: {NAMESPACE}
spec:
  ports:
  - name: {SERVICE_PORT_NAME}
    port: {POD_PORT}
    protocol: TCP
    targetPort: {SERVICE_PORT}
  selector:
    {POD_LABEL_KEY}: {POD_LABEL_VALUE}
  type: ClusterIP

Service Monitor
Replace followings:

  • SERVICE_LABEL_KEY, SERVICE_LABEL_VALUE, SERVICE_PORT_NAME, NAMESPACE: Keep the same with the service.
  • SERVICE_MONITOR_NAME: Set by yourself.
  • PROM_RELEASE_NAME: Name you have input while installing Prometheus through Helm.
YAML
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  labels:
    app: psi-monitor
    release: {PROM_RELEASE_NAME}
  name: {SERVICE_MONITOR_NAME}
spec:
  endpoints:
  - interval: 1s
    port: {SERVICE_PORT_NAME}
    relabelings:
    # Check Prometheus relabeling
    - action: replace
      sourceLabels:
      - __meta_kubernetes_endpoint_node_name
      targetLabel: node
  namespaceSelector:
    matchNames:
    - {NAMESPACE}
  selector:
    matchLabels:
      {SERVICE_LABEL_KEY}: {SERVICE_LABEL_VALUE}

Setup script: K8S v1.31 + Docker on Ubuntu 22.04+

Let’s GO!

Bash
curl 'https://blog.nicklin.work/posts/my-kubernetes-cheatsheet/k8s-init.sh' | bash

Source Code of k8s-init.sh:

Bash
add_apt_repo() {
  # Required dependencies
  sudo apt update && sudo apt install -y ca-certificates curl apt-transport-https gpg wget
  # Docker repository
  sudo install -m 0755 -d /etc/apt/keyrings && \
    sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc && \
    sudo chmod a+r /etc/apt/keyrings/docker.asc
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  # Kubernetes v1.31 repository
  curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.31/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg && \
    echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.31/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
}

install() {
  # Install Kubernetes + Docker
  sudo apt-get update && sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin kubelet kubeadm kubectl
  sudo apt-mark hold kubelet kubeadm kubectl
  # Install cri-docker
  wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.15/cri-dockerd_0.3.15.3-0.ubuntu-jammy_amd64.deb && sudo dpkg -i cri-dockerd_0.3.15.3-0.ubuntu-jammy_amd64.deb && rm cri-dockerd_0.3.15.3-0.ubuntu-jammy_amd64.deb
  # Enable kubelet
  sudo systemctl enable --now kubelet
}

add_apt_repo && install