打开/关闭搜索
搜索
打开/关闭菜单
66
939
81
2766
md5.pw
导航
首页
最近更改
随机页面
MediaWiki帮助
特殊页面
上传文件
打开/关闭外观设置菜单
通知
打开/关闭个人菜单
未登录
未登录用户的IP地址会在进行任意编辑后公开展示。
user-interface-preferences
个人工具
登录
请求账号
查看“︁如何搭建 Kubernetes 一站式平台”︁的源代码
来自md5.pw
分享此页面
更多语言
查看
阅读
查看源代码
查看历史
associated-pages
页面
讨论
更多操作
←
如何搭建 Kubernetes 一站式平台
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
---- == '''1. 什么是 Kubernetes / k8s''' == k8s 也就是 Kubernetes 是一个面向容器化应用的自动化管理平台, 核心职责是管理程序运行的环境, 包括 <code>部署应用/调度资源/维护副本/处理故障/对外暴露服务</code>等等... 对于初学者来说可以把它理解成一个专门管理容器集群的平台, 当你只有一个容器时也许还感觉不到它的必要性 但当你需要同时运行多个服务, 需要让服务彼此通信, 需要保证应用异常后自动恢复, 甚至需要后续扩容到多台机器时 Kubernetes 的价值就会非常明显 而本文要做的事情, 就是在一台主机上先搭建一个最小可运行的 Kubernetes 环境, 借助这个过程去理解 Kubernetes 是怎样从零开始被组织起来的 为了易读性, 在这里会将 <code>Kubernetes</code> 简称为 <code>k8s</code> == 2. 环境说明 == 运行 kubeadm 集群建议 control plane 节点至少具备 <code>2 Core CPU</code> 和 <code>2 GiB</code> 运存, 推荐购买搬瓦工的 [https://bandwagonhost.com/cart.php?a=add&pid=166 ECOMMERCE SLA] 套餐 * 操作系统以 Debian13 为例 * 主机数量 1 台 * 使用 root 用户 * 主机承担 control plane 和 workload 调度 * k8s pod网段为 <code>10.10.0.0/16</code> , service网段为 <code>192.168.0.0/16</code> * 使用 <code>Headlamp</code> 管理k8s pods == '''3. 前置准备''' == ==== 3.1 加载模块并启用转发 ==== <syntaxhighlight lang="bash"> 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 </syntaxhighlight> ==== 3.2 配置 hosts ==== <syntaxhighlight lang="bash"> tee -a /etc/hosts > /dev/null <<'EOF' 127.0.0.1 k8s-master EOF </syntaxhighlight> ==== 3.3 关闭 swap (可选) ==== <syntaxhighlight lang="bash"> swapoff -a sed -ri '/\sswap\s/s/^/#/' /etc/fstab </syntaxhighlight> == 4. 安装 containerd == 更新软件源并安装 containerd 与 其他核心组件<syntaxhighlight lang="bash"> apt update apt install -y containerd apt-transport-https ca-certificates curl gpg </syntaxhighlight>生成默认配置文件并修改配置文件, 这里为了防止后续可能报错, 修改了 <code>bin_dir</code><syntaxhighlight lang="bash">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</syntaxhighlight>重启并设置自启<syntaxhighlight lang="bash"> systemctl daemon-reload systemctl restart containerd systemctl enable containerd systemctl status containerd </syntaxhighlight> == 5. 安装 kubeadm kubelet kubectl == <syntaxhighlight lang="bash"> 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 </syntaxhighlight>检查<syntaxhighlight lang="bash"> kubeadm version kubectl version --client kubelet --version </syntaxhighlight> == '''6. 初始化单节点 k8s 集群''' == 新建一个初始化配置<syntaxhighlight lang="bash">mkdir -p /main/k8s nano /main/k8s/kubeadm-config.yaml</syntaxhighlight>粘贴并自行修改配置后进行保存<syntaxhighlight lang="yaml" line="1"> 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 </syntaxhighlight>开始初始化<syntaxhighlight lang="bash"> kubeadm init --config /main/k8s/kubeadm-config.yaml </syntaxhighlight>初始化完成后配置 kubectl<syntaxhighlight lang="bash"> mkdir -p $HOME/.kube cp -i /etc/kubernetes/admin.conf $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 kubectl get pods -A</syntaxhighlight>这时 master 大概率是 <code>NotReady</code> 状态, 目前 CNI 还没有安装, CoreDNS 也通常不会处于 <code>Running</code> 状态 == 7. 安装 Helm并设置补全 == 安装 Helm<syntaxhighlight lang="bash">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</syntaxhighlight> ===== '''命令补全:''' ===== * zsh<syntaxhighlight lang="bash"> echo 'source <(kubectl completion zsh)' >> ~/.zshrc echo 'source <(helm completion zsh)' >> ~/.zshrc source ~/.zshrc </syntaxhighlight> * bash<syntaxhighlight lang="bash"> echo 'source <(kubectl completion bash)' >> ~/.bashrc echo 'source <(helm completion bash)' >> ~/.bashrc source ~/.bashrc </syntaxhighlight> * fish<syntaxhighlight lang="bash"> kubectl completion fish | sudo tee /etc/fish/completions/kubectl.fish > /dev/null helm completion fish | sudo tee /etc/fish/completions/helm.fish > /dev/null </syntaxhighlight> == '''8. 安装 CNI 插件''' == 在资源紧凑的主机中我更推荐使用 <code>Flannel</code> , 这里也会提供 <code>Calico</code> 与 <code>Cilium</code> 的安装, 根据应用场景自行选择其一 资源占用: <code>Flannel</code> < <code>Calico</code> < <code>Cilium</code> ==== 8.1 Flannel ==== <syntaxhighlight lang="bash">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</syntaxhighlight> ==== 8.2 Calico ==== <syntaxhighlight lang="bash">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</syntaxhighlight> ==== 8.3 Cilium ==== <syntaxhighlight lang="bash"> helm repo add cilium https://helm.cilium.io/ helm repo update helm upgrade --install cilium cilium/cilium --version 1.19.1 --namespace kube-system </syntaxhighlight>'''检查CNI'''<syntaxhighlight lang="bash"> kubectl get nodes kubectl get pods -A </syntaxhighlight>节点状态从 <code>NotReady</code> 变为 <code>Ready</code> , CoreDNS 进入 <code>Running</code> 状态, '''至此, k8s 已经初步部署完成''' == 9. Headlamp (可选) == ==== 9.1 什么是 '''<code>Headlamp</code>''' ==== Headlamp是一个面向 k8s 的图形化管理界面, 它的目标是用更直观的方式帮助用户查看和管理集群资源, 例如节点/Pod/Deployment/Service/ConfigMap/Secret 等常见对象, 都可以通过 Web 页面进行浏览和操作 它定义为一个易用且可扩展的 Kubernetes WebUI 并强调它既可以作为集群内 Web 应用运行, 也可以作为桌面应用使用, 和很多传统 Dashboard 相比 Headlamp 的特点主要有三点: # 界面更现代 更偏向日常运维与开发使用 # 它支持基于 Kubernetes RBAC 的权限控制 用户能看到和操作的资源会自动受当前权限约束 # 它具备插件扩展能力 可以根据团队需求定制界面和功能 我个人认为可以帮助初学者摆脱只看命令行输出的方式, 更直观地观察集群中资源的创建/状态变化/日志/配置情况, 因此很适合作为 k8s 学习和演示环境中的可视化入口. ==== 9.2 开始安装 ==== 先新建一个 <code>values.yml</code> 文件<syntaxhighlight> mkdir -p /main/k8s/headlamp nano /main/k8s/headlamp/values.yml </syntaxhighlight>粘贴并自行修改配置后进行保存<syntaxhighlight lang="yaml" line="1"> 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 </syntaxhighlight>用 Helm 安装<syntaxhighlight lang="bash"> 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 </syntaxhighlight>通过开放的端口访问到 Headlamp, 初次加载需要等待一会, 之后需要输入 <code>token</code>, 使用命令生成<syntaxhighlight lang="bash"> kubectl create token headlamp --namespace headlamp --duration 168h </syntaxhighlight>若不通则进行检查<syntaxhighlight lang="bash"> kubectl get nodes kubectl get pods -A </syntaxhighlight> ==== 9.3 查看资源使用概览 ==== Headlamp中各种资源显示, 需要依赖 <code>metrics-server</code><syntaxhighlight lang="bash"> 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" </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" line="1"> # ------------------------- # 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> == 12. Helm Chart 配置文件模板 == <syntaxhighlight lang="yaml" line="1"> replicaCount: 1 # Pod 副本数. 单节点或测试环境常设为 1 revisionHistoryLimit: 10 # Deployment 保留的历史版本数. 便于回滚 minReadySeconds: 0 # Pod 就绪后保持多久才视为可用 deploymentStrategy: # Deployment 更新策略 type: RollingUpdate # 推荐 RollingUpdate. Recreate 会先删后建 rollingUpdate: maxUnavailable: 25% # 滚动更新期间最大不可用比例 maxSurge: 25% # 滚动更新期间可额外创建的副本比例 image: registry: ghcr.io # 镜像仓库地址 repository: headlamp-k8s/headlamp # 示例镜像名. 新容器可改为自己的镜像 tag: "" # 镜像标签. 留空时通常使用 chart 默认 appVersion pullPolicy: IfNotPresent # 拉取策略. 常用 IfNotPresent 或 Always imagePullSecrets: [] # 私有仓库拉取密钥. 无需私仓时保持空数组 nameOverride: "" # 覆盖 chart 名称的一部分. 一般不需要 fullnameOverride: "headlamp" # 最终资源名. 示例中固定方便管理. 新项目可改 namespaceOverride: "" # 覆盖命名空间. 一般更建议 helm -n 指定 initContainers: # 初始化容器. 在主容器启动前执行 - name: init-plugin-dir # 初始化容器名称 image: busybox:1.36 # 使用轻量 busybox 镜像 imagePullPolicy: IfNotPresent # initContainer 拉取策略 command: - sh - -c - mkdir -p /headlamp/plugins && chmod -R 755 /headlamp/plugins # 创建插件目录并赋权 securityContext: runAsNonRoot: false # 初始化目录时通常允许 root 更省事. 严格环境可改 allowPrivilegeEscalation: false # 禁止提权 volumeMounts: - name: plugins-volume # 挂载插件卷以便初始化目录 mountPath: /headlamp/plugins # 容器内插件目录路径 extraContainers: [] # 额外 sidecar 容器. 例如日志采集或代理 terminationGracePeriodSeconds: 30 # 优雅退出宽限期. 过短可能导致连接被硬切断 hostNetwork: false # 是否使用宿主机网络. 一般保持 false dnsPolicy: ClusterFirst # DNS 策略. hostNetwork=true 时常配 ClusterFirstWithHostNet dnsConfig: {} # 自定义 DNS 配置. 需模板支持 hostAliases: [] # 额外 hosts 映射. 仅少数场景使用 config: inCluster: true # 集群内访问模式. Pod 通过 ServiceAccount 访问 K8s API inClusterContextName: "main" # 集群内上下文名称 baseURL: "" # 子路径访问时填写如 /headlamp. 根路径保持空 sessionTTL: 86400 # 登录会话有效期. 单位秒. 86400 = 24 小时 oidc: secret: create: false # 是否由 chart 自动创建 OIDC Secret name: oidc # OIDC Secret 名称 clientID: "" # OIDC 客户端 ID clientSecret: "" # OIDC 客户端密钥 issuerURL: "" # OIDC 发行者地址 scopes: "" # OIDC scopes callbackURL: "" # OIDC 回调地址 validatorClientID: "" # Token 校验客户端 ID validatorIssuerURL: "" # Token 校验发行者地址 useAccessToken: false # 是否使用 Access Token usePKCE: false # 是否启用 PKCE useCookie: false # 是否通过 Cookie 保存认证信息 externalSecret: enabled: false # 是否使用外部 Secret name: "" # 外部 Secret 名称 meUserInfoURL: "" # 用户信息接口地址. 未接入外部认证时可留空 pluginsDir: "/headlamp/plugins" # 插件目录 enableHelm: false # 最新 chart 默认值为 false. 仅需展示 Helm 信息时开启 watchPlugins: false # 是否实时监听插件目录变化 extraArgs: [] # 额外启动参数. 例如 -plugins-dir=/headlamp/plugins env: # 环境变量 - name: TZ # 时区环境变量名称 value: "Asia/Shanghai" # 时区设置 envFrom: [] # 从 ConfigMap 或 Secret 批量导入环境变量. 需模板支持 containerPorts: # 容器端口示例. 需模板支持 - name: http # 端口名称. 多端口 Service 时建议显式命名 containerPort: 4466 # 容器监听端口. 请按实际应用修改 protocol: TCP # 协议. 通常 TCP livenessProbe: {} # 存活探针. K8S 原生支持 exec/httpGet/tcpSocket/grpc. 需模板支持 readinessProbe: {} # 就绪探针. 控制是否加入 Service 端点. 需模板支持 startupProbe: {} # 启动探针. 慢启动应用推荐配置. 需模板支持 lifecycle: {} # 生命周期钩子. preStop/postStart. 需模板支持 automountServiceAccountToken: true # 自动挂载 ServiceAccount Token. 集群内访问通常保持 true serviceAccount: create: true # 是否自动创建 ServiceAccount annotations: {} # ServiceAccount 注解 name: "" # 最新 chart 默认空字符串. 留空时一般按 fullname 生成 clusterRoleBinding: create: true # 是否自动创建 ClusterRoleBinding clusterRoleName: "cluster-admin" # 示例使用 cluster-admin. 生产环境建议改成最小权限角色 annotations: {} # ClusterRoleBinding 注解 deploymentAnnotations: {} # Deployment 注解 podAnnotations: # Pod 注解. 可用于 sidecar 注入 监控抓取等 kubectl.kubernetes.io/default-container: "headlamp" # kubectl exec/logs 默认容器提示. 非必须但更顺手 podLabels: app.kubernetes.io/name: "headlamp" # 推荐使用标准标签 app.kubernetes.io/component: "web" # 组件标签. 便于筛选和治理 hostUsers: true # Pod 是否共享宿主用户命名空间. 设 false 可启用 user namespaces podSecurityContext: fsGroup: 101 # 卷文件组 ID. 便于挂载目录权限控制 fsGroupChangePolicy: OnRootMismatch # 新版常用项. 仅在需要时递归改卷权限 seccompProfile: type: RuntimeDefault # 推荐使用运行时默认 seccomp 配置 securityContext: runAsNonRoot: true # 强制非 root 运行 privileged: false # 不使用特权模式 runAsUser: 100 # 容器运行用户 UID runAsGroup: 101 # 容器运行用户组 GID allowPrivilegeEscalation: false # 禁止提权 readOnlyRootFilesystem: false # 需要更强约束时可设 true 并配 writable 卷 capabilities: drop: - ALL # 建议默认移除全部 Linux capabilities service: annotations: {} # Service 注解 type: NodePort # 暴露方式. 可选 ClusterIP / NodePort / LoadBalancer port: 80 # Service 端口 targetPort: http # 目标端口. 建议引用命名端口便于变更 appProtocol: http # 应用层协议提示. v1.20 稳定 clusterIP: "" # ClusterIP 一般不手动指定 # loadBalancerIP: "" # 该字段自 v1.24 起已废弃. 新环境不建议再依赖 loadBalancerSourceRanges: [] # 限制允许访问的来源网段 nodePort: 30080 # NodePort 固定端口. 浏览器可通过 NodeIP:30080 访问 externalTrafficPolicy: Cluster # 对外流量策略. Local 可保留客户端源 IP internalTrafficPolicy: Cluster # 集群内流量策略. v1.26 稳定. Local 可优先本地端点 sessionAffinity: None # 会话亲和性. 可选 None / ClientIP sessionAffinityConfig: {} # 会话亲和性高级配置. 需按需填写 ipFamilyPolicy: SingleStack # 可选 SingleStack / PreferDualStack / RequireDualStack ipFamilies: [] # 双栈时可写 [IPv4, IPv6] 或 [IPv6, IPv4] trafficDistribution: PreferSameZone # v1.33 稳定. v1.35 支持 PreferSameZone / PreferSameNode volumeMounts: - name: plugins-volume # 插件卷名称 mountPath: /headlamp/plugins # 容器内挂载路径 # - name: kubeconfig-volume # 可选 kubeconfig 卷名称 # mountPath: /home/headlamp/.config/Headlamp/kubeconfigs/config # 容器内 kubeconfig 文件路径 # subPath: config # 将卷中的 config 文件挂载为单文件 volumes: - name: plugins-volume # 卷名称. 需与 volumeMounts 对应 hostPath: path: /data/headlamp/plugins # 宿主机目录. 等价于 Docker 左侧路径 type: DirectoryOrCreate # 不存在时自动创建目录 # - name: kubeconfig-volume # 可选 kubeconfig 卷 # hostPath: # path: /data/headlamp/kubeconfigs # 宿主机 kubeconfig 所在目录 # type: DirectoryOrCreate # 不存在时自动创建 persistentVolumeClaim: enabled: false # 是否改用 PVC 持久化. 使用 hostPath 时通常设 false annotations: {} # PVC 注解 accessModes: [] # PVC 访问模式. 如 ReadWriteOnce size: "" # PVC 大小. 如 5Gi storageClassName: "" # 存储类名称 selector: {} # PVC 选择器 volumeMode: "" # 卷模式. 如 Filesystem / Block dataSource: {} # 高级项. 可从快照或现有卷克隆. 需模板支持 ingress: enabled: false # 是否启用 Ingress annotations: {} # Ingress 注解 labels: {} # Ingress 标签 ingressClassName: "" # IngressClass 名称. 替代旧注解 kubernetes.io/ingress.class hosts: [] # 域名和路径配置 tls: [] # TLS 配置 httpRoute: enabled: false # 是否启用 Gateway API 的 HTTPRoute annotations: {} # HTTPRoute 注解 labels: {} # HTTPRoute 标签 parentRefs: [] # 关联 Gateway. 启用时通常必填 hostnames: [] # 绑定域名 rules: [] # 路由规则. 未配置时通常走默认前缀路由 resources: # 资源请求与限制 requests: cpu: "100m" # 最低 CPU 请求 memory: "128Mi" # 最低内存请求 limits: cpu: "500m" # CPU 上限 memory: "512Mi" # 内存上限 nodeSelector: kubernetes.io/os: linux # 仅调度到 Linux 节点 tolerations: [] # 容忍污点. 无特殊需求可留空 affinity: {} # 亲和性规则. 无特殊需求可留空 topologySpreadConstraints: # 拓扑分布约束. 新版 K8S 常用高可用配置 # - maxSkew: 1 # 单个拓扑域允许的最大偏斜 # topologyKey: topology.kubernetes.io/zone # 按可用区分布. 也可用 kubernetes.io/hostname # whenUnsatisfiable: ScheduleAnyway # 可选 DoNotSchedule / ScheduleAnyway # labelSelector: # matchLabels: # app.kubernetes.io/name: headlamp # 选取同类 Pod # matchLabelKeys: # v1.27 起 Beta. 可按 Pod 标签键自动匹配 # - pod-template-hash # nodeAffinityPolicy: Honor # v1.26 起 Beta. 可选 Honor / Ignore # nodeTaintsPolicy: Ignore # v1.26 起 Beta. 可选 Honor / Ignore [] priorityClassName: "" # 优先级类名称 runtimeClassName: "" # 运行时类. 如 gvisor kata 等. 需模板支持 pluginsManager: enabled: false # 是否启用插件管理 sidecar configFile: "plugin.yml" # 插件配置文件名 configContent: "" # 插件配置内容 baseImage: node:lts-alpine # 插件管理器基础镜像 version: latest # 插件管理器版本 volumeMounts: [] # 插件管理器额外挂载 securityContext: {} # 插件管理器安全上下文 podDisruptionBudget: enabled: false # 是否启用 PDB minAvailable: 0 # 最少可用副本数 maxUnavailable: null # 最大不可用副本数 unhealthyPodEvictionPolicy: null # 不健康 Pod 驱逐策略. 新集群可按需设置 extraManifests: [] # 附加资源清单. 可内嵌额外 K8s YAML </syntaxhighlight>
返回
如何搭建 Kubernetes 一站式平台
。
查看“︁如何搭建 Kubernetes 一站式平台”︁的源代码
来自md5.pw