想学习 Kubernetes (k8s) 搭建教程吗?一份从入门到实操的完整指南,帮你快速搭建并运行一个 Kubernetes 集群。
Kubernetes 是一个开源的容器编排平台,用于自动化容器化应用的部署、扩展和管理。它支持集群管理、多副本部署、负载均衡、服务发现等功能。
sudo swapoff -a
sudo sed -i '/ swap / s/^/#/' /etc/fstab
Kubernetes 依赖容器运行时,Docker 是最常用的。
sudo apt update
sudo apt install -y docker.io
sudo systemctl enable docker
sudo systemctl start docker
Kubeadm 用于快速搭建集群,kubelet 是集群节点代理,kubectl 是命令行客户端。
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
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
初始化完成后,会输出加入集群的命令,示例:
kubeadm join 192.168.0.100:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:xxxxxx
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
在每个工作节点执行 kubeadm join 命令(第5步中 kubeadm init 输出的)。
kubectl get nodes
kubectl get pods -A
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get svc nginx
通过 NodePort 端口访问 nginx 服务。
执行以下命令,直接从官方 GitHub 仓库部署 Dashboard:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.8.0/aio/deploy/recommended.yaml
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
运行命令获取刚才创建的 ServiceAccount 的 Token:
kubectl -n kubernetes-dashboard create token admin-user
复制输出的 Token,后续登录 Dashboard 用。
默认 Dashboard 是 ClusterIP 类型,无法直接从外网访问。可通过 kubectl proxy 代理访问:
kubectl proxy
然后在浏览器打开:
http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/
用第3步获取的 Token 登录 Dashboard,进入后即可图形化管理 Kubernetes 资源。
如果需要从外网访问,可以修改服务类型为 NodePort 或 LoadBalancer(视环境而定),示例:
kubectl -n kubernetes-dashboard edit service kubernetes-dashboard
把 type: ClusterIP 改为:
type: NodePort
然后保存,查看 NodePort 端口:
kubectl -n kubernetes-dashboard get svc kubernetes-dashboard
通过节点 IP 和端口访问。
一键部署 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 "--------------------------------------------"
# 所有节点执行
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
sudo systemctl disable --now firewalld# 配置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# 更完整的初始化命令(替换你的步骤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.0Flannel:最简单
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# 安装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"journalctl -u kubelet -f # 查看kubelet日志kubectl describe pod <pod-name> | grep -A 10 Eventskubeadm reset && rm -rf /etc/cni/net.dNFS动态供给
Rook Ceph分布式存储
# 定期轮换证书
kubeadm certs renew allArgoCD GitOps实践
Tekton流水线
¥19.80
素描静物结构临摹卡8K卡片高清精微石膏画单体组合图片教程结构国美初级学照片书籍基础入门画册本教材书教学美术绘画对照描摹练习
¥62.00
2022年新版 医院消毒供应中心岗位培训教程 2022版 国家卫生健康委医院管理研究所 编 中国标准出版社
¥74.60
套装共2本 巴托克小宇宙钢琴教程 第一册—第六册 附光盘2张 适合7-10级或同等程度钢琴教材书 有声版1+1钢琴课新视野教程
¥64.50
【出版社旗舰店】Python+Excel/Word/PPT一本通 python编程办公软件入门办公自动化运维运营效率数据分析PDF批量格式转化排版教程
¥46.80
朗诵 少儿组考级教材少儿组 中国音乐学院社会艺术水平考级全国通用教材音乐自学入门专业考试书籍 中国音乐学院朗诵 语言艺术教程
¥23.40
正版包邮 好听好玩好上手的儿童吉他教程 吉他弹唱指弹书 学吉他入门教程吉他考级书 儿童吉他基础乐理 乐谱典谱音乐教材书xj