Kubernetes 从零搭建指南:Linux/MacOS 环境全攻略
一、环境准备与规划
1. 系统要求
组件 | 最低配置 | 推荐配置 |
---|---|---|
CPU | 2核 | 4核+ |
内存 | 2GB | 8GB+ |
磁盘 | 20GB | 100GB+ |
操作系统 | Ubuntu 20.04+/CentOS 7+ | Ubuntu 22.04 |
2. 工具安装清单
# 通用依赖
sudo apt-get update && sudo apt-get install -y \
curl \
apt-transport-https \
ca-certificates \
software-properties-common
# MacOS 使用 Homebrew # 我系统上原来安装有docker-desktop,在setting中的kubernetes菜单中也能自动安装kubernetes
# 如果提示githubusercontent host解析不了,可以看 参考 [](https://blog.csdn.net/zhaohuaxicaishi/article/details/109291730)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
二、核心组件安装
1. 容器运行时安装
# Docker 安装(Linux)
curl -fsSL https://get.docker.com | bash -s docker
sudo systemctl enable --now docker
# containerd 安装(推荐)
sudo apt-get install -y containerd
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
sudo systemctl restart containerd
2. Kubernetes 组件安装
# 添加K8s源
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
# 安装kubeadm, kubelet, kubectl
sudo apt-get update && sudo apt-get install -y \
kubelet=1.27.3-00 \
kubeadm=1.27.3-00 \
kubectl=1.27.3-00
sudo apt-mark hold kubelet kubeadm kubectl
三、集群初始化
1. 控制平面初始化
# 初始化主节点
sudo kubeadm init \
--pod-network-cidr=10.244.0.0/16 \
--apiserver-advertise-address=<MASTER_IP> \
--control-plane-endpoint=<MASTER_IP> \
--upload-certs
# 配置kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
2. 网络插件部署
# 安装Calico网络插件
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml
# 验证网络状态
kubectl get pods -n kube-system -l k8s-app=calico-node
四、节点加入与验证
1. 工作节点加入
# 在主节点获取加入命令
kubeadm token create --print-join-command
# 在工作节点执行加入命令
sudo kubeadm join <MASTER_IP>:6443 --token <TOKEN> \
--discovery-token-ca-cert-hash sha256:<HASH>
2. 集群状态检查
# 查看节点状态
kubectl get nodes -o wide
# 检查核心组件
kubectl get pods -n kube-system
# 验证DNS
kubectl run -i --tty busybox --image=busybox --restart=Never -- sh
nslookup kubernetes.default
五、生产级优化配置
1. 高可用配置
# 添加控制平面节点
kubeadm join <MASTER_IP>:6443 --token <TOKEN> \
--discovery-token-ca-cert-hash sha256:<HASH> \
--control-plane --certificate-key <CERT_KEY>
# 配置外部etcd集群
kubeadm init phase certs etcd-server --config=kubeadm-config.yaml
kubeadm init phase etcd local --config=kubeadm-config.yaml
2. 安全加固
# 启用Pod安全策略
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
name: restricted
spec:
privileged: false
allowPrivilegeEscalation: false
requiredDropCapabilities:
- ALL
3. 资源限制
# 设置节点资源预留
kubelet --system-reserved=cpu=500m,memory=1Gi \
--kube-reserved=cpu=200m,memory=512Mi
六、运维与监控
1. 日志收集
# 部署EFK栈
kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/fluentd-elasticsearch/fluentd-es-ds.yaml
2. 监控方案
# 安装Prometheus Operator
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm install prometheus prometheus-community/kube-prometheus-stack
3. 备份恢复
# 使用Velero进行集群备份
velero install \
--provider aws \
--bucket velero-backups \
--secret-file ./credentials-velero \
--use-volume-snapshots=false
七、常见问题排查
1. 节点NotReady
# 检查kubelet日志
journalctl -u kubelet -f
# 验证网络连接
nc -zv <MASTER_IP> 6443
2. Pod启动失败
# 查看Pod事件
kubectl describe pod <POD_NAME>
# 检查容器日志
kubectl logs <POD_NAME> -c <CONTAINER_NAME>
3. 网络故障
# 检查CNI配置
cat /etc/cni/net.d/10-calico.conflist
# 验证IP分配
calicoctl ipam show
扩展阅读:
建议在生产环境部署前,充分测试并制定完善的备份恢复策略。
本文来自博客园,作者:茄子_2008,转载请注明原文链接:https://www.cnblogs.com/xd502djj/p/18735022
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
2023-02-24 新项目决定用 JDK 17了
2009-02-24 Linux下修改IP