Kubernetes 1.8 单机部署全指南:从环境准备到集群验证

一、Kubernetes 1.8单机部署的核心价值与适用场景

Kubernetes 1.8作为早期稳定版本,其单机部署模式特别适合开发测试、边缘计算及教学演示场景。相比多节点集群,单机部署通过单节点模拟完整集群功能(如API Server、etcd、Controller Manager、Scheduler、Kubelet等组件共存),显著降低资源消耗与配置复杂度。例如,开发者可在笔记本电脑上快速验证Pod调度策略或自定义资源(CRD)的兼容性,而无需搭建多台物理机或虚拟机。

关键优势

  1. 资源高效利用:单节点可运行所有核心组件,适合8GB内存以上的开发机。
  2. 快速迭代验证:从环境准备到Pod部署可在30分钟内完成,加速CI/CD流程。
  3. 离线环境支持:通过本地镜像仓库和离线安装包,满足无外网访问的测试需求。

二、环境准备与依赖安装

1. 操作系统与内核要求

Kubernetes 1.8官方支持CentOS 7.x/Ubuntu 16.04+等Linux发行版,需内核版本≥3.10。建议使用最小化安装的操作系统,关闭不必要的服务(如firewalld、NetworkManager)以避免端口冲突。

操作示例(CentOS 7):

  1. # 禁用SELinux与防火墙
  2. sudo setenforce 0
  3. sudo systemctl stop firewalld
  4. sudo systemctl disable firewalld
  5. # 加载br_netfilter模块并配置内核参数
  6. sudo modprobe br_netfilter
  7. echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables

2. Docker引擎安装与配置

Kubernetes 1.8依赖Docker 1.12.6+作为容器运行时。需配置Docker使用systemd作为cgroup驱动,并与kubelet保持一致。

安装步骤

  1. # 安装依赖包
  2. sudo yum install -y yum-utils device-mapper-persistent-data lvm2
  3. # 添加Docker官方仓库并安装
  4. sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  5. sudo yum install -y docker-ce-18.06.1.ce
  6. # 配置Docker启动参数
  7. sudo mkdir /etc/docker
  8. cat <<EOF | sudo tee /etc/docker/daemon.json
  9. {
  10. "exec-opts": ["native.cgroupdriver=systemd"],
  11. "log-driver": "json-file",
  12. "log-opts": {
  13. "max-size": "100m"
  14. },
  15. "storage-driver": "overlay2"
  16. }
  17. EOF
  18. sudo systemctl enable docker && sudo systemctl start docker

三、Kubernetes核心组件部署

1. 使用kubeadm初始化集群

kubeadm是官方推荐的初始化工具,可自动化完成证书生成、组件部署等操作。需提前下载Kubernetes 1.8的二进制包与镜像。

操作流程

  1. # 下载kubeadm、kubelet、kubectl(需匹配版本)
  2. wget https://storage.googleapis.com/kubernetes-release/release/v1.8.0/bin/linux/amd64/kubeadm
  3. wget https://storage.googleapis.com/kubernetes-release/release/v1.8.0/bin/linux/amd64/kubelet
  4. wget https://storage.googleapis.com/kubernetes-release/release/v1.8.0/bin/linux/amd64/kubectl
  5. chmod +x kubeadm kubelet kubectl
  6. sudo mv kubeadm kubelet kubectl /usr/local/bin/
  7. # 拉取Kubernetes 1.8镜像(国内环境需配置镜像加速器)
  8. sudo kubeadm config images pull --kubernetes-version=v1.8.0
  9. # 初始化集群(使用单节点模式)
  10. sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=NumCPU

关键参数说明

  • --pod-network-cidr:指定Pod网络地址范围,需与后续网络插件(如Flannel)配置一致。
  • --ignore-preflight-errors=NumCPU:忽略CPU核心数检查(单机环境可能不足2核)。

2. 配置kubectl与节点标签

初始化完成后,需将kubeconfig文件复制到用户目录,并标记节点为可调度状态。

  1. mkdir -p $HOME/.kube
  2. sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  3. sudo chown $(id -u):$(id -g) $HOME/.kube/config
  4. # 标记节点为可调度(默认单节点需执行)
  5. kubectl taint nodes --all node-role.kubernetes.io/master:NoSchedule-

四、网络插件与存储插件配置

1. Flannel网络插件部署

Flannel通过VXLAN或Host-GW模式实现Pod间通信。需根据环境选择后端驱动。

部署命令

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

配置优化

  • 修改kube-flannel.yml中的NetConfig,调整MTU值以适应内网环境(如"MTU": 1450)。
  • 若使用Host-GW模式,需确保节点间二层互通且无防火墙拦截。

2. 本地存储插件配置

单机环境可使用hostPath或Local Volume实现持久化存储。以下示例展示如何通过StorageClass配置本地存储。

  1. # 创建Local Volume StorageClass
  2. apiVersion: storage.k8s.io/v1
  3. kind: StorageClass
  4. metadata:
  5. name: local-storage
  6. provisioner: kubernetes.io/no-provisioner
  7. volumeBindingMode: WaitForFirstConsumer
  8. # 创建PersistentVolume(需手动创建对应目录)
  9. apiVersion: v1
  10. kind: PersistentVolume
  11. metadata:
  12. name: local-pv-1
  13. spec:
  14. capacity:
  15. storage: 10Gi
  16. accessModes:
  17. - ReadWriteOnce
  18. persistentVolumeReclaimPolicy: Retain
  19. storageClassName: local-storage
  20. local:
  21. path: /mnt/data
  22. nodeAffinity:
  23. required:
  24. nodeSelectorTerms:
  25. - matchExpressions:
  26. - key: kubernetes.io/hostname
  27. operator: In
  28. values:
  29. - your-node-name

五、验证与故障排查

1. 集群状态验证

执行以下命令检查组件健康状态与Pod调度情况:

  1. # 检查节点状态
  2. kubectl get nodes -o wide
  3. # 检查核心组件Pod状态
  4. kubectl get pods -n kube-system
  5. # 部署测试Pod验证网络与存储
  6. kubectl run nginx --image=nginx:alpine --restart=Never
  7. kubectl exec -it nginx -- sh
  8. # 在Pod内执行ping测试或挂载卷验证

2. 常见问题处理

  • 镜像拉取失败:配置国内镜像源(如registry.aliyuncs.com/google_containers),修改/etc/docker/daemon.json添加"registry-mirrors": ["https://<mirror-url>"]
  • 端口冲突:检查8080(API Server)、10250(Kubelet)等端口占用情况,使用netstat -tulnp定位进程。
  • 证书过期:单节点环境可通过kubeadm alpha certs renew all续期证书,需提前备份/etc/kubernetes/pki目录。

六、进阶优化建议

  1. 资源限制配置:通过LimitRangeResourceQuota控制命名空间资源使用,避免单个Pod占用过多资源。
  2. 日志与监控集成:部署Node Exporter+Prometheus+Grafana监控集群状态,配置Fluentd收集容器日志。
  3. 高可用扩展:若需从单机升级为多节点,可使用kubeadm join将新节点加入集群,并配置etcd集群化部署。

结语

Kubernetes 1.8单机部署为开发者提供了轻量级的集群模拟环境,通过本文的详细步骤与配置示例,读者可快速完成从环境准备到业务验证的全流程。建议结合实际场景调整网络与存储配置,并定期备份关键数据(如etcd数据目录)。对于生产环境,建议升级至更高版本以获得安全补丁与功能增强。