如何安装k8s集群

发布时间:2021-11-15 15:51:25 作者:iii
来源:亿速云 阅读:138
# 如何安装Kubernetes(k8s)集群

## 目录
- [前言](#前言)
- [环境准备](#环境准备)
  - [硬件要求](#硬件要求)
  - [操作系统要求](#操作系统要求)
  - [网络要求](#网络要求)
- [安装前配置](#安装前配置)
  - [关闭Swap](#关闭swap)
  - [配置主机名与Hosts](#配置主机名与hosts)
  - [安装依赖工具](#安装依赖工具)
  - [配置内核参数](#配置内核参数)
  - [安装容器运行时](#安装容器运行时)
- [安装Kubernetes组件](#安装kubernetes组件)
  - [添加Kubernetes仓库](#添加kubernetes仓库)
  - [安装kubeadm/kubelet/kubectl](#安装kubeadmkubeletkubectl)
- [初始化Master节点](#初始化master节点)
  - [运行kubeadm init](#运行kubeadm-init)
  - [配置kubectl](#配置kubectl)
  - [安装网络插件](#安装网络插件)
- [加入Worker节点](#加入worker节点)
- [验证集群状态](#验证集群状态)
- [部署测试应用](#部署测试应用)
- [集群维护](#集群维护)
  - [升级集群](#升级集群)
  - [备份与恢复](#备份与恢复)
- [常见问题排查](#常见问题排查)
- [总结](#总结)

## 前言

Kubernetes(简称k8s)是当前最流行的容器编排平台,能够自动化部署、扩展和管理容器化应用。本文将详细介绍如何从零开始搭建一个生产可用的Kubernetes集群,涵盖从环境准备到集群验证的全过程。

## 环境准备

### 硬件要求

- **Master节点**(控制平面):
  - 至少2核CPU
  - 4GB内存
  - 20GB磁盘空间
  - 稳定的网络连接

- **Worker节点**(工作节点):
  - 根据工作负载调整
  - 建议至少4核CPU/8GB内存/50GB磁盘

> 生产环境建议:3个Master节点实现高可用 + 多个Worker节点

### 操作系统要求

- 支持的操作系统:
  - Ubuntu 20.04/22.04 LTS
  - CentOS 7/8
  - RHEL 7/8
  - Debian 10/11

本文以**Ubuntu 22.04 LTS**为例演示安装过程。

### 网络要求

- 节点间网络互通
- 开放端口:
  - Master节点:6443, 2379-2380, 10250-10252
  - Worker节点:10250, 30000-32767
- 建议配置:
  - 非NAT环境
  - 每个节点固定内网IP
  - 禁用防火墙或配置正确规则

## 安装前配置

### 关闭Swap

Kubernetes 1.8+要求禁用Swap:

```bash
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

配置主机名与Hosts

  1. 设置主机名(每个节点不同):
sudo hostnamectl set-hostname k8s-master  # Master节点
sudo hostnamectl set-hostname k8s-node1  # Worker节点
  1. 编辑/etc/hosts(所有节点相同):
192.168.1.100 k8s-master
192.168.1.101 k8s-node1
192.168.1.102 k8s-node2

安装依赖工具

sudo apt-get update && sudo apt-get install -y \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

配置内核参数

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

sudo modprobe overlay
sudo modprobe br_netfilter

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF

sudo sysctl --system

安装容器运行时

Kubernetes支持多种容器运行时,本文选择containerd:

# 安装containerd
sudo apt-get install -y containerd

# 生成默认配置
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml

# 修改配置启用systemd cgroup驱动
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml

# 重启服务
sudo systemctl restart containerd
sudo systemctl enable containerd

安装Kubernetes组件

添加Kubernetes仓库

sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg \
  https://packages.cloud.google.com/apt/doc/apt-key.gpg

echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] 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 kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl  # 防止自动升级

初始化Master节点

运行kubeadm init

sudo kubeadm init \
  --pod-network-cidr=10.244.0.0/16 \
  --apiserver-advertise-address=192.168.1.100 \
  --control-plane-endpoint=k8s-master

成功后会显示:

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

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

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.1.100:6443 --token abcdef.0123456789abcdef \
  --discovery-token-ca-cert-hash sha256:12345...

配置kubectl

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

安装网络插件

选择Calico网络插件:

kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

验证安装:

kubectl get pods -n kube-system

加入Worker节点

在每个Worker节点执行Master初始化时输出的join命令:

sudo kubeadm join 192.168.1.100:6443 --token abcdef.0123456789abcdef \
  --discovery-token-ca-cert-hash sha256:12345...

验证集群状态

kubectl get nodes  # 查看所有节点状态
kubectl cluster-info  # 查看集群信息
kubectl get pods -A  # 查看所有Pod

部署测试应用

kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get svc nginx  # 获取访问端口

访问测试:

curl http://<节点IP>:<NodePort>

集群维护

升级集群

  1. 升级kubeadm:
sudo apt-get update && sudo apt-get install -y kubeadm=1.27.0-00
kubeadm version
  1. 升级Master节点:
sudo kubeadm upgrade plan
sudo kubeadm upgrade apply v1.27.0
  1. 升级Worker节点:
kubectl drain <node> --ignore-daemonsets
sudo kubeadm upgrade node
sudo systemctl restart kubelet
kubectl uncordon <node>

备份与恢复

备份关键配置:

# 备份etcd
sudo ETCDCTL_API=3 etcdctl \
  --endpoints=https://127.0.0.1:2379 \
  --cacert=/etc/kubernetes/pki/etcd/ca.crt \
  --cert=/etc/kubernetes/pki/etcd/server.crt \
  --key=/etc/kubernetes/pki/etcd/server.key \
  snapshot save snapshot.db

# 备份k8s配置
sudo cp -r /etc/kubernetes /backup/kubernetes-config
sudo cp -r /var/lib/kubelet /backup/kubelet-data

常见问题排查

  1. kubelet无法启动

    • 检查容器运行时状态:sudo systemctl status containerd
    • 查看日志:journalctl -xeu kubelet
  2. 节点NotReady

    • 检查网络插件是否正常运行:kubectl get pods -n kube-system
    • 验证网络连接:ping <其他节点IP>
  3. Pod卡在Pending状态

    • 查看事件:kubectl describe pod <pod-name>
    • 检查资源配额:kubectl describe nodes

总结

通过本文的详细步骤,您已经成功搭建了一个功能完整的Kubernetes集群。建议进一步: - 配置持久化存储(如NFS/CSI) - 安装监控系统(Prometheus+Grafana) - 配置日志收集(EFK/ELK) - 设置RBAC权限控制

Kubernetes的学习曲线较陡峭,建议通过官方文档和实际项目不断积累经验。Happy Kubernetes-ing! “`

注:实际使用时,请根据您的具体环境修改IP地址、版本号等参数。本文档假设使用Kubernetes 1.27版本,不同版本的具体命令可能略有差异。

推荐阅读:
  1. K8S集群安装 之 安装Docker容器的私有仓库
  2. K8S集群安装 之 Docker环境准备

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

k8s

上一篇:Word2Vec论文总结和实现是怎样的

下一篇:怎么使用tcpdump

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》