醋醋百科网

Good Luck To You!

Kubernetes (k8s) 搭建教程_如何搭建k8s

想学习 Kubernetes (k8s) 搭建教程吗?一份从入门到实操的完整指南,帮你快速搭建并运行一个 Kubernetes 集群。


Kubernetes (k8s) 搭建教程

1. Kubernetes 简介

Kubernetes 是一个开源的容器编排平台,用于自动化容器化应用的部署、扩展和管理。它支持集群管理、多副本部署、负载均衡、服务发现等功能。


2. 环境准备

  • 准备至少一台 Linux 服务器(推荐 Ubuntu 20.04+ 或 CentOS 7+)
  • 建议配置至少 2GB 内存和 2核 CPU(单节点实验)
  • 服务器间网络连通
  • 关闭交换分区(swap)
sudo swapoff -a
sudo sed -i '/ swap / s/^/#/' /etc/fstab

3. 安装 Docker

Kubernetes 依赖容器运行时,Docker 是最常用的。

Ubuntu 安装 Docker

sudo apt update
sudo apt install -y docker.io
sudo systemctl enable docker
sudo systemctl start docker

4. 安装 kubeadm、kubelet 和 kubectl

Kubeadm 用于快速搭建集群,kubelet 是集群节点代理,kubectl 是命令行客户端。

添加 Kubernetes 官方源并安装

sudo apt update && sudo apt install -y apt-transport-https curl

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF

sudo apt update
sudo apt install -y kubelet kubeadm kubectl

sudo apt-mark hold kubelet kubeadm kubectl

5. 初始化 Kubernetes Master 节点

sudo kubeadm init --pod-network-cidr=10.244.0.0/16
  • --pod-network-cidr 需根据所用网络插件调整,这里以 Flannel 为例使用 10.244.0.0/16。

初始化完成后,会输出加入集群的命令,示例:

kubeadm join 192.168.0.100:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:xxxxxx

6. 配置 kubectl 使用权限

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

7. 安装 Pod 网络插件 (Flannel 示例)

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

8. 加入 Worker 节点

在每个工作节点执行 kubeadm join 命令(第5步中 kubeadm init 输出的)。


9. 验证集群状态

kubectl get nodes
kubectl get pods -A

10. 部署示例应用测试

kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort

kubectl get svc nginx

通过 NodePort 端口访问 nginx 服务。


Kubernetes Dashboard 部署教程

1. 下载并部署 Dashboard 组件

执行以下命令,直接从官方 GitHub 仓库部署 Dashboard:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.8.0/aio/deploy/recommended.yaml

2. 创建访问 Dashboard 的 ServiceAccount 和 ClusterRoleBinding

Dashboard 默认需要身份认证,建议创建一个管理员权限的账户(仅用于测试环境,生产环境请严格控制权限):

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kubernetes-dashboard
EOF

3. 获取访问令牌(Token)

运行命令获取刚才创建的 ServiceAccount 的 Token:

kubectl -n kubernetes-dashboard create token admin-user

复制输出的 Token,后续登录 Dashboard 用。


4. 访问 Dashboard

默认 Dashboard 是 ClusterIP 类型,无法直接从外网访问。可通过 kubectl proxy 代理访问:

kubectl proxy

然后在浏览器打开:

http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/

5. 登录 Dashboard

用第3步获取的 Token 登录 Dashboard,进入后即可图形化管理 Kubernetes 资源。


6. 可选:暴露 Dashboard 服务(不推荐生产环境,安全风险)

如果需要从外网访问,可以修改服务类型为 NodePort 或 LoadBalancer(视环境而定),示例:

kubectl -n kubernetes-dashboard edit service kubernetes-dashboard

把 type: ClusterIP 改为:

type: NodePort

然后保存,查看 NodePort 端口:

kubectl -n kubernetes-dashboard get svc kubernetes-dashboard

通过节点 IP 和端口访问。


注意事项

  • Dashboard 默认会管理集群资源,生产环境请使用最小权限账号。
  • 建议配合身份认证和 HTTPS 代理(Ingress、反向代理)使用。
  • 结合 kubectl proxy 是最安全的访问方式。

一键部署 Kubernetes Dashboard 的 Bash 脚本,包括安装 Dashboard、创建管理员账户、获取访问 Token,并给出后续访问提示。

#!/bin/bash

set -e

echo "1. 部署 Kubernetes Dashboard..."
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.8.0/aio/deploy/recommended.yaml

echo "2. 创建管理员 ServiceAccount 和 ClusterRoleBinding..."
kubectl apply -f - <<EOF
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kubernetes-dashboard
EOF

echo "3. 等待 Dashboard Pod 运行..."
kubectl -n kubernetes-dashboard wait --for=condition=Ready pod -l k8s-app=kubernetes-dashboard --timeout=120s

echo "4. 获取 admin-user 的访问 Token..."
TOKEN=$(kubectl -n kubernetes-dashboard create token admin-user)

echo "--------------------------------------------"
echo "Dashboard 部署完成!"
echo "请使用下面的 Token 登录 Dashboard:"
echo
echo "$TOKEN"
echo
echo "--------------------------------------------"
echo "启动访问代理:"
echo "kubectl proxy"
echo "然后浏览器访问:"
echo "http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/"
echo "--------------------------------------------"

使用说明:

  1. 保存脚本,比如 deploy-dashboard.sh
  2. 赋予执行权限:chmod +x deploy-dashboard.sh
  3. 运行脚本:./deploy-dashboard.sh
  4. 脚本结束后会打印登录 Token 和访问方式提示
  5. 打开新终端运行 kubectl proxy,然后浏览器访问提示的地址即可


增强版 Kubernetes 集群搭建

环境优化建议

  1. 多节点推荐配置
  2. Master节点:2核CPU/4GB内存/50GB磁盘
  3. Worker节点:根据应用需求调整(建议至少2核/2GB)
  4. 系统统一化
# 所有节点执行
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
sudo systemctl disable --now firewalld

Docker 配置优化

# 配置cgroup驱动为systemd(与k8s一致)
cat <<EOF | sudo tee /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  }
}
EOF
sudo systemctl restart docker

kubeadm 初始化增强

# 更完整的初始化命令(替换你的步骤5)
sudo kubeadm init \
  --control-plane-endpoint="YOUR_MASTER_IP" \
  --pod-network-cidr=10.244.0.0/16 \
  --upload-certs \
  --apiserver-advertise-address=0.0.0.0

必备插件推荐

  1. 网络插件对比

Flannel:最简单

Calico:支持网络策略

# Calico安装(替代Flannel)
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/tigera-operator.yaml
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/custom-resources.yaml
  1. 可视化工具
# 安装Dashboard
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
# 创建访问令牌
kubectl create serviceaccount dashboard-admin -n kubernetes-dashboard
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kubernetes-dashboard:dashboard-admin

快速测试脚本

#!/bin/bash
# 部署测试应用并自动获取访问URL
kubectl create deployment test-app --image=nginx
kubectl expose deployment test-app --port=80 --type=NodePort

PORT=$(kubectl get svc test-app -o jsonpath='{.spec.ports[0].nodePort}')
IP=$(hostname -I | awk '{print $1}')
echo "访问地址: http://$IP:$PORT"

故障排查锦囊

  1. 节点NotReady
journalctl -u kubelet -f  # 查看kubelet日志
  1. Pod卡在Pending
kubectl describe pod <pod-name> | grep -A 10 Events
  1. 重置集群
kubeadm reset && rm -rf /etc/cni/net.d

进阶路线图

  1. 存储方案

NFS动态供给

Rook Ceph分布式存储

  1. 安全加固
# 定期轮换证书
kubeadm certs renew all
  1. CI/CD集成

ArgoCD GitOps实践

Tekton流水线

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言