如何搭建 Kubernetes 一站式平台:修订间差异
更多语言
更多操作
无编辑摘要 |
无编辑摘要 |
||
| 第122行: | 第122行: | ||
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config | cp -i /etc/kubernetes/admin.conf $HOME/.kube/config | ||
chown "$(id -u)":"$(id -g)" $HOME/.kube/config | chown "$(id -u)":"$(id -g)" $HOME/.kube/config | ||
</syntaxhighlight>因为我们是单节点, 需要移除 control plane 污点, 除非多台主机节点<syntaxhighlight lang="bash"> | |||
kubectl taint nodes --all node-role.kubernetes.io/control-plane- | |||
</syntaxhighlight>检查<syntaxhighlight lang="bash">kubectl get nodes | </syntaxhighlight>检查<syntaxhighlight lang="bash">kubectl get nodes | ||
kubectl get pods -A</syntaxhighlight>这时 master 大概率是 <code>NotReady</code> 状态, 目前 CNI 还没有安装, CoreDNS 也通常不会处于 <code>Running</code> 状态 | kubectl get pods -A</syntaxhighlight>这时 master 大概率是 <code>NotReady</code> 状态, 目前 CNI 还没有安装, CoreDNS 也通常不会处于 <code>Running</code> 状态 | ||
| 第259行: | 第261行: | ||
helm upgrade --install metrics-server metrics-server/metrics-server -n kube-system --set "args[0]=--kubelet-insecure-tls" | helm upgrade --install metrics-server metrics-server/metrics-server -n kube-system --set "args[0]=--kubelet-insecure-tls" | ||
</syntaxhighlight>安装好后就可以正常显示资源占用情况 | </syntaxhighlight>安装好后就可以正常显示资源占用情况 | ||
== '''10. 常见问题排查''' == | |||
==== 10.1 Flannel 启动失败 ==== | |||
优先检查这几个点, Flannel 官方 README 明确指出 它依赖 <code>br_netfilter</code> 另外它默认使用 <code>portmap</code> 作为 CNI 网络插件的一部分 并要求相关 CNI 二进制位于 <code>/opt/cni/bin</code> | |||
==== 10.2 Headlamp 页面能打开但无法登录 ==== | |||
重点检查 | |||
* token 是否复制完整 | |||
* ServiceAccount 是否创建在 <code>kube-system</code> | |||
* ClusterRoleBinding 是否绑定成功 | |||
* Headlamp 是否真的暴露成 NodePort | |||
==== 10.3 Pod 无法联网 ==== | |||
重点检查 | |||
* <code>kubeadm init</code> 的 <code>--pod-network-cidr</code> | |||
* Flannel Chart 的 <code>podCidr</code> | |||
* 主机自身网段是否与 Pod 网段冲突 | |||
Kubernetes 官方明确提醒 Pod network 不应与宿主机网络重叠 否则容易出现网络异常 | |||
== 11. 常用命令 == | |||
<syntaxhighlight lang="bash"> | |||
# ------------------------- | |||
# 1 集群和命名空间 | |||
# ------------------------- | |||
kubectl config current-context # 查看当前 kubeconfig 上下文 | |||
kubectl config get-contexts # 查看所有可用上下文 | |||
kubectl config use-context my-cluster # 切换到指定集群上下文 | |||
kubectl get ns # 查看所有命名空间 | |||
kubectl get pods -n kube-system # 查看指定命名空间中的 Pod | |||
kubectl config set-context --current --namespace=default # 设置当前上下文默认命名空间 | |||
# ------------------------- | |||
# 2 Helm 安装和版本管理 | |||
# ------------------------- | |||
helm repo add bitnami https://charts.bitnami.com/bitnami # 添加 Helm 仓库 | |||
helm repo update # 更新 Helm 仓库索引 | |||
helm search repo nginx # 在 Helm 仓库中搜索 chart | |||
helm install my-nginx bitnami/nginx # 安装一个 Helm release | |||
helm install my-nginx bitnami/nginx -n web --create-namespace # 安装到指定命名空间 不存在则创建 | |||
helm install headlamp headlamp/headlamp -n kube-system -f values.yaml # 使用 values 文件安装 release | |||
helm upgrade headlamp headlamp/headlamp -n kube-system -f values.yaml # 升级已有 release | |||
helm upgrade --install headlamp headlamp/headlamp -n kube-system -f values.yaml # 不存在则安装 存在则升级 | |||
helm list -A # 查看所有命名空间中的 Helm release | |||
helm status headlamp -n kube-system # 查看某个 release 当前状态 | |||
helm history headlamp -n kube-system # 查看 release 历史版本 | |||
helm rollback headlamp 2 -n kube-system # 回滚到指定 revision | |||
helm uninstall headlamp -n kube-system # 卸载 release | |||
helm show values headlamp/headlamp # 查看 chart 默认 values | |||
helm template headlamp headlamp/headlamp -n kube-system -f values.yaml # 本地渲染模板 不实际安装 | |||
helm upgrade --install headlamp headlamp/headlamp -n kube-system -f values.yaml --dry-run # 试运行安装或升级 | |||
helm upgrade --install headlamp headlamp/headlamp -n kube-system -f values.yaml --dry-run --debug # 试运行并输出详细调试信息 | |||
# ------------------------- | |||
# 3 常用资源查看 | |||
# ------------------------- | |||
kubectl get pods # 查看当前命名空间的 Pod | |||
kubectl get pods -o wide # 查看 Pod 并显示节点 IP 等更多信息 | |||
kubectl get pods -w # 持续监听 Pod 状态变化 | |||
kubectl get deploy # 查看 Deployment | |||
kubectl get svc # 查看 Service | |||
kubectl get ds # 查看 DaemonSet | |||
kubectl get sts # 查看 StatefulSet | |||
kubectl get ingress # 查看 Ingress | |||
kubectl get all -n kube-system # 查看命名空间下常见资源 | |||
kubectl get pods -l app.kubernetes.io/name=headlamp -n kube-system # 根据标签筛选 Pod | |||
kubectl get deploy headlamp -n kube-system -o yaml # 查看 Deployment 的完整 YAML | |||
kubectl get svc headlamp -n kube-system -o wide # 查看 Service 详细信息 | |||
# ------------------------- | |||
# 4 排障常用 | |||
# ------------------------- | |||
kubectl describe pod headlamp-xxx-xxx -n kube-system # 查看 Pod 详细状态和事件 | |||
kubectl describe deploy headlamp -n kube-system # 查看 Deployment 详细信息 | |||
kubectl describe svc headlamp -n kube-system # 查看 Service 详细信息 | |||
kubectl get events -n kube-system --sort-by=.metadata.creationTimestamp # 按时间排序查看命名空间事件 | |||
kubectl get events -A --sort-by=.metadata.creationTimestamp # 查看全局事件并按时间排序 | |||
kubectl logs headlamp-xxx-xxx -n kube-system # 查看 Pod 日志 | |||
kubectl logs -f headlamp-xxx-xxx -n kube-system # 持续跟踪 Pod 日志 | |||
kubectl logs headlamp-xxx-xxx -n kube-system -c headlamp # 查看指定容器日志 | |||
kubectl logs headlamp-xxx-xxx -n kube-system --previous # 查看容器上一次崩溃前日志 | |||
kubectl exec -it headlamp-xxx-xxx -n kube-system -- /bin/sh # 进入容器 shell | |||
kubectl exec -it headlamp-xxx-xxx -n kube-system -- /bin/bash # 进入容器 bash | |||
kubectl get pods -n kube-system # 先列出 Pod 再选择进入 | |||
kubectl exec -it pod-name -n kube-system -- /bin/sh # 进入指定 Pod | |||
kubectl top pod -n kube-system # 查看 Pod CPU 和内存使用量 | |||
kubectl top node # 查看节点资源使用量 | |||
# ------------------------- | |||
# 5 发布和重启相关 | |||
# ------------------------- | |||
kubectl rollout restart deploy headlamp -n kube-system # 滚动重启 Deployment | |||
kubectl rollout status deploy headlamp -n kube-system # 查看 Deployment 发布状态 | |||
kubectl rollout history deploy headlamp -n kube-system # 查看 Deployment 发布历史 | |||
kubectl rollout undo deploy headlamp -n kube-system # 回滚 Deployment 到上一版本 | |||
kubectl scale deploy headlamp --replicas=3 -n kube-system # 调整副本数 | |||
kubectl delete pod headlamp-xxx-xxx -n kube-system # 删除 Pod 让控制器自动重建 | |||
# ------------------------- | |||
# 6 网络和端口相关 | |||
# ------------------------- | |||
kubectl get svc -n kube-system # 查看命名空间下 Service | |||
kubectl port-forward pod/headlamp-xxx-xxx 8080:80 -n kube-system # 将本地 8080 转发到 Pod 的 80 | |||
kubectl port-forward svc/headlamp 8080:80 -n kube-system # 将本地 8080 转发到 Service 的 80 | |||
kubectl get endpoints headlamp -n kube-system # 查看 Service 后端 Endpoint | |||
kubectl run tmp-shell -it --rm --image=busybox -- /bin/sh # 临时启动调试 Pod | |||
nslookup kubernetes.default # 在调试容器中解析集群 DNS | |||
wget -qO- http://headlamp.kube-system.svc.cluster.local # 在调试容器中访问集群内部 Service | |||
# ------------------------- | |||
# 7 配置和存储相关 | |||
# ------------------------- | |||
kubectl get configmap -n kube-system # 查看 ConfigMap | |||
kubectl get secret -n kube-system # 查看 Secret | |||
kubectl get pvc -A # 查看所有 PVC | |||
kubectl get pv # 查看所有 PV | |||
kubectl get nodes -o wide # 查看节点及详细信息 | |||
kubectl describe node node-1 # 查看节点详细状态 | |||
kubectl get deploy headlamp -n kube-system -o yaml # 查看实际生效的 Deployment YAML | |||
# ------------------------- | |||
# 8 Helm 配合排障常用 | |||
# ------------------------- | |||
helm status headlamp -n kube-system # 查看 release 当前运行状态 | |||
helm get values headlamp -n kube-system # 查看用户自定义 values | |||
helm get values headlamp -n kube-system -a # 查看合并后的全部 values | |||
helm get manifest headlamp -n kube-system # 查看 release 实际渲染出的 manifest | |||
helm get notes headlamp -n kube-system # 查看安装说明和访问提示 | |||
kubectl get pod headlamp-xxx-xxx -n kube-system --show-labels # 查看 Pod 标签 判断所属 release | |||
kubectl get all -n kube-system -l app.kubernetes.io/instance=headlamp # 根据 Helm release 标签筛选整套资源 | |||
# ------------------------- | |||
# 9 最常用 20 个命令 | |||
# ------------------------- | |||
kubectl get pods -A # 查看所有命名空间 Pod | |||
kubectl get svc -A # 查看所有命名空间 Service | |||
kubectl get deploy -A # 查看所有命名空间 Deployment | |||
kubectl get all -n kube-system # 查看 kube-system 中常见资源 | |||
kubectl get pods -o wide -n kube-system # 查看 Pod 详细信息 | |||
kubectl describe pod pod-name -n kube-system # 查看 Pod 详情 | |||
kubectl describe deploy deploy-name -n kube-system # 查看 Deployment 详情 | |||
kubectl logs pod-name -n kube-system # 查看日志 | |||
kubectl logs -f pod-name -n kube-system # 持续跟踪日志 | |||
kubectl logs pod-name -n kube-system --previous # 查看上一次容器日志 | |||
kubectl exec -it pod-name -n kube-system -- /bin/sh # 进入容器 | |||
kubectl get events -n kube-system --sort-by=.metadata.creationTimestamp # 查看时间排序事件 | |||
kubectl port-forward svc/service-name 8080:80 -n kube-system # 本地端口转发到 Service | |||
kubectl rollout restart deploy deploy-name -n kube-system # 重启 Deployment | |||
kubectl rollout status deploy deploy-name -n kube-system # 查看滚动发布状态 | |||
kubectl scale deploy deploy-name --replicas=2 -n kube-system # 调整副本数 | |||
helm list -A # 查看所有 Helm release | |||
helm status release-name -n kube-system # 查看 release 状态 | |||
helm get values release-name -n kube-system -a # 查看 release 全部 values | |||
helm upgrade --install release-name repo/chart -n kube-system -f values.yaml # Helm 安装或升级 | |||
# ------------------------- | |||
# 10 实战排障流程 | |||
# ------------------------- | |||
helm status headlamp -n kube-system # 先检查 release 状态 | |||
kubectl get all -n kube-system -l app.kubernetes.io/instance=headlamp # 查看 release 关联资源 | |||
kubectl get pods -n kube-system -o wide # 查看 Pod 是否正常运行 | |||
kubectl describe pod pod-name -n kube-system # 检查 Pod 事件和错误 | |||
kubectl logs pod-name -n kube-system # 查看应用日志 | |||
kubectl get svc -n kube-system # 查看 Service 是否创建成功 | |||
kubectl describe svc headlamp -n kube-system # 查看 Service 配置详情 | |||
kubectl get endpoints headlamp -n kube-system # 查看 Service 是否关联到后端 Pod | |||
kubectl port-forward svc/headlamp 8080:80 -n kube-system # 用本地转发验证服务本身是否正常 | |||
# ------------------------- | |||
# 11 常用别名 | |||
# ------------------------- | |||
alias k=kubectl # kubectl 简写 | |||
alias kgp='kubectl get pods' # 快速查看 Pod | |||
alias kgs='kubectl get svc' # 快速查看 Service | |||
alias kgd='kubectl get deploy' # 快速查看 Deployment | |||
alias kdp='kubectl describe pod' # 快速查看 Pod 详情 | |||
alias kdd='kubectl describe deploy' # 快速查看 Deployment 详情 | |||
</syntaxhighlight> | |||
2026年4月12日 (日) 12:58的版本
1. 什么是 Kubernetes / k8s
k8s 也就是 Kubernetes 是一个面向容器化应用的自动化管理平台, 核心职责是管理程序运行的环境, 包括 部署应用/调度资源/维护副本/处理故障/对外暴露服务等等...
对于初学者来说可以把它理解成一个专门管理容器集群的平台, 当你只有一个容器时也许还感觉不到它的必要性
但当你需要同时运行多个服务, 需要让服务彼此通信, 需要保证应用异常后自动恢复, 甚至需要后续扩容到多台机器时 Kubernetes 的价值就会非常明显
而本文要做的事情, 就是在一台主机上先搭建一个最小可运行的 Kubernetes 环境, 借助这个过程去理解 Kubernetes 是怎样从零开始被组织起来的
为了易读性, 在这里会将 Kubernetes 简称为 k8s
2. 环境说明
运行 kubeadm 集群建议 control plane 节点至少具备 2 Core CPU 和 2 GiB 运存, 推荐购买搬瓦工的 ECOMMERCE SLA 套餐
- 操作系统以 Debian13 为例
- 主机数量 1 台
- 使用 root 用户
- 主机承担 control plane 和 workload 调度
- k8s pod网段为
10.10.0.0/16, service网段为192.168.0.0/16 - 使用
Headlamp管理k8s pods
3. 前置准备
3.1 加载模块并启用转发
cat <<'EOF' | tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
modprobe overlay
modprobe br_netfilter
cat <<'EOF' | tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
EOF
sysctl --system
3.2 配置 hosts
tee -a /etc/hosts > /dev/null <<'EOF'
127.0.0.1 k8s-master
EOF
3.3 关闭 swap (可选)
swapoff -a
sed -ri '/\sswap\s/s/^/#/' /etc/fstab
4. 安装 containerd
更新软件源并安装 containerd 与 其他核心组件
apt update
apt install -y containerd apt-transport-https ca-certificates curl gpg
生成默认配置文件并修改配置文件, 这里为了防止后续可能报错, 修改了 bin_dir
mkdir -p /etc/containerd
containerd config default | tee /etc/containerd/config.toml > /dev/null
sed -i 's#bin_dir = "/usr/lib/cni"#bin_dir = "/opt/cni/bin"#' /etc/containerd/config.toml
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
重启并设置自启
systemctl daemon-reload
systemctl restart containerd
systemctl enable containerd
systemctl status containerd
5. 安装 kubeadm kubelet kubectl
mkdir -p -m 755 /etc/apt/keyrings
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.35/deb/Release.key | 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.35/deb/ /' | tee /etc/apt/sources.list.d/kubernetes.list
apt-get update
apt-get install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl
systemctl enable --now kubelet
检查
kubeadm version
kubectl version --client
kubelet --version
6. 初始化单节点 k8s 集群
新建一个初始化配置
mkdir -p /main/k8s
nano /main/k8s/kubeadm-config.yaml
粘贴并自行修改配置后进行保存
apiVersion: kubeadm.k8s.io/v1beta4
kind: InitConfiguration
nodeRegistration:
name: master
criSocket: "unix:///run/containerd/containerd.sock"
localAPIEndpoint:
advertiseAddress: <你的公网主机IP>
bindPort: 6443
---
apiVersion: kubeadm.k8s.io/v1beta4
kind: ClusterConfiguration
kubernetesVersion: v1.35.0
networking:
podSubnet: 10.10.0.0/16
serviceSubnet: 192.168.0.0/16
dnsDomain: cluster.local
# 若开启了Swap需要解除此注释!
#---
#apiVersion: kubelet.config.k8s.io/v1beta1
#kind: KubeletConfiguration
#cgroupDriver: systemd
#failSwapOn: false
#memorySwap:
# swapBehavior: LimitedSwap
开始初始化
kubeadm init --config /main/k8s/kubeadm-config.yaml
初始化完成后配置 kubectl
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown "$(id -u)":"$(id -g)" $HOME/.kube/config
因为我们是单节点, 需要移除 control plane 污点, 除非多台主机节点
kubectl taint nodes --all node-role.kubernetes.io/control-plane-
检查
kubectl get nodes
kubectl get pods -A
这时 master 大概率是 NotReady 状态, 目前 CNI 还没有安装, CoreDNS 也通常不会处于 Running 状态
7. 安装 Helm并设置补全
安装 Helm
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-4
chmod 700 get_helm.sh
./get_helm.sh
helm version
命令补全:
- zsh
echo 'source <(kubectl completion zsh)' >> ~/.zshrc echo 'source <(helm completion zsh)' >> ~/.zshrc source ~/.zshrc
- bash
echo 'source <(kubectl completion bash)' >> ~/.bashrc echo 'source <(helm completion bash)' >> ~/.bashrc source ~/.bashrc
- fish
kubectl completion fish | sudo tee /etc/fish/completions/kubectl.fish > /dev/null helm completion fish | sudo tee /etc/fish/completions/helm.fish > /dev/null
8. 安装 CNI 插件
在资源紧凑的主机中我更推荐使用 Flannel , 这里也会提供 Calico 与 Cilium 的安装, 根据应用场景自行选择其一
资源占用: Flannel < Calico < Cilium
8.1 Flannel
kubectl create namespace kube-flannel
kubectl label namespace kube-flannel --overwrite pod-security.kubernetes.io/enforce=privileged
kubectl label namespace kube-flannel --overwrite pod-security.kubernetes.io/audit=privileged
kubectl label namespace kube-flannel --overwrite pod-security.kubernetes.io/warn=privileged
helm upgrade --install flannel -n kube-flannel --create-namespace --set podCidr=10.10.0.0/16 https://github.com/flannel-io/flannel/releases/download/v0.28.1/flannel.tgz
8.2 Calico
helm repo add projectcalico https://docs.tigera.io/calico/charts
helm repo update
kubectl create namespace tigera-operator
helm upgrade --install calico projectcalico/tigera-operator --version v3.31.4 --namespace tigera-operator --set installation.calicoNetwork.ipPools[0].cidr=10.10.0.0/16 --set installation.calicoNetwork.ipPools[0].encapsulation=VXLAN
8.3 Cilium
helm repo add cilium https://helm.cilium.io/
helm repo update
helm upgrade --install cilium cilium/cilium --version 1.19.1 --namespace kube-system
检查CNI
kubectl get nodes
kubectl get pods -A
节点状态从 NotReady 变为 Ready , CoreDNS 进入 Running 状态, 至此, k8s 已经初步部署完成
9. Headlamp (可选)
9.1 什么是 Headlamp
Headlamp是一个面向 k8s 的图形化管理界面, 它的目标是用更直观的方式帮助用户查看和管理集群资源, 例如节点/Pod/Deployment/Service/ConfigMap/Secret 等常见对象, 都可以通过 Web 页面进行浏览和操作
它定义为一个易用且可扩展的 Kubernetes WebUI 并强调它既可以作为集群内 Web 应用运行, 也可以作为桌面应用使用, 和很多传统 Dashboard 相比
Headlamp 的特点主要有三点:
- 界面更现代 更偏向日常运维与开发使用
- 它支持基于 Kubernetes RBAC 的权限控制 用户能看到和操作的资源会自动受当前权限约束
- 它具备插件扩展能力 可以根据团队需求定制界面和功能
我个人认为可以帮助初学者摆脱只看命令行输出的方式, 更直观地观察集群中资源的创建/状态变化/日志/配置情况, 因此很适合作为 k8s 学习和演示环境中的可视化入口.
9.2 开始安装
先新建一个 values.yml 文件
mkdir -p /main/k8s/headlamp
nano /main/k8s/headlamp/values.yml粘贴并自行修改配置后进行保存
replicaCount: 1
image:
registry: ghcr.io
repository: headlamp-k8s/headlamp
tag: ""
pullPolicy: IfNotPresent
nameOverride: ""
fullnameOverride: "headlamp"
namespaceOverride: ""
service:
type: NodePort
port: 80
# 宿主机开放端口
nodePort: 30080
env:
- name: TZ
value: "Asia/Shanghai"
config:
pluginsDir: /headlamp/plugins
volumes:
- name: plugins-volume
hostPath:
path: /main/k8s/headlamp/plugins
type: DirectoryOrCreate
volumeMounts:
- name: plugins-volume
mountPath: /headlamp/plugins
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 500m
memory: 512Mi
用 Helm 安装
helm repo add headlamp https://kubernetes-sigs.github.io/headlamp/
helm repo update
helm upgrade --install headlamp headlamp/headlamp -n headlamp --create-namespace -f /main/k8s/headlamp/values.yml
通过开放的端口访问到 Headlamp, 初次加载需要等待一会, 之后需要输入 token, 使用命令生成
kubectl create token headlamp --namespace headlamp --duration 168h
若不通则进行检查
kubectl get nodes
kubectl get pods -A
9.3 查看资源使用概览
Headlamp中各种资源显示, 需要依赖 metrics-server
helm repo add metrics-server https://kubernetes-sigs.github.io/metrics-server/
helm repo update
helm upgrade --install metrics-server metrics-server/metrics-server -n kube-system --set "args[0]=--kubelet-insecure-tls"
安装好后就可以正常显示资源占用情况
10. 常见问题排查
10.1 Flannel 启动失败
优先检查这几个点, Flannel 官方 README 明确指出 它依赖 br_netfilter 另外它默认使用 portmap 作为 CNI 网络插件的一部分 并要求相关 CNI 二进制位于 /opt/cni/bin
10.2 Headlamp 页面能打开但无法登录
重点检查
- token 是否复制完整
- ServiceAccount 是否创建在
kube-system - ClusterRoleBinding 是否绑定成功
- Headlamp 是否真的暴露成 NodePort
10.3 Pod 无法联网
重点检查
kubeadm init的--pod-network-cidr- Flannel Chart 的
podCidr - 主机自身网段是否与 Pod 网段冲突
Kubernetes 官方明确提醒 Pod network 不应与宿主机网络重叠 否则容易出现网络异常
11. 常用命令
# -------------------------
# 1 集群和命名空间
# -------------------------
kubectl config current-context # 查看当前 kubeconfig 上下文
kubectl config get-contexts # 查看所有可用上下文
kubectl config use-context my-cluster # 切换到指定集群上下文
kubectl get ns # 查看所有命名空间
kubectl get pods -n kube-system # 查看指定命名空间中的 Pod
kubectl config set-context --current --namespace=default # 设置当前上下文默认命名空间
# -------------------------
# 2 Helm 安装和版本管理
# -------------------------
helm repo add bitnami https://charts.bitnami.com/bitnami # 添加 Helm 仓库
helm repo update # 更新 Helm 仓库索引
helm search repo nginx # 在 Helm 仓库中搜索 chart
helm install my-nginx bitnami/nginx # 安装一个 Helm release
helm install my-nginx bitnami/nginx -n web --create-namespace # 安装到指定命名空间 不存在则创建
helm install headlamp headlamp/headlamp -n kube-system -f values.yaml # 使用 values 文件安装 release
helm upgrade headlamp headlamp/headlamp -n kube-system -f values.yaml # 升级已有 release
helm upgrade --install headlamp headlamp/headlamp -n kube-system -f values.yaml # 不存在则安装 存在则升级
helm list -A # 查看所有命名空间中的 Helm release
helm status headlamp -n kube-system # 查看某个 release 当前状态
helm history headlamp -n kube-system # 查看 release 历史版本
helm rollback headlamp 2 -n kube-system # 回滚到指定 revision
helm uninstall headlamp -n kube-system # 卸载 release
helm show values headlamp/headlamp # 查看 chart 默认 values
helm template headlamp headlamp/headlamp -n kube-system -f values.yaml # 本地渲染模板 不实际安装
helm upgrade --install headlamp headlamp/headlamp -n kube-system -f values.yaml --dry-run # 试运行安装或升级
helm upgrade --install headlamp headlamp/headlamp -n kube-system -f values.yaml --dry-run --debug # 试运行并输出详细调试信息
# -------------------------
# 3 常用资源查看
# -------------------------
kubectl get pods # 查看当前命名空间的 Pod
kubectl get pods -o wide # 查看 Pod 并显示节点 IP 等更多信息
kubectl get pods -w # 持续监听 Pod 状态变化
kubectl get deploy # 查看 Deployment
kubectl get svc # 查看 Service
kubectl get ds # 查看 DaemonSet
kubectl get sts # 查看 StatefulSet
kubectl get ingress # 查看 Ingress
kubectl get all -n kube-system # 查看命名空间下常见资源
kubectl get pods -l app.kubernetes.io/name=headlamp -n kube-system # 根据标签筛选 Pod
kubectl get deploy headlamp -n kube-system -o yaml # 查看 Deployment 的完整 YAML
kubectl get svc headlamp -n kube-system -o wide # 查看 Service 详细信息
# -------------------------
# 4 排障常用
# -------------------------
kubectl describe pod headlamp-xxx-xxx -n kube-system # 查看 Pod 详细状态和事件
kubectl describe deploy headlamp -n kube-system # 查看 Deployment 详细信息
kubectl describe svc headlamp -n kube-system # 查看 Service 详细信息
kubectl get events -n kube-system --sort-by=.metadata.creationTimestamp # 按时间排序查看命名空间事件
kubectl get events -A --sort-by=.metadata.creationTimestamp # 查看全局事件并按时间排序
kubectl logs headlamp-xxx-xxx -n kube-system # 查看 Pod 日志
kubectl logs -f headlamp-xxx-xxx -n kube-system # 持续跟踪 Pod 日志
kubectl logs headlamp-xxx-xxx -n kube-system -c headlamp # 查看指定容器日志
kubectl logs headlamp-xxx-xxx -n kube-system --previous # 查看容器上一次崩溃前日志
kubectl exec -it headlamp-xxx-xxx -n kube-system -- /bin/sh # 进入容器 shell
kubectl exec -it headlamp-xxx-xxx -n kube-system -- /bin/bash # 进入容器 bash
kubectl get pods -n kube-system # 先列出 Pod 再选择进入
kubectl exec -it pod-name -n kube-system -- /bin/sh # 进入指定 Pod
kubectl top pod -n kube-system # 查看 Pod CPU 和内存使用量
kubectl top node # 查看节点资源使用量
# -------------------------
# 5 发布和重启相关
# -------------------------
kubectl rollout restart deploy headlamp -n kube-system # 滚动重启 Deployment
kubectl rollout status deploy headlamp -n kube-system # 查看 Deployment 发布状态
kubectl rollout history deploy headlamp -n kube-system # 查看 Deployment 发布历史
kubectl rollout undo deploy headlamp -n kube-system # 回滚 Deployment 到上一版本
kubectl scale deploy headlamp --replicas=3 -n kube-system # 调整副本数
kubectl delete pod headlamp-xxx-xxx -n kube-system # 删除 Pod 让控制器自动重建
# -------------------------
# 6 网络和端口相关
# -------------------------
kubectl get svc -n kube-system # 查看命名空间下 Service
kubectl port-forward pod/headlamp-xxx-xxx 8080:80 -n kube-system # 将本地 8080 转发到 Pod 的 80
kubectl port-forward svc/headlamp 8080:80 -n kube-system # 将本地 8080 转发到 Service 的 80
kubectl get endpoints headlamp -n kube-system # 查看 Service 后端 Endpoint
kubectl run tmp-shell -it --rm --image=busybox -- /bin/sh # 临时启动调试 Pod
nslookup kubernetes.default # 在调试容器中解析集群 DNS
wget -qO- http://headlamp.kube-system.svc.cluster.local # 在调试容器中访问集群内部 Service
# -------------------------
# 7 配置和存储相关
# -------------------------
kubectl get configmap -n kube-system # 查看 ConfigMap
kubectl get secret -n kube-system # 查看 Secret
kubectl get pvc -A # 查看所有 PVC
kubectl get pv # 查看所有 PV
kubectl get nodes -o wide # 查看节点及详细信息
kubectl describe node node-1 # 查看节点详细状态
kubectl get deploy headlamp -n kube-system -o yaml # 查看实际生效的 Deployment YAML
# -------------------------
# 8 Helm 配合排障常用
# -------------------------
helm status headlamp -n kube-system # 查看 release 当前运行状态
helm get values headlamp -n kube-system # 查看用户自定义 values
helm get values headlamp -n kube-system -a # 查看合并后的全部 values
helm get manifest headlamp -n kube-system # 查看 release 实际渲染出的 manifest
helm get notes headlamp -n kube-system # 查看安装说明和访问提示
kubectl get pod headlamp-xxx-xxx -n kube-system --show-labels # 查看 Pod 标签 判断所属 release
kubectl get all -n kube-system -l app.kubernetes.io/instance=headlamp # 根据 Helm release 标签筛选整套资源
# -------------------------
# 9 最常用 20 个命令
# -------------------------
kubectl get pods -A # 查看所有命名空间 Pod
kubectl get svc -A # 查看所有命名空间 Service
kubectl get deploy -A # 查看所有命名空间 Deployment
kubectl get all -n kube-system # 查看 kube-system 中常见资源
kubectl get pods -o wide -n kube-system # 查看 Pod 详细信息
kubectl describe pod pod-name -n kube-system # 查看 Pod 详情
kubectl describe deploy deploy-name -n kube-system # 查看 Deployment 详情
kubectl logs pod-name -n kube-system # 查看日志
kubectl logs -f pod-name -n kube-system # 持续跟踪日志
kubectl logs pod-name -n kube-system --previous # 查看上一次容器日志
kubectl exec -it pod-name -n kube-system -- /bin/sh # 进入容器
kubectl get events -n kube-system --sort-by=.metadata.creationTimestamp # 查看时间排序事件
kubectl port-forward svc/service-name 8080:80 -n kube-system # 本地端口转发到 Service
kubectl rollout restart deploy deploy-name -n kube-system # 重启 Deployment
kubectl rollout status deploy deploy-name -n kube-system # 查看滚动发布状态
kubectl scale deploy deploy-name --replicas=2 -n kube-system # 调整副本数
helm list -A # 查看所有 Helm release
helm status release-name -n kube-system # 查看 release 状态
helm get values release-name -n kube-system -a # 查看 release 全部 values
helm upgrade --install release-name repo/chart -n kube-system -f values.yaml # Helm 安装或升级
# -------------------------
# 10 实战排障流程
# -------------------------
helm status headlamp -n kube-system # 先检查 release 状态
kubectl get all -n kube-system -l app.kubernetes.io/instance=headlamp # 查看 release 关联资源
kubectl get pods -n kube-system -o wide # 查看 Pod 是否正常运行
kubectl describe pod pod-name -n kube-system # 检查 Pod 事件和错误
kubectl logs pod-name -n kube-system # 查看应用日志
kubectl get svc -n kube-system # 查看 Service 是否创建成功
kubectl describe svc headlamp -n kube-system # 查看 Service 配置详情
kubectl get endpoints headlamp -n kube-system # 查看 Service 是否关联到后端 Pod
kubectl port-forward svc/headlamp 8080:80 -n kube-system # 用本地转发验证服务本身是否正常
# -------------------------
# 11 常用别名
# -------------------------
alias k=kubectl # kubectl 简写
alias kgp='kubectl get pods' # 快速查看 Pod
alias kgs='kubectl get svc' # 快速查看 Service
alias kgd='kubectl get deploy' # 快速查看 Deployment
alias kdp='kubectl describe pod' # 快速查看 Pod 详情
alias kdd='kubectl describe deploy' # 快速查看 Deployment 详情